Bean生命周期
Bean生命周期:
- 实例化(注意:实例化不等于初始化,实例化仅仅是分配了内存空间)
- 设置属性(为Bean的属性设置值和依赖注入(其他对Bean的引用))
- 初始化
3.1 执行通知方法,通知别人这个Bean已经执行到了这一步,实现BeanNameAre等接口
3.2 执行初始化的前置方法 有两种实现方式(在bean标签中定义init-method方法,或者使用@PostConstruct注解
3.3 初始化方法
3.4 初始化后置方法 - 使用Bean
- 销毁Bean,同样是两个实现方法(xml 中定义destroy-method 或者 使用@PreDestroy注解)
验证:
@Controller
public class StudentController implements BeanNameAware {
private String name;
public void setName(String name) {
System.out.println("setName");
this.name=name;
}
@PostConstruct
public void postConstruct() {
System.out.println("postConstruct");
}
@PreDestroy
public void preDestroy() {
System.out.println("preDestroy");
}
@Override
public void setBeanName(String s) {
System.out.println("setBeanName");
}
public void initMethod() {
System.out.println("initMethod");
}
}
public class App {
public static void main(String[] args) {
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");
StudentController st = applicationContext.getBean("studentController",StudentController.class);
applicationContext.destroy();
}
}
<?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.lzh">
</content:component-scan>
<bean id="studentController" class="com.lzh.controller.StudentController" init-method="initMethod"
destroy-method="preDestroy"></bean>
</beans>
结果:
符合预期