多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
1.6.1 生命周期回调 实现接口: InitializingBean  DisposableBean  可以使用afterPropertiesSet() 和destroy() 执行特定的功能。 JSR-250 规定使用@PostConstruct and @PreDestroy注解,但是这个不会与spring的特定接口结合。也就是不会走到Spring的特定接口。 Spring 使用 BeanPostProcessor , -初始化回调 org.springframework.beans.factory.InitializingBean void afterPropertiesSet() throws Exception; 不推荐使用InitializingBean 的接口,因为会与Spring进行不必要的耦合。使用 @PostConstruct  或者指定POJO指定方法。 xml使用 init-method, Java使用 intiMethod <bean id="exampleInitBean" class="examples.ExampleBean" init-method="init"/> public class ExampleBean { public void init() { // do some initialization work } } } 虽然与以下等效,但是不会与Spring耦合 <bean id="exampleInitBean" class="examples.AnotherExampleBean"/> public class AnotherExampleBean implements InitializingBean { public void afterPropertiesSet() { // do some initialization work } } } -销毁回调 org.springframework.beans.factory.DisposableBean void destroy() throws Exception; 不建议使用DisposableBean 回调接口,应为会和Spring有不必要的耦合。 可以使用@PreDestroy , 在XML中bean配置 destroy-method <bean id="exampleInitBean" class="examples.ExampleBean" destroy-method="cleanup"/> 在Java中, 使用Bean中的destroyMethod. <bean id="exampleInitBean" class="examples.ExampleBean" destroy-method="cleanup"/> public class ExampleBean { public void cleanup() { // do some destruction work (like releasing pooled connections) } } } 与以下等效:以下方式不好,与Spring 耦合 <bean id="exampleInitBean" class="examples.AnotherExampleBean"/> public class AnotherExampleBean implements DisposableBean { public void destroy() { // do some destruction work (like releasing pooled connections) } } } -默认初始和销毁方法 可以指定初始化的方法: <beans default-init-method="init"> <bean id="blogService" class="com.foo.DefaultBlogService"> <property name="blogDao" ref="blogDao" /> </bean> </beans> 代码中新增这个方法: public class DefaultBlogService implements BlogService { private BlogDao blogDao; public void setBlogDao(BlogDao blogDao) { this.blogDao = blogDao; } // this is (unsurprisingly) the initialization callback method public void init() { if (this.blogDao == null) { throw new IllegalStateException("The [blogDao] property must be set."); } } } } 同样销毁可以使用 default-destroy-method 的配置 对同一个bean的多个生命周期机制,可以使用不同的初始化方法,顺序如下 1- @PostConstruct 的注释 2- afterPropertiesSet() 定义在InitializingBean  接口的 3. 定制的 init() 方法 销毁的顺序也是类似: 1. @PreDestroy 注释 2. destroy()  方法 继承自DisposableBean  3.定制的destroy() 方法。 在依赖项开始之前开始,在依赖项结束之后结束。 SmartLifecycle接口,可以得到对象的阶段。 Spring web 的ApplicationContext已经处理了关闭Spring IoC 容器。 非web应用程式需要处理。 registerShutdownHook() import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public final class Boot { public static void main(final String[] args) throws Exception { ConfigurableApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); // add a shutdown hook for the above context... ctx.registerShutdownHook(); // app runs here... // main method exits, hook is called prior to the app shutting down... } } } 1.6.2 ApplicationContextAware  和 BeanNameAware 从ApplicationContextAware接口继承,当创建一个ApplicationContext是,提供了以下设置方式: public interface ApplicationContextAware { void setApplicationContext(ApplicationContext applicationContext) throws BeansException; } } BeanNameAware 类似状况 public interface BeanNameAware { void setBeanName(String name) throws BeansException; } } 1.6.3 其他Aware接口 Name Injected Dependency Explained in…​ ApplicationContextAware Declaring ApplicationContext ApplicationContextAware and BeanNameAware ApplicationEventPublisherAware Event publisher of the enclosing ApplicationContext Additional capabilities of the ApplicationContext BeanClassLoaderAware Class loader used to load the bean classes. Instantiating beans BeanFactoryAware Declaring BeanFactory ApplicationContextAware and BeanNameAware BeanNameAware Name of the declaring bean ApplicationContextAware and BeanNameAware BootstrapContextAware Resource adapter BootstrapContext the container runs in. Typically available only in JCA aware ApplicationContexts JCA CCI LoadTimeWeaverAware Defined weaver for processing class definition at load time Load-time weaving with AspectJ in the Spring Framework MessageSourceAware Configured strategy for resolving messages (with support for parametrization and internationalization) Additional capabilities of the ApplicationContext NotificationPublisherAware Spring JMX notification publisher Notifications ResourceLoaderAware Configured loader for low-level access to resources Resources ServletConfigAware Current ServletConfig the container runs in. Valid only in a web-aware SpringApplicationContext Spring MVC ServletContextAware Current ServletContext the container runs in. Valid only in a web-aware SpringApplicationContext Spring MVC Aware的用法没有follow IoC的风格。