========================= 对象的生命周期_初始化细节 ========================= 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、网络等相对重量级的系统资源。 一般情况下,这些通用性的初始化操作都由框架替我们做好了,真正需要自己做的初始化操作非常少。