【PostConstruct】(一)概念
程序员文章站
2022-05-25 08:03:26
...
The PostConstruct annotation is used on a method that needs to be executed after dependency injection is done to perform any initialization. This method MUST be invoked before the class is put into service. This annotation MUST be supported on all classes that support dependency injection. The method annotated with PostConstruct MUST be invoked even if the class does not request any resources to be injected. Only one method can be annotated with this annotation. The method on which the PostConstruct annotation is applied MUST fulfill all of the following criteria:
The method MUST NOT have any parameters except in the case of interceptors in which case it takes an InvocationContext object as defined by the Interceptors specification.
The method defined on an interceptor class MUST HAVE one of the following signatures:
void <METHOD>(InvocationContext)
Object <METHOD>(InvocationContext) throws Exception
Note: A PostConstruct interceptor method must not throw application exceptions, but it may be declared to throw checked exceptions including the java.lang.Exception if the same interceptor method interposes on business or timeout methods in addition to lifecycle events. If a PostConstruct interceptor method returns a value, it is ignored by the container.
The method defined on a non-interceptor class MUST HAVE the following signature:
void <METHOD>()
The method on which PostConstruct is applied MAY be public, protected, package private or private.
The method MUST NOT be static except for the application client.
The method MAY be final.
The method MUST NOT have any parameters except in the case of interceptors in which case it takes an InvocationContext object as defined by the Interceptors specification.
The method defined on an interceptor class MUST HAVE one of the following signatures:
void <METHOD>(InvocationContext)
Object <METHOD>(InvocationContext) throws Exception
Note: A PostConstruct interceptor method must not throw application exceptions, but it may be declared to throw checked exceptions including the java.lang.Exception if the same interceptor method interposes on business or timeout methods in addition to lifecycle events. If a PostConstruct interceptor method returns a value, it is ignored by the container.
The method defined on a non-interceptor class MUST HAVE the following signature:
void <METHOD>()
The method on which PostConstruct is applied MAY be public, protected, package private or private.
The method MUST NOT be static except for the application client.
The method MAY be final.
If the method throws an unchecked exception the class MUST NOT be put into service except in the case of EJBs where the EJB can handle exceptions and even recover from them.
Code piece 1:
package com.javabeat.jsrannotations;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;
public class Product {
private Integer price;
private String name;
@Resource(name = "typeB")
private Type type;
public Integer getPrice() {
return price;
}
public void setPrice(Integer price) {
this.price = price;
}
public Type getType() {
return type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@PostConstruct
public void init() {
System.out.println("In init block of Product");
}
@PreDestroy
public void destroy() {
System.out.println("In destroy block of Product");
}
}
Code piece 2:
public class MainApp {
public static void main(String[] args) {
AbstractApplicationContext context = new ClassPathXmlApplicationContext(
"BeansJSRAnnotation.xml");
Product product = (Product) context.getBean("product");
System.out.println("Product Name : " + product.getName());
System.out.println("Price : " + product.getPrice());
Type productType = product.getType();
System.out.println(product.getName() + " is of type:"
+ productType.getProductType());
context.registerShutdownHook();
}
}
Result:
In init block of Product
Product Name : ProductA
Price : 400
ProductA is of type:Import
In destroy block of Product
Summary:
After the bean was loaded, the method decorated by @PostConstruct was init.
上一篇: spring 4.x + mybatis 3.x 整合
下一篇: 东吴缔造者是谁?是孙坚和孙策吗
推荐阅读
-
javascript - 微信接口调用一直是 invalid signature
-
网络编程 - 使用PHP通过不同页面访问同一主机的cookie传递问题
-
获取一个字符串在另一个字符串中出现的次数
-
基于python的Tkinter实现一个简易计算器
-
三千万数据量下redis2.4的一统计情况
-
QT 如何一次创建多层文件夹
-
13. 编写一个程序,提示用户输入3组数,每组数包含5个double类型的数(假设用户都正确地响 应,不会输入非数值数据)。该程序应完成下列任务。
-
MySQL服务器上添加一个允许远程访问的用户
-
编写js找到一个字符串中指定子字符串的所有位置
-
一个简单的动态加载js和css的jquery代码_jquery