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

   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实战》第二章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值