bean的作用域:bean在spring中的某种行为模式。
spring bean作用域
spring bean作用域(scope):
-
单例模式 singleton(默认模式)
该作用域下的bean在IoC容器中只存在一个实例。主要是出于性能的考虑。
场景:通常无状态的bean使用该作用域。无状态表示bean对象的属性状态不需要更新 -
原型作用域(多例)prototype
每次对作用于下的bean请求,都会创建新的实例。
场景:通常有状态的bean使用该作用域。有可能会更新属性。 -
请求作用域 request
每次HTTP请求会创建新的bean实例,类似于prototype
场景:一次HTTP的请求和响应的共享bean
适用于 spring MVC / spring Web -
会话作用域 session
每次session会话,共享一个bean
适用于spring MVC -
全局作用域 application
一个 HTTP servlet context中,共享一个bean
适用于spring MVC -
HTTP websocket作用域 websocket
网络长连接,只适用于Spring WebSocket项目
设置作用域
使用 @Scope
标签声明 Bean 的作用域
- 直接设置值
@Scope("prototype")
@Component
public class UserBeans {
@Bean
@Scope("prototype")
public User user() {
User user = new User();
user.setId(1);
user.setName("zhang san");
return user;
}
}
- 使用枚举设置
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@Component
public class UserBeans {
@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public User user() {
User user = new User();
user.setId(1);
user.setName("zhang san");
return user;
}
}
spring的执行流程
- 启动容器
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
加载配置文件:类加载路径下的spring-config.xml
spring-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:content="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<content:component-scan base-package="com.java.demo"></content:component-scan>
</beans>
-
根据配置完成bean初始化
根据spring-config.xml bean的配置,扫描com.java.demo包下的spring注解 -
注册bean对象到容器中
只有在包扫描路径上的类,并且使用了spring注解,才可以注册到容器中。 -
装配bean的属性
如果bean对象需要使用其他bean对象作为属性,使用注解@Autowired,@Resource
bean的生命周期
bean对象从诞生到销毁的过程
- 实例化bean(为bean分配内存空间) 实例化 不等于 初始化
- 设置属性(对bean进行注入和装配)
- bean初始化:初始化的时候就有可能会用到属性,所以要先设置属性再初始化
- 3.1 执行各种通知:
- 3.2 初始化前置方式
- 3.3 初始化方法 (设置了就会执行,不设置就不执行)
- xml方式;
- 注解方式
- 3.4 初始化后置方法
- 使用bean
- 销毁bean
lombok使用:
- 在框架中添加Lombok依赖
- 添加
@Getter
和@Setter
import lombok.Getter;
import lombok.Setter;
// lombok:为了简化代码中必须写的代码,不再需要写set和get方法
@Getter
@Setter
public class User {
private int id;
private String name;
}
- 别忘了下载插件