Bean的定义: 一个对象被使用多次,就可以称为这个对象为Bean
Bean作用域定义:Bean 在 Spring 整个框架中的行为模式,比如 singleton 单例作用域,表示 Bean 在整个 Spring 中只有一份,是全局共享的,当其他人修改了这个对象的值后,另一个人读取到的就是修改后的值
Bean 的六种作用域
1.singleton: 单例作用域(Spring默认是单例模式,在 整个Spring 框架中 只有一份Bean,只存在一个实例,获取Bean都是同一个对象,类似于浅拷贝)
2.prototype: 原型作用域 (多例作用域,Spring框架中有一份最初的Bean,每次对该作用域下的 Bean 请求都会创建一个新的实例,类似于深拷贝,每次从Spring拿的Bean对象只是bean对象的一份拷贝对象)
3.request:请求作用域(每次http 请求都会创建一个新的实例,类似于prototype,一次请求和响应共享一个Bean,只有在Spring MVC中才能使用)
4.session:会话作用域(session,每次 Session 会话共享一个 Bean [Spring MVC])
5.application:全局作用域(一个http servlet context 中共享一个 bean) [Spring MVC]
6.websocket:网络长连接(只适用于Spring WebSocket使用)
设置作用域
1.使用@Scope,在括号里面以字符串形式写入想要的作用域
2.使用@Scope,在括号里使用ConfigurableBeanFactory.想要的模式
Spring 执行流程
1.启动容器(在启动类执行ApplicationContext的时候启动容器,加载配置文件)
2.根据配置文件完成Bean初始化(看加载文件有没有Bean,查看扫描路径下的类有没有使用注解@Controller @Service @component @Repository @Configurartion @Bean)
3.注册Bean对象到容器中(如果Bean对象需要使用其他Bean对象作为属性,可以使用注解@Autowired @Resource)
4.装配Bean的属性
Bean 生命周期
1.实例化 Bean(给Bean 分配内存空间)
2.设置属性(先设置属性,是因为属性在初始化的时候可能会被用到)
3.Bean 初始化
3.1.执行各种通知
3.2.执行初始化前置方法
3.3.执行初始化方法(1:注解方式 @PostConstruct 2:xml方式 init-method方法)
3.4执行初始化后置方法
4.使用Bean
5.销毁Bean(1:注解方式@PreDestroy 2:xml方式)