8月1日SpringBoot学习笔记

news2024/11/15 5:15:19

 
今天内容:配置maven    搭建springboot项目   约定大于配置  IOC  DI   常用注解  springbean的作用域     springbean的生命周期


Springboot

创建springboot项目

        maven项目添加springboot变成的springboot项目

具体步骤参考:http://t.csdnimg.cn/2NTuK与http://t.csdnimg.cn/nQp9T

约定大于配置

        也可以叫做约定优于配置,也称作按约定编程,是一种软件设计范式,指在减少软件开发人员需做决定的数量,获得简单的好处,而又不失灵活性。例如注解就是约定,直接使用就行,没特殊要求就不用配置代码实现。

IOC  

        IOC==控制反转:容器和代码之间的控制权反转,代码中不需要明文调用来得到对象,只需要声明该类需要什么类型的对象即可

        在项目运行阶段,程序中需要很多对象来完成相关业务,springboot提供了很多注解标注类,,让spring管理这些类的对象的生命周期。如:

@Controller(前台控制接收) 返回地址信息  

@RestController  直接返回给客户端

@Service(业务类)

@Repository(Dao数据访问数据库)  

@Component(其他功能类)  

@Bean(指示一个方法生成一个bean)
  

        spring提供了IOC的方式方便获取该对象:

package com.easy.common;

import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

@Component
public class TestA {

	//面试题
	//spring Bean的作用域//@Scope(value= "")
	//singleton  单例模式    一个对象    默认
	//prototype  原型模式    每次使用类都需要一个新的对象
	//request  web项目中请求作用域     每一次请求都会创建一个新的对象中    要求使用的本类的类也要设置
	//session  每次会话(从访问服务器到结束)都会创建一个新的对象,下线或者默认30分钟没有动作就失效
	//GlobalSession   全局的
	public void test() {
		System.out.println(this);
		System.out.println("test method");
	}
}
package com.easy.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.easy.common.TestA;

@Controller
public class EasyAController {

	@Autowired
	TestA testa;
	
	@RequestMapping("testa")
	public String testA() {
		testa.test();
		return "EasyA method";
	}
	
	
}

DI

        依赖注入DI   通过识别关系注入依赖对象

package com.easy.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.easy.common.TestA;
import com.easy.service.EasyService;

@RestController
public class EasyController {

	//该类中需要EasyService类的对象
	//在这个类中只需要声明依赖EasyService这个类就行
	//不需要通过代码获取EasyService类的对象
	
	//依赖注入DI   通过识别关系注入依赖对象

	//@Autowired告诉spring说明需要这个类的对象,spring自动注入
	@Autowired
	EasyService easyS;
	
	@RequestMapping("testb")
    @Autowired		
	public String testB(TestA testa) {
		testa.test();
		return "Easy method";
	}
	
	@RequestMapping("easya")
	public String easya() {
		System.out.println(easyS.toString());
		return "new Service";
	}
	
	@RequestMapping("hello")
	public String hello() {
		return "孩子们我回来了!";
	}
	
}

springbean的作用域    

        在Spring框架中,bean的作用域决定了bean的生命周期和Spring容器如何创建bean实例。以下是Spring支持的主要bean作用域:

1. singleton(单例):
        默认作用域。对于在Spring容器中定义为singleton的bean,容器将只创建一个bean实例。无论多少次请求,总是返回同一个实例。

2. prototype(原型):
        对于定义为prototype的bean,每次请求都会创建一个新的bean实例。

3. request:
        每次HTTP请求都会创建一个新的bean,该bean仅在当前HTTP请求内有效。仅适用于Web应用程序中。

4. session:
        每次HTTP会话都会创建一个新的bean,该bean仅在当前HTTP会话内有效。仅适用于Web应用程序中。(从访问服务器到结束;主动或被动下线 或者 默认30分钟没有动作就结束)

5.  global Session:
       在一个全局的Http Session中,容器会返回该Bean的同一个实例,仅在使用portlet context时有效。同样只有在Web应用中使用Spring时,该作用域才有效。

使用@Scope注解:
        可以通过@Scope注解指定bean的作用域,例如:

@Controller
@Scope("prototype")
public class MyController {
    // ...
}



springbean的生命周期

        bean创建-->初始化-->销毁 的过程,bean的生命周期由容器进行管理,我们可以自定义bean的初始化和销毁方法来满足我们的需求,当容器在bean进行到当前生命周期的时候,来调用自定义的初始化和销毁方法。

1.Spring 对bean 进行实例化。

2.Spring 将值和bean的引用注入到bean对应的属性中。

3.如果bean实现了BeanNameAware接口,Spring将bean的ID传递给setBean-Name()  方法。       (实现BeanNameAware清主要是为了通过Bean的引用来获得Bean的ID,一般业务中是很少有用到Bean的ID的)

4.如果bean 实现了BeanFactoryAware接口,Spring将调用setBeanFactory() 方法,将BeanFactory容器实例传入。     (实现BeanFactoryAware 主要目的是为了获取Spring容器,如Bean通过Spring容器发布事件等)

5.如果bean实现了ApplicationContextAware接口,Spring将调用setApplicationContext() 方法,将bean所在的应用上下文的引用传入进来。(作用与BeanFactory类似都是为了获取Spring容器,不同的是Spring容器在调用setApplicationContext方法时会把它自己作为setApplicationContext 的参数传入,而Spring容器在调用setBeanDactory前需要程序员自己指定(注入)setBeanDactory里的参数BeanFactory )

6.如果bean实现了BeanPostProcessor接口,Spring将调用它们postProcessBeforeInitialization() 方法     (作用是在Bean实例创建成功后对进行增强处理,如对Bean进行修改,增加某个功能)

7.如果bean实现了InitializingBean接口,Spring将调用它们的after-PropertiesSet()方法。类似的,如果bean使用init-method声明了初始化方法,该方法也会被调用。

8.如果bean实现了BeanPostProcessor接口,Spring将调用它们的post-ProcessAfterInitialization() 方法。    (作用与6的一样,只不过6是在Bean初始化前执行的,而这个是在Bean初始化后执行的,时机不同 )

9.此时, bean 已经准备就绪,可以被应用程序使用了,它们将一直驻留在应用上下文中,直到该应用上下文被销毁。

10.如果bean实现了DisposableBean接口,Spring将调用它的destory()接口方法。同样,如果bean使用destroy-method声明了销毁方法,该方法也会被调用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1971184.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

matlab y=sin(x) - 2/π*(x)函数绘制

[TOC](matlab ysin(x) - 2/π*(x)函数绘制) ysin(x) - 2/π*(x) clc; clear; close all; x_axis_length 10; y_axis_length 10; % 创建 x 值向量 x_positive linspace(0.1, 10, 1000); % 正半轴上的 x 值 x_negative linspace(-10, -0.1, 1000); % 负半轴上的 x 值% 计算…

从数学角度理解SVM分类算法

再谈间隔最大化 我们知道,支持向量机是以“间隔”作为损失函数的,支持向量机的学习过程就是使得间隔最大化的过程,若想要了解支持向量机的运转机制,首先就得知道间隔怎么计算。 “间隔大小”是由距离分类“界限”最近的两个数据点…

《计算机网络》(第8版)第1章 概述 复习笔记

第 1 章 概述 一、计算机网络在信息时代中的作用 计算机网络的两个重要功能: 1 .连通性 指互联网上的用户之间是相互连通的。 2 .共享(资源共享) 资源共享可以是信息共享、软件共享,也可以是硬件共享。此…

Meta新功能生成式AI意味着什么

去年,Meta 推出了 AI 功能,允许广告主创建动态背景、增强图像并生成源自其原始内容的各种广告文本版本。这主要是侧重于通过测试图片和文本等创意元素来优化广告效果。在最新的更新中,Meta 带来了全新的 AI 生成功能,允许广告主依…

Java高级工程师教你解决内存泄漏生产事故方法案例实战

Java高级工程师教你解决内存泄漏宕机生产事故案例实战 一、事故简述与核心日志分析 生产WEB项目,每隔一段时间就宕机了,没有反应,JAVA进程还在,但是请求都没有反应! 二、日志分析 org.springframework.web.util.Ne…

jeecg-boot框架activiti定时节点流转错误分析

文章目录 一、项目介绍二、问题复现三、排查过程1、找到报错信息2、找到报错的堆栈信息3.找到错误代码4.分析错误原因4.1、首先要明白SecurityManager是什么?4.2、定时器前的流程跟之前的流程不是同一个流程👉定时任务的数据已经生成,那么该如…

Moretl 日志采集 使用说明

永久免费: Gitee下载最新版本 使用咨询: 扫码添加QQ 1: 服务器 部署Moretl文件采集服务.(管理员身份运行) 2. 在<设备电脑>打开 [部署页面],下载 [Client.zip].解压打开[Start.exe] 步骤3: [部署页面]输入远程Token.看到刚刚部署的设备电脑. 3.1 点击[明细],修改[…

Java Excel复杂表头,表头合并单元格

Java Excel复杂表头&#xff0c;表头合并单元格 效果预览 一、maven依赖 <!--操作excel --><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.1.1</version><scope>test</…

Sqlserver查询链接服务器数据问题,如何解决??

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

群晖NAS使用Docker命令方式安装cpolar内网穿透工具详细流程

文章目录 前言1. 检查安装Container Manager2. 检查开启群晖SSH连接3. Windows SSH 连接群晖4. 下载Cpolar 镜像5. 群晖Docker安装Cpolar 前言 在某些群晖NAS型号版本&#xff0c;无法使用套件安装的时候&#xff0c;我们可以采用Docker的方式进行安装cpolar内网穿透工具&…

连接未来:幂简集成引领API新时代

写在前面 在这个信息爆炸的数字时代&#xff0c;我们迎来了所谓的"数据的黄金时代"。数据不仅仅是数字和信息的集合&#xff0c;它已经成为推动现代企业决策、创新和增长的关键资产。 而API作为数据流通的桥梁&#xff0c;在现代互联网架构中发挥着至关重要的作用。…

Stability AI推出Stable Fast 3D:从单个图像快速生成 3D 模型资产

Stable Fast 3D是Stability AI公司推出的一款革命性的3D资产生成技术&#xff0c;它能够在0.5秒内将单张输入图像转化为详尽的3D模型&#xff0c;为3D重建领域带来了速度和质量上的显著提升。这项技术不仅生成UV展开网格、材料参数和反照率颜色&#xff0c;还支持用户选择四边形…

thinkphp8开发的广告联盟网站系统源码

这款程序是采用国内主流的PHP框架&#xff0c;最新版本thinkphp8.0.4&#xff0c;也是目前市面上功能相对比较强大&#xff0c;界面比较好看的一款全开源的广告联盟系统&#xff0c;程序支持任意二开商业&#xff0c;并且代码无任何加密处理。 程序开发&#xff1a;PHPMySQL …

【ROS 最简单教程 001/300】ROS 概念介绍:机器人元操作系统

ROS&#xff1a;Robot Operating System 【适用于机器人的开源元操作系统】 ROS Plumbing Tools Capabilities Ecosystem 通讯 Plumbing ⭐ 实现ROS不同节点之间的交互工具 Tools ⭐ 工具软件包 (ROS中的开发和调试工具)&#xff0c;提供 仿真 功能&#xff1b;功能 Capabi…

苹果10使用操作

1、关闭应用&#xff1a;要关闭iPhone X的后台任务&#xff0c;必须在多任务界面长按应用卡片&#xff0c;这时缩略图左上角会出现关闭符号&#xff0c;点击关闭符号或者上滑卡片都可以关闭。 注意&#xff1a;在没有长按触发关闭符号的情况下&#xff0c;上滑任务卡片是无法关…

大数据技术原理-Hadoop的安装

摘要 随着大数据时代的到来&#xff0c;Hadoop作为一项重要的分布式计算框架&#xff0c;其安装与配置是大数据技术学习者必须掌握的技能。本文通过实验报告的形式&#xff0c;详细记录了在虚拟机环境下安装Hadoop并配置其为伪分布式模式的全过程。实验过程中&#xff0c;遇到…

【从零开始一步步学习VSOA开发】 概述

概述 概念 VSOA&#xff08;Vehicle SOA&#xff09;是翼辉为了解决任务关键型系统不能适用当前微服务通信架构问题而设计的⼀个轻量级适用于任务关键领域的微服务通信架构&#xff0c;以方便开发者构建大型分布式松耦合软件系统&#xff0c;且支持并行开发。 特点 其主要特…

PAI-DSW中对齐NoteBook和命令行的Python环境

我在命令行使用 pip 安装了neo4j&#xff0c;但是在NoteBook中却无法import成功&#xff0c;问了Chat-GPT才知道可能是NoteBook和命令行的Python不一致造成的。下面将介绍如何验证NoteBook和命令行的Python环境是否一致&#xff0c;以及如何将NoteBook的Python环境修改成命令行…

0702随机存取存储器RAM

随机存取存储器RAM 7.2随机存取存储器&#xff08;RAM&#xff09;7.2.1静态随机存取存储器&#xff08;SRAM&#xff09;7.2.2同步静态随机存取存储器&#xff08;SSRAM&#xff09;SSRAM的使用特点&#xff1a; 7.2.3 动态随机存取存储器2.DRAM的基本结构 7.2.4 存储器容量的…

抖音上传视频模糊怎么办?模糊视频怎么变高清?

抖音上传视频有时候会遇到视频不清晰的情况&#xff0c;那么自己在遇到不清楚的情况之下怎么办呢&#xff0c;抖音上传视频模糊怎么办&#xff0c;我们要怎么调整? 一、抖音上传视频模糊的原因是什么? 1.前期拍摄不清晰 2.视频压缩方法欠佳、视频传送被系统压缩 3.上传视频…