=========================
对象的生命周期_初始化细节
=========================
1 同时以两种方式提供初始化方法
/src/main/java/cn/tedu/injection/Product.java:
public class Product implements InitializingBean {
...
@Override
public void afterPropertiesSet() throws Exception {
logger.debug("Product.afterPropertiesSet");
}
public void init() {
logger.debug("Product.init");
}
...
}
/src/main/resources/applicationContext.xml:
Before ApplicationContext
Product.Product
Product.afterPropertiesSet <- Spring工厂先调用接口中的初始化方法
Product.init <- Spring工厂后调用自定义的初始化方法
After ApplicationContext
Before getBean
After getBean
cn.tedu.injection.Product@48aca48b
例程:Injection
2 同时提供Set注入和初始化方法
/src/main/java/cn/tedu/injection/Product.java:
public class Product implements InitializingBean {
...
private String name;
...
public void setName(String name) {
logger.debug("Product.setName");
this.name = name;
}
@Override
public void afterPropertiesSet() throws Exception {
logger.debug("Product.afterPropertiesSet");
}
public void init() {
logger.debug("Product.init");
}
...
}
/src/main/resources/applicationContext.xml:
Before ApplicationContext
Product.Product <- 构造注入
Product.setName <- Set注入
Product.afterPropertiesSet <- 接口中的初始化方法
Product.init <- 自定义的初始化方法
After ApplicationContext
Before getBean
After getBean
cn.tedu.injection.Product@48aca48b
3 初始化方法里做什么?
分配数据库、I/O、网络等相对重量级的系统资源。
一般情况下,这些通用性的初始化操作都由框架替我们做好了,真正需要自己做的初始化操作非常少。