您的当前位置:首页正文

008Spring自定义初始化和销毁方法

来源:图艺博知识网

1、简介

Bean的生命周期:

​ bean的创建--》初始化--》销毁

bean的创建:

​ 单实例:在容器启动的时候就创建

​ 多实例:在每次主动获取bean的时候创建

初始化:

​ 对象创建完成,并赋值完成,调用初始化方法

销毁:

​ 单实例:容器管理的时候进行销毁(调用容器的close方法)。

​ 多实例:容器不会管理这个bean,所以说容器不会调用销毁方法,需要纯手动调用。

2、@Bean initMethod&destroyMethod

2.1、实体类

public class Car {

    public Car() {
        System.out.println("car constructor...");
    }

    public void init() {
        System.out.println("car init ...");
    }

    public void destory() {
        System.out.println("car destory...");
    }
}

2.2、配置类

@Configuration
public class MainConfig {

    @Bean(initMethod = "init", destroyMethod = "destory")
    public Car car() {
        return new Car();
    }
}

2.3、测试类

public class BeanTest {

    @Test
    public void test1() {
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);
        System.out.println("容器创建完成...");

        ((AnnotationConfigApplicationContext) applicationContext).close();
    }

}

2.4、测试结果

car constructor...
car init ...
容器创建完成...
car destory...

3、InitializingBean&DisposableBean

3.1、实体

@Component
public class Cat implements InitializingBean, DisposableBean {

    public Cat() {
        System.out.println("Cat constructor...");
    }

    @Override
    public void destroy() throws Exception {
        System.out.println("cat destroy");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("cat afterPropertiesSet");
    }
}

3.2、配置类

@Configuration
@ComponentScan(basePackages = "com.chentongwei.spring.annotation.bean.entity.Cat")
public class MainConfig {

    @Bean(initMethod = "init", destroyMethod = "destory")
    public Car car() {
        return new Car();
    }
}

3.3、测试类

同【2.3】

3.4、测试结果

Cat constructor...
cat afterPropertiesSet
car constructor...
car init ...
容器创建完成...
car destory...
cat destroy

4、@PostConstruct&@PreDestroy

4.1、实体

public class Dog {

    public Dog() {
        System.out.println("dog constructor...");
    }

    // 对象创建并赋值之后
    @PostConstruct
    public void init() {
        System.out.println("dog postconstructor...");
    }

    // 在容器移除对象之前
    @PreDestroy
    public void destroy() {
        System.out.println("dog PreDestroy ...");
    }
}

4.2、配置类

@Configuration
@ComponentScan(basePackages = "com.chentongwei.spring.annotation.bean.entity")
@Import(Dog.class)
public class MainConfig {

    @Bean(initMethod = "init", destroyMethod = "destory")
    public Car car() {
        return new Car();
    }
}

4.3、测试类

同【2.3】

4.4、测试结果

Cat constructor...
cat afterPropertiesSet
dog constructor...
dog postconstructor...
car constructor...
car init ...
容器创建完成...
car destory...
dog PreDestroy ...
cat destroy

5、广告

  • 码云点star,万分感谢!

    代码已经上传到码云了

    通用的权限处理框架

    通用的异常处理

    通用的发送邮件

    陆续会推出更多干货,希望关注!

  • QQ群【Java初学者学习交流群】:458430385

  • 微信公众号【Java码农社区】

img
  • 今日头条号:编程界的小学生
Top