码迷,mamicode.com
首页 > 编程语言 > 详细

spring中的bean的生命周期

时间:2019-11-17 10:47:55      阅读:87      评论:0      收藏:0      [点我收藏+]

标签:dash   nbsp   initial   sans   throw   san   post   技术   not   

bean的生命周期:bean的创建 —— 初始化 ——销毁的过程

容器管理bean的生命周期,我们可以自定义初始化和销毁方法,容器在bean进行到当前生命周期就会调用我们的方法

在xml配置文件中是在bean的标签内使用init-methoddestroy-method

<bean id="person" class="com.springbean.Person" init-method="" destroy-method="" >

这里我们使用注解的方法

第一种指定初始化和销毁方法

首先创建一个bean

public class Foo {

    public Foo(){
        System.out.println("bean的创建");
    }

    public void init(){
        System.out.println("bean的初始化");
    }

    public void destroy(){
        System.out.println("bean的销毁");
    }
} 

 

创建一个配置类:

@Bean注解上指定初始化和销毁方法
@Configuration
public class MainBeanConfig  {
@Bean(initMethod = "init",destroyMethod = "destroy")
public Foo foo(){
  
return new Foo();
}
}

测试:

public class BeanTest {

    @Test
    public void  test(){
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainBeanConfig.class);
    }
}

bean如果没有指定作用域,就是单例的,就在容器加载的时候就会创建bean,所以打印的结果是:

bean的创建
bean的初始化

销毁:当容器关闭的时候,就会调用destroy方法,打印 bean的销毁

applicationContext.close();

 

如果要指定bean的作用域为prototype,就需要在配置类中MainBeanConfig,加上注解@Scope("prototype"),如

@Bean
@Scope("prototype")
public Foo foo(){
return new Foo();
}

 

指定bean的作用域为@Scope("prototype"),这时候容器加载的时候就不会创建和初始化bean,而是在获取bean的时候。

容器关闭的时候也不会去调用destroy方法,需要自己手动调用。


第二种我们通过bean实现InitializingBean(定义初始化逻辑)和DisposableBean(定义销毁逻辑)

创建一个类Hero,实现InitializingBean,DisposableBean接口,加上注解@Component

@Component
public
class Hero implements InitializingBean,DisposableBean { public Hero(){ System.out.println("创建"); } @Override public void destroy() throws Exception { System.out.println("销毁"); } @Override public void afterPropertiesSet() throws Exception { System.out.println("初始化"); } }

在配置中加上注解ComponentScan去扫描包,也可以使用@Import来将组件加入容器中

如:@Import({Hero.class})

@ComponentScan("com.springbean")
public class MainBeanConfig {

 

 测试:

 @Test
    public void  test(){
        AnnotationConfigApplicationContext  applicationContext = new AnnotationConfigApplicationContext(MainBeanConfig.class);
        applicationContext.close();
    }

打印结果:

创建
初始化
销毁

 

第三种使用@PostConstruct(构造器创建之后)和@PreDestroy(容器销毁之前)两个注解,这是JSR250的两个注解。

 

  @PostConstruct
    public void init(){
        System.out.println("bean的初始化");
    }

    @PreDestroy
    public void destroy(){
        System.out.println("bean的销毁");
    }

 

 

 

 

技术图片

spring中的bean的生命周期

标签:dash   nbsp   initial   sans   throw   san   post   技术   not   

原文地址:https://www.cnblogs.com/tdyang/p/11875454.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!