008Spring自定义初始化和销毁方法
2018-07-10 本文已影响15人
编程界的小学生
1、简介
Bean的生命周期:
bean的创建--》初始化--》销毁
bean的创建:
单实例:在容器启动的时候就创建
多实例:在每次主动获取bean的时候创建
初始化:
对象创建完成,并赋值完成,调用初始化方法
销毁:
单实例:容器管理的时候进行销毁(调用容器的close方法)。
多实例:容器不会管理这个bean,所以说容器不会调用销毁方法,需要纯手动调用。
2、@Bean initMethod&destroyMethod
2.1、实体类
public class Car {
public Car() {
System.out.println("car constructor...");
}
public void init() {
System.out.println("car init ...");
}
public void destory() {
System.out.println("car destory...");
}
}
2.2、配置类
@Configuration
public class MainConfig {
@Bean(initMethod = "init", destroyMethod = "destory")
public Car car() {
return new Car();
}
}
2.3、测试类
public class BeanTest {
@Test
public void test1() {
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);
System.out.println("容器创建完成...");
((AnnotationConfigApplicationContext) applicationContext).close();
}
}
2.4、测试结果
car constructor...
car init ...
容器创建完成...
car destory...
3、InitializingBean&DisposableBean
3.1、实体
@Component
public class Cat implements InitializingBean, DisposableBean {
public Cat() {
System.out.println("Cat constructor...");
}
@Override
public void destroy() throws Exception {
System.out.println("cat destroy");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("cat afterPropertiesSet");
}
}
3.2、配置类
@Configuration
@ComponentScan(basePackages = "com.chentongwei.spring.annotation.bean.entity.Cat")
public class MainConfig {
@Bean(initMethod = "init", destroyMethod = "destory")
public Car car() {
return new Car();
}
}
3.3、测试类
同【2.3】
3.4、测试结果
Cat constructor...
cat afterPropertiesSet
car constructor...
car init ...
容器创建完成...
car destory...
cat destroy
4、@PostConstruct&@PreDestroy
4.1、实体
public class Dog {
public Dog() {
System.out.println("dog constructor...");
}
// 对象创建并赋值之后
@PostConstruct
public void init() {
System.out.println("dog postconstructor...");
}
// 在容器移除对象之前
@PreDestroy
public void destroy() {
System.out.println("dog PreDestroy ...");
}
}
4.2、配置类
@Configuration
@ComponentScan(basePackages = "com.chentongwei.spring.annotation.bean.entity")
@Import(Dog.class)
public class MainConfig {
@Bean(initMethod = "init", destroyMethod = "destory")
public Car car() {
return new Car();
}
}
4.3、测试类
同【2.3】
4.4、测试结果
Cat constructor...
cat afterPropertiesSet
dog constructor...
dog postconstructor...
car constructor...
car init ...
容器创建完成...
car destory...
dog PreDestroy ...
cat destroy
5、广告
-
码云点star,万分感谢!
代码已经上传到码云了
https://gitee.com/geekerdream/spring-anonation
通用的权限处理框架
https://gitee.com/geekerdream/common-security
通用的异常处理
https://gitee.com/geekerdream/exception-handler
通用的发送邮件
https://gitee.com/geekerdream/common-boot-email
陆续会推出更多干货,希望关注!
-
QQ群【Java初学者学习交流群】:458430385
-
微信公众号【Java码农社区】
- 今日头条号:编程界的小学生