Bean的作用域
Bean的作用域是指在Spring整个框架中的某种行为模式,比如singleton单例作用域,就表示Bean在整个spring中只有一份,它是全局共享的,那么当其他人修改了这个值时,那么另一个人读取到的就是被修改的值
Bean的六种作用域
-
单例(Singleton):这是Spring的默认作用域。当一个bean的作用域被设置为单例时,Spring容器中只会存在一个共享的bean实例。对于所有的请求和引用,Spring容器都会返回同一个bean实例。
-
原型(Prototype):当一个bean的作用域被设置为原型时,每次请求该bean时,Spring容器都会创建一个新的bean实例。这意味着每次注入或通过Spring容器获取该bean时,都会得到一个全新的实例。
-
请求(Request):这种作用域的bean是针对每个HTTP请求创建的。每个请求都会创建一个新的bean实例,请求完成后,该bean实例会被销毁。
-
会话(Session):这种作用域的bean是针对每个HTTP会话创建的。在一个会话中,对于该会话的每个请求,都会使用同一个bean实例。
-
全局会话(Global Session):这种作用域类似于会话作用域,但是它适用于全局HTTP会话。通常用于Portlet环境。
-
singleton 单例模式 (默认作用域) 只有一个全局对象。
-
prototype 原形模式 (多例默认) 每次访问都会创建一个新对象
-
request 请求作用域 (只能在Spring MVC 中使用) 每次HTTP请求都会创建一个对象
-
session 会话作用域 (只能在Spring MVC 中使用) 每次session会话使用一个bean对象
-
application 全局作用域 (只能在Spring MVC 中使用) 一个http servlet context中共享一个对象
-
websocket HTTP WebSocket 作用域 (只能在Spring MVC 中使用)
单例作用域singleton与全局作用域 application的区别
- singleton时Spring Core的作用域
- application是Spring Web中的作用域
- singleton作用与Ioc容器
- application作用域Servlet容器
设置作用域
使用@Scope注解设置
设置方法有两种
1.直接写作用域名称
@Repository
public class MxRepository {
//直接写作用域的名称
@Scope("prototype")
@Bean
public User user(){
User user=new User();
user.setName("张三");
user.setID(15);
return user;
}
}
2.预定义常量
@Repository
public class MxRepository {
//是一个预定义的常量
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@Bean
public User user(){
User user=new User();
user.setName("张三");
user.setID(15);
return user;
}
}
Spring的执行流程
1.启动容器
2.Bean加载 (xml文件中的Bean、配置了加载组件路径下的类的扫描)
3.将Bean对象注册到容器中
4.使用Bean属性
5.Spring销毁
Bean生命周期
1.Bean的实例化 (分配内存空间) (先买房)
2.设置属性(依赖注入DI)(装修)
3.初始化 (买各种家电)
3.1执行各种通知
3.2初始化的前置方法 (@postConstruct 如果有指定init-method 就执行init-method)
3.3初始化方法
3.4初始化的后置方法
4.使用Bean (入住)
5.销毁Bean (卖房)