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......