生命周期 03 @PostConstruct & @PreDestroy
使用JSR250
@PostConstruct:在bean创建完成并且属性赋值完成后执行此方法
@PreDestroy:在容器销毁bean之前通知进行清理工作
Dog.java
package com.example.annotations.bean;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
/**
* 测试
* @PostConstruct
* @PreDestroy
*/
public class Dog {
public Dog() {
System.out.println("dog construct ...");
}
/**
* 对象创建并赋值之后调用
*/
@PostConstruct
public void init(){
System.out.println("dog @PostConstruct ...");
}
/**
* 容器移除对象前调用
*/
@PreDestroy
public void destroy(){
System.out.println("dog @PreDestroy ...");
}
}
配置新加
@Bean(value = "dog4LifeCycle")
public Dog dog(){
return new Dog();
}
测试
@Test
void lifeCycleTest(){
//配置类测试
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfLifeCycle.class);
System.out.println("容器创建完毕");
//关闭容器
applicationContext.close();
System.out.println("容器已关闭");
}
结果
现添加之前的生命周期方法
package com.example.annotations.bean;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
/**
* 测试
* @PostConstruct
* @PreDestroy
*/
public class Dog {
public Dog() {
System.out.println("dog construct ...");
}
/**
* 做初始化方法
* 初始化方法不可以有参数 但可以抛异常
*/
public void init() {
System.out.println("dog init ...");
}
/**
* 对象创建并赋值之后调用
*/
@PostConstruct
public void postConstruct(){
System.out.println("dog @PostConstruct ...");
}
/**
* 容器移除对象前调用
*/
@PreDestroy
public void preDestroy(){
System.out.println("dog @PreDestroy ...");
}
/**
* 做销毁方法
* 销毁方法不可以有参数 但可以抛异常
*/
public void destroyMethod() {
System.out.println("dog destroyMethod ...");
}
}
配置类:
@Bean(value = "dog4LifeCycle",initMethod = "init",destroyMethod = "destroyMethod")
public Dog dog(){
return new Dog();
}
测试结果
扩展 JSR250
原文连接
-
简介
JSR 250(Java Specification Requests
),Java注解规范,定义了一系列基于Java EE和Java SE通用注解。它避免了不同框架或组件间重复(或冗余)的注解。JSR 250正式发布于2006年5月11日。随着申明式注解配置被越来越多地应用在Java框架(比如Spring),JSR 250可能在未来会持续增长,所以在使用诸如Spring之类的框架时,尽量使用JSR 250中定义的注解,避免和特定框架紧耦合。 -
注解列表
注解 作用 @Generated 标记该资源是自动生成的 @Resource 定义了对某个资源的引用 @Resources 容器针对多资源的注解 @PostConstruct 标记在方法上用于依赖注入的初始化动作 @PreDestroy 标记在方法上用于该对象实例从容器销毁时的前置操作 @Priority 定义了该类执行的优先级 如拦截器的优先级 @RunAs 定义了应用在Java EE容器运行时的角色 @RolesAllowed 定义了什么安全角色被允许执行方法 @PermitAll 标记在类或方法上允许所有角色执行(所有)方法 @DenyAll 标记在方法上不允许所有角色调用 @DeclareRoles 用于定义系统的安全角色 @DataSourceDefinition 定义一个数据源,并通过JNDI注册到容器 @ManagedBean 定义一个被容器管理的对象