Spring Bean 生命周期


public class BeanLifeCycle {
public static void main(String[] args) {
Resource resource = new ClassPathResource("application-context/spring/beans.xml");
BeanFactory beanFactory = new XmlBeanFactory(resource);
((ConfigurableBeanFactory)beanFactory).addBeanPostProcessor(new MyBeanPostProcessor());
((ConfigurableBeanFactory)beanFactory).addBeanPostProcessor(new MyInstantiationAwareBeanPostProcessor());
((ConfigurableBeanFactory)beanFactory).addBeanPostProcessor(new InitDestroyAnnotationBeanPostProcessor());

Car car1 = (Car) beanFactory.getBean("car");
System.out.println(car1.toString());
car1.setColor("red");

System.out.println("****************************************************************");

Car car2 = (Car) beanFactory.getBean("car");
System.out.println(car2.toString());
System.out.println("car1 == car2: " + (car1 == car2));
((XmlBeanFactory)beanFactory).destroySingletons();

}
}


public class MyInstantiationAwareBeanPostProcessor extends InstantiationAwareBeanPostProcessorAdapter {
@Override
public Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) throws BeansException {
if ("car".equals(beanName)) {
System.out.println("MyInstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation");
}
return super.postProcessBeforeInstantiation(beanClass, beanName);
}

@Override
public boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException {
if ("car".equals(beanName)) {
System.out.println("MyInstantiationAwareBeanPostProcessor.postProcessAfterInstantiation");
}
return super.postProcessAfterInstantiation(bean, beanName);
}

@Override
public PropertyValues postProcessPropertyValues(PropertyValues pvs, PropertyDescriptor[] pds, Object bean, String beanName) throws BeansException {
if ("car".equals(beanName)) {
System.out.println("MyInstantiationAwareBeanPostProcessor.postProcessPropertyValues");
}
return super.postProcessPropertyValues(pvs, pds, bean, beanName);
}
}


public class MyBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object object, String beanName) throws BeansException {
if ("car".equals(beanName)) {
Car car = (Car) object;
if (car.getColor() == null) {
System.out.println("MyBeanPostProcessor.postProcessBeforeInitialization. set Color black");
car.setColor("black");
}
}
return object;
}

@Override
public Object postProcessAfterInitialization(Object object, String beanName) throws BeansException {
if ("car".equals(beanName)) {
Car car = (Car) object;
if (car.getMaxSpeed() > 200) {
System.out.println("MyBeanPostProcessor.postProcessAfterInitialization, set MaxSpeed to 200.");
car.setMaxSpeed(200);
}
}
return object;
}
}


public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
BeanDefinition db = configurableListableBeanFactory.getBeanDefinition("car");
db.getPropertyValues().addPropertyValue("brand", "qiruiQQ");
System.out.println("MyBeanFactoryPostProcessor.postProcessBeanFactory");
}
}



public class Car implements BeanFactoryAware, BeanNameAware, InitializingBean, DisposableBean {
private String brand;
private String color;
private int maxSpeed;

private BeanFactory beanFactory;
private String beanName;

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

public Car(String brand, String color, int maxSpeed) {
this.brand = brand;
this.color = color;
this.maxSpeed = maxSpeed;
}

@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
System.out.println("BeanFactoryAware setBeanFactory");
this.beanFactory = beanFactory;
}

@Override
public void setBeanName(String s) {
System.out.println("BeanNameAware setBeanName");
}

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

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

public void setBrand(String brand) {
System.out.println("call setBrand");
this.brand = brand;
}

public void setColor(String color) {
System.out.println("call setColor");
this.color = color;
}

public void setMaxSpeed(int maxSpeed) {
System.out.println("call setMaxSpeed");
this.maxSpeed = maxSpeed;
}

public String getBrand() {
return brand;
}

public String getColor() {
return color;
}

public int getMaxSpeed() {
return maxSpeed;
}

public void myInit() {
System.out.println("init-method.");
this.maxSpeed = 240;
}

public void myDestroy() {
System.out.println("destroy-method.");
}

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

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

@Override
public String toString() {
return "Car{" +
"brand='" + brand + '\'' +
", color='" + color + '\'' +
", maxSpeed=" + maxSpeed +
'}';
}
}


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:security="http://www.springframework.org/schema/security"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.2.xsd
http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.0.xsd
http://www.springframework.org/schema/data/repository http://www.springframework.org/schema/data/repository/spring-repository-1.6.xsd ">

<bean id="car" class="org.anicloud.spring4.spring.lifecycle.Car"
p:brand="bwm"
p:maxSpeed="200"
init-method="myInit"
destroy-method="myDestroy"
scope="singleton"/>

</beans>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring生命周期包括实例化、配置和销毁三个阶段。首先,实例化阶段是指创建一个Bean的实例。在Spring中,Bean的实例化可以通过使用BeanFactory或ApplicationContext来获取。其次,配置阶段是指对实例化的Bean进行配置,也就是进行IOC注入。在这个阶段,Spring会根据配置文件中的Bean的id值进行相应的配置。如果Bean实现了BeanNameAware接口,Spring还会调用它实现的setBeanName(String)方法,传递的参数就是Bean的id值。最后,销毁阶段是指当Bean不再使用时进行垃圾回收。对于Singleton模式的Bean,Spring会负责管理整个生命周期;而对于Prototype模式的Bean,Spring在创建好并交给使用者后就不再管理后续的生命周期。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [关于Spring Bean的生命周期](https://blog.csdn.net/Apeopl/article/details/82964799)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Springbean生命周期详解](https://blog.csdn.net/qq_64169170/article/details/123052663)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值