目录
- Bean作用域
- 设置Bean作用域
- 生命周期
- ⽣命周期演示
Bean作用域
Bean作用域指的是Bean在Spring容器中的某种行为(单例、原型…)。
Bean的6种作用域
- singleton:单例作⽤域
- prototype:原型作⽤域(多例作⽤域)
- request:请求作⽤域
- session:会话作⽤域
- application:全局作⽤域
- websocket:HTTP WebSocket 作⽤域
设置Bean作用域
1.@Scope(“prototype”)
2.@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
生命周期
Spring生命周期:
1.启动容器
2.读取配置进行Bean初始化
3.将Bean加入到容器中
4.装配Bean属性(给当前类的属性DI,进行赋值)
Bean生命周期:
1.实例化(内存空间分配)
2.设置Bean属性(进行依赖注入,将依赖的Bean赋值到当前类的属性上)
3.Bean的初始化
3.1 执行各种通知
3.2 初始化的前置方法
3.3 初始化方法
3.4 初始化的后置方法
4.使用Bean
5.销毁Bean
⽣命周期演示
import com.java.demo.model.User;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.annotation.Autowired;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
public class BeanLifeComponent implements BeanNameAware {
@Autowired
private User user;
@Override
public void setBeanName(String s) {
System.out.println("执行了 BeanNameAware -> " + s);
}
@PostConstruct
public void doPostConstruct(){
System.out.println("执行了 @PostConstruct");
System.out.println(user.toString());
}
public void myInit(){
System.out.println("执行了 myinit");
}
@PreDestroy
public void doPreDestroy(){
System.out.println("执行了 @PreDestroy");
}
public void sayHi(){
System.out.println("使用 Bean");
}
}
调⽤类:
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class BeanLifeTest {
public static void main(String[] args) {
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext("spring-config.xml");
BeanLifeComponent component =
context.getBean("mybean",BeanLifeComponent.class);
component.sayHi();
context.close();
}
}
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>
<bean id="mybean" class="BeanLifeComponent"
init-method="myInit">
</bean>
</beans>