spring bean are initialized (init, destroy)

spring bean container initialized general there are three ways:

@PostConstruct, @ PreDestroy: starting from Java EE5 specification, Servlet increase the influence of two notes Servlet life cycle, @ PostConstruct and @PreDestroy. @PostConstruct will be executed before the constructor to initialize after the Servlet

package com.edu.bean;


import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

/**
 * Created by IntelliJ IDEA.
 * User: chenzhubing
 * Date: 2019/6/17
 */
@Component
public class Color {

    @PostConstruct
    public void init(){
        System.out.println("init......");

    }

    @PreDestroy
    public void destroy(){
        System.out.println("destroy.........");

    }


}

package com.edu.bean;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * Created by IntelliJ IDEA.
 * User: chenzhubing
 * Date: 2019/6/17
 */
public class Test1 {
    public static void main(String[] args) {

        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("com.edu.bean");
        context.close();

    }
}

Output:

init......

destroy.........

  • @Bean specified initMethod, destroyMethod method
package com.edu.bean;


import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

/**
 * Created by IntelliJ IDEA.
 * User: chenzhubing
 * Date: 2019/6/17
 */

public class Color {

    @PostConstruct
    public void init(){
        System.out.println("init......");

    }

    public void init1(){
        System.out.println("init1......");

    }

    @PreDestroy
    public void destroy(){
        System.out.println("destroy.........");

    }

    public void destroy1(){
        System.out.println("destroy1.........");

    }


}


package com.edu.bean;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * Created by IntelliJ IDEA.
 * User: chenzhubing
 * Date: 2019/6/17
 */
@Configuration
class Config {

    @Bean(name = "color",initMethod = "init1",destroyMethod = "destroy1")
    public  Color getColor(){

        return new Color();
    }

}


package com.edu.bean;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * Created by IntelliJ IDEA.
 * User: chenzhubing
 * Date: 2019/6/17
 */
public class Test1 {
    public static void main(String[] args) {

        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Config.class);
        context.close();

    }
}

Output:

heat ......
init1 ......

destroy.........
destroy1.........

Proof @PostConstruct modified method is performed before initMethod modified method

 

  • interface InitializingBean,DisposableBean:重写afterPropertiesSet,destroy方法
package com.edu.bean;


import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

/**
 * Created by IntelliJ IDEA.
 * User: chenzhubing
 * Date: 2019/6/17
 */
@Component
public class Color implements InitializingBean, DisposableBean {

    @PostConstruct
    public void init(){
        System.out.println("init......");

    }
    @PreDestroy
    public void destroy(){
        System.out.println("destroy.........");

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

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


package com.edu.bean;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * Created by IntelliJ IDEA.
 * User: chenzhubing
 * Date: 2019/6/17
 */
public class Test1 {
    public static void main(String[] args) {

        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("com.edu.bean");
        context.close();

    }
}

Output:

heat ......
init1 .........

destroy.........
destroy1......

 

Guess you like

Origin www.cnblogs.com/chenzhubing/p/11041360.html