您的位置:首页 > 编程语言 > Java开发

spring boot学习笔记4-bean的初始化

2018-03-13 19:52 465 查看
   Bean的创建到销毁的过程中,我们会经常在Bean创建之后对他做一些初始化的操作,在Bean销毁之前我们也会经常对他进行一些操作。spring 提供了两种方式对Bean进行操作。一种方式是通过标签initMethod和destoryMethod指定bean在初始化和销毁前的个性化的操作方法。 @Bean(initMethod ="init",destroyMethod ="destory") 
还有使用依赖JSR250注解@PostConstruct和@PreDestroy来进行初始化bean和销毁之前的操作。使用@PostConstruct注解标注的初始化方法会在bean的构造方法执行完后执行,使用@PreDestroy标注的方法会在bean销毁之前执行。使用JSR250我们需要引入依赖
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>jsr250-api</artifactId>
<version>1.0</version>
</dependency>使用第一种方式的代码:
/**
* Created by lengshan on 2018/3/13 0013.
*/
@Configuration
@ComponentScan("com.example.demo")
public class MyConfig {

/**
*
* initMethod、destroyMethod指定bean在构造方法之后和销毁之前执行init和destory方法
*/
@Bean(initMethod ="init",destroyMethod ="destory")
DemoBean demoBean(){

return new DemoBean();
}

}

使用第二种方式的代码:/**
* Created by lengshan on 2018/3/13 0013.
*/

import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

/**
* 这里借助JSR250来配置实现对bean的初始化和销毁前的操作
*/
@Service
public class JsrDemoBean {
/**
* 标签@PostConstruct标注的方法在构造方法之后执行,@PreDestroy标注的方法在bean销毁之前执行
*/

@PostConstruct
public void init(){
System.out.println("初始化JSRDemoBean");
}
public JsrDemoBean(){
System.out.println("JsrDemoBean的构造方法");
}
@PreDestroy
public void destroyJsrBean(){
System.out.println("销毁JsrDemoBean");
}

}main方法是:
@SpringBootApplication
public class DemoSpringbeanlifeApplication {

public static void main(String[] args) {
SpringApplication.run(DemoSpringbeanlifeApplication.class, args);
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);
DemoBean demoBean = context.getBean(DemoBean.class);
JsrDemoBean jsrDemoBean = context.getBean(JsrDemoBean.class);
context.close();
}
}

运行结果是:



bean的初始化的时候有时候我们切换不同的数据库进行操作,spring提供了@Profile让工程在不同环境下使用不同的配置
配置类:@Configuration
@ComponentScan("com.example.demo")
public class MyConfig {

/**
*
* profile为dev时实例化devBean
*/
@Bean
@Profile("dev")
DemoBean devBean(){

return new DemoBean("dev");

}

/**
*
* profile为prod时实例化prodBean
*/
@Bean
@Profile("prod")
DemoBean prodBean(){

return new DemoBean("prod");

}main函数@SpringBootApplication
public class DemoMyprofileApplication {

public static void main(String[] args) {
SpringApplication.run(DemoMyprofileApplication.class, args);
//AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();

context.getEnvironment().setActiveProfiles("dev");
context.register(MyConfig.class);
context.refresh();
/**
* 先将活动的profile设置为dev
* 然后注册Bean的配置类,不然会报Bean未定义的错误
* 刷新容器
*/

DemoBean bean = context.getBean(DemoBean.class);
System.out.println(bean.getContent());

context.close();

}
}运行结果:



参考资料: 
《JavaEE开发的颠覆者 Spring Boot实战》第二章
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: