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.
*/
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方法是:
运行结果是:
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实战》第二章
还有使用依赖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实战》第二章
相关文章推荐
- Spring学习笔记 关于Bean的初始化和清理-init和destroy方法
- spring学习笔记2--Bean的初始化(实例化)、作用域
- spring in action 学习笔记(五)初始化和销毁bean
- spring源码学习笔记-初始化(三) registerBeanPostProcessors
- Spring学习笔记 关于Bean属性的初始化 - 使用inner bean以及List, Map与Set的初始化
- Spring学习笔记--初始化和销毁Bean
- Spring学习笔记-Bean初始化&销毁
- Spring学习笔记 关于Bean属性的初始化
- Spring学习笔记-Bean初始化&销毁
- Spring Boot 学习笔记(一)——入门
- Spring学习笔记 使用Non-Static Factory(非静态工厂类)创建Bean
- Spring Boot 学习笔记2——profile
- Spring 学习笔记(二)——装配 bean
- spring boot 学习笔记(06)——中文乱码解决方案
- spring-boot 学习笔记(1)
- Spring Boot进阶之Web进阶 学习笔记
- Spring学习笔记(3)----编码剖析Spring管理Bean的原理
- spring-boot入门学习笔记
- Spring学习笔记(2)-Spring中bean的生命周期
- Springboot整合Swagger学习笔记