目录
Ioc(Inverse of Control:控制反转),即将原本在程序中手动创建对象的控制权,交由Spring框架来管理。2、普通bean
结果
1、IOC简介
Ioc(Inverse of Control:控制反转),即将原本在程序中手动创建对象的控制权,交由Spring框架来管理。
2、普通bean
推荐使用自定义init-method方法和destroy-method方法,不实现InitializingBean和DisposableBean。
package com.demo.gyw.spring.transactional.bean;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
/**
* @Author GouYaoWen
* @Description bean生命周期
* 1、实例化Bean
* 2、依赖注入(设置属性)
* 3、注入Aware接口
* 实现 BeanNameAware接口----->获得到容器中Bean的名称
*
* 4、BeanPostProcessor初始化前后;
* 实现 BeanPostProcessor接口 前置处理 后置处理
* 所有的bean进行一个初始化之前和之后的代理。
* 5、InitializingBean bean正式构造完成前(没办法处理对象本身,只能增加一些额外的逻辑);
* 首先如果Bean 实现了InitializingBean接口,Spring将调用他们的afterPropertiesSet()方法。
* 然后如果bean使用init-method声明了初始化方法,该方法也会被调用
* 6、DisposableBean 在bean销毁前执行指定的逻辑。
* 首先如果bean实现了DisposableBean接口,Spring将调用它的destory()接口方法。
* 然后同样,如果bean使用了destroy-method 声明销毁方法,该方法也会被调用。
* @Date Create in 16:12 2019/12/27
*/
public class BeanLifeCycle implements BeanNameAware, InitializingBean, DisposableBean {
/**
* 对象属性
*/
public String objectAttribute = "对象属性";
/**
* BeanNameAware
* @param s
*/
@Override
public void setBeanName(String s) {
System.out.println(String.format("bean的名称:%s", s));
}
/**
* InitializingBean
* @throws Exception
*/
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("bean正式构造完成前(初始化)处理");
}
/**
* inti-method
* 自定义初始化方法
*/
public void initMethod() {
System.out.println("自定义初始化方法-bean正式构造完成前处理");
}
/**
* DisposableBean
* @throws Exception
*/
@Override
public void destroy() throws Exception {
System.out.println("销毁前处理");
}
public void destroyMethod() {
System.out.println("自定义方法-销毁前处理");
}
}
/*
outPut:
bean的名称:beanLifeCycle
初始化之前:beanLifeCycle
bean正式构造完成前(初始化)处理
自定义初始化方法-bean正式构造完成前处理
初始化之后:beanLifeCycle
销毁前处理
自定义方法-销毁前处理*/
3、实现BeanPostProcessor的类
package com.demo.gyw.spring.transactional.bean;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
/**
* 所有bean初始化前后操作
* 单例方式注入
* @Author GouYaoWen
* @Description
* @Date Create in 11:20 2019/12/31
**/
public class PostProcessor implements BeanPostProcessor {
/**
* bean初始化前操作
* @param bean
* @param beanName
* @return
* @throws BeansException
*/
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
if(beanName.equals("beanLifeCycle")){
System.out.println(String.format("初始化之前:%s",beanName));
}
return bean;
}
/**
* bean初始化后
* @param bean
* @param beanName
* @return
* @throws BeansException
*/
@Override
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
if(beanName.equals("beanLifeCycle")){
System.out.println(String.format("初始化之后:%s",beanName));
}
return bean;
}
}
4、将bean 交给Spring管理
package com.demo.gyw.spring.transactional.bean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @Author GouYaoWen
* @Description 注入需要的Bean--交给Spring管理默认单例
* @Date Create in 16:51 2019/12/27
*/
@Configuration
public class BeanConfig {
/**
* 初始化前后
* @return
*/
@Bean
public PostProcessor postProcessor() {
return new PostProcessor();
}
/**
* 注入BeanLifeCycle
* bean的名字是方法名称
* @Bean(initMethod = "initMethod",destroyMethod = "destroyMethod")
* initMethod-自定义初始化方法
* destroyMethod-自定义销毁方法
* @return
*/
@Bean(initMethod = "initMethod",destroyMethod = "destroyMethod")
public BeanLifeCycle beanLifeCycle() {
return new BeanLifeCycle();
}
}
5、SpringBoot启动类