在我们实际开发的时候,经常会遇到在Bean在使用之前或者之后做些必要的操作,Spring对Bean的生命周期的操作提供了支持。
在使用Java配置和注解配置下提供如下两种方式。
1.Java配置方式:使用@Bean的initMethod和destroyMethod(相当于xml配置的init-method和destory-method)。
2.注解方式:利用JSR-250的@PostConstruct和@PreDestroy。
实例
1.增加JSR250支持。
<dependency> <groupId>javax.annotation</groupId> <artifactId>jsr250-api</artifactId> <version>1.0</version></dependency> 2.使用@Bean形式的Bean。
package com.wisely.highlight_spring4.ch2.prepost; public class BeanWayService { public void init(){ System.out.println("@Bean-init-method"); } public BeanWayService() { super(); System.out.println("初始化构造函数-BeanWayService"); } public void destroy(){ System.out.println("@Bean-destory-method"); }} 3.使用JSR250形式的Bean
package com.wisely.highlight_spring4.ch2.prepost; import javax.annotation.PostConstruct;import javax.annotation.PreDestroy; public class JSR250WayService { @PostConstruct //1 public void init(){ System.out.println("jsr250-init-method"); } public JSR250WayService() { super(); System.out.println("初始化构造函数-JSR250WayService"); } @PreDestroy //2 public void destroy(){ System.out.println("jsr250-destory-method"); }} 代码解释@PostConstruct,在构造函数执行完之后执行@PreDestroy,在Bean销毁之前执行 4.配置类
package com.wisely.highlight_spring4.ch2.prepost; import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration; @Configuration@ComponentScan("com.wisely.highlight_spring4.ch2.prepost")public class PrePostConfig { @Bean(initMethod="init",destroyMethod="destroy") //1 BeanWayService beanWayService(){ return new BeanWayService(); } @Bean JSR250WayService jsr250WayService(){ return new JSR250WayService(); }} initMethod和destroyMethod指定BeanWayService类的init和destroy方法在构造之后、Bean销毁之前执行。5.运行
package com.wisely.highlight_spring4.ch2.prepost; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class Main { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(PrePostConfig.class); BeanWayService beanWayService = context.getBean(BeanWayService.class); JSR250WayService jsr250WayService = context.getBean(JSR250WayService.class); context.close(); }}
时间: 2024-12-17 23:54:37