调用无参构建函数创建对象—对象初始化—对象销毁
下面展示第一种使用@Bean注解指定初始和销毁方法代码。
package com.mayikt.v4.entity; /** * @Description: * @Author: ChenYi * @Date: 2020/07/03 07:25 **/ public class SmsEntity { public SmsEntity() { System.out.println("无参构造函数执行》》》》"); } public void init() { System.out.println("对象初始化>>>"); } public void destroy() { System.out.println("对象销毁>>>>"); } } package com.mayikt.v4.config; import com.mayikt.v4.entity.SmsEntity; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; /** * @Description: spring配置类 * @Author: ChenYi * @Date: 2020/07/02 23:07 **/ @Configuration @ComponentScan("com.mayikt.v4") public class MySpringConfig { @Bean(initMethod = "init",destroyMethod = "destroy") public SmsEntity smsEntity() { return new SmsEntity(); } }下面展示第二种 对象实现InitializingBean初始化和DisposableBean销毁的代码
package com.mayikt.v4.entity; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.stereotype.Component; /** * @Description: * @Author: ChenYi * @Date: 2020/07/04 14:16 **/ @Component public class MemberEntity implements InitializingBean, DisposableBean { public MemberEntity() { System.out.println("无参构造函数执行>>>>"); } @Override public void destroy() throws Exception { System.out.println("容器销毁>>>>"); } @Override public void afterPropertiesSet() throws Exception { System.out.println("容器初始化>>>>>"); } }下面展示第三种 添加@PostConstruct初始和@PreDestroy销毁注解的代码。
package com.mayikt.v4.entity; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; /** * @Description: * @Author: ChenYi * @Date: 2020/07/04 14:20 **/ @Component public class OrderEntity { public OrderEntity() { System.out.println("无参构造函数执行>>>>"); } @PostConstruct public void init() { System.out.println("对象初始化>>>"); } @PreDestroy public void destroy() { System.out.println("对象销毁>>>>"); } }重要的接口:
BeanNameAware :可以获取容器中bean的名称
BeanFactoryAware:获取当前BeanFactory,可以调用容器的服务
ApplicationContextAware: 当前的applicationContext, 可以调用容器的服务 类图: 下面 自定义实现生命周期的接口代码。
实现 DisposableBean BeanNameAware BeanFactoryAware ApplicationContextAware InitializingBean的接口 package com.mayikt.v4.entity; import org.springframework.beans.BeansException; import org.springframework.beans.factory.*; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; /** * @Description: * @Author: ChenYi * @Date: 2020/07/04 14:16 **/ @Component public class MemberEntity implements DisposableBean, BeanNameAware, BeanFactoryAware, ApplicationContextAware, InitializingBean { public MemberEntity() { System.out.println("1.对象创建>>>>"); } @Override public void destroy() throws Exception { System.out.println("8. 容器销毁>>>>"); } @Override public void setBeanFactory(BeanFactory beanFactory) throws BeansException { System.out.println("3.实现BeanFactoryAware接口" + beanFactory); } @Override public void setBeanName(String name) { System.out.println("2.实现BeanNameAware接口" + name); } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { System.out.println("4.实现ApplicationContextAware的接口"); } @Override public void afterPropertiesSet() throws Exception { System.out.println("6.容器自定义init初始化>>>>>"); } } 实现BeanPostProcessor接口 package com.mayikt.v4.config; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; /** * @Description: * @Author: ChenYi * @Date: 2020/07/04 16:08 **/ public class MyBeanPostProcess implements BeanPostProcessor { @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { System.out.println("5.执行init方法之前执行:" + beanName); return beanName; } @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { System.out.println("7.执行init方法之后执行:" + beanName); return beanName; } }参考:蚂蚁课堂