1。这个部分除了6,9都在这了
java
package com.example.springbootdemo3.lifebeean;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
/**
* description
*
* @author PC 2025/02/27 20:26
*/
@Component
public class MyBeanLife implements BeanNameAware, BeanFactoryAware, ApplicationContextAware, InitializingBean, DisposableBean {
private String name;
// 构造函数,当Bean被实例化时调用
public MyBeanLife() {
System.out.println("1.调用了Bean的构造函数");
}
@Value("name")
public void setName(String name) {
this.name = name;
System.out.println("2.调用了Bean的set方法(属性的依赖注入)");
}
@Override
public void setBeanName(String s) {
System.out.println("3.调用了BeanNameAware的setBeanName方法,beanName:" + s);
}
@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
System.out.println("4.调用了BeanFactoryAware的setBeanFactory方法,beanFactory:" + beanFactory.toString());
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
System.out.println("5.调用了ApplicationContextAware的setApplicationContext方法,applicationContext:" + applicationContext.toString());
}
@PostConstruct
public void postConstruct() {
System.out.println("7.调用了@PostConstruct注解的方法");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("8.调用了InitializingBean的afterPropertiesSet方法");
}
@PreDestroy
public void preDestroy() {
System.out.println("10.调用了@PreDestroy注解的方法");
}
@Override
public void destroy() throws Exception {
System.out.println("11.调用了DisposableBean的destroy方法");
}
}
2. 6和9部分
BeanPostProcessor的两个方法是所有Bean都会调用,除了实现这个接口的Bean,所以为了方便加了判断
java
package com.example.springbootdemo3.lifebeean;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;
/**
* description
*
* @author PC 2025/02/27 21:00
*/
@Component
public class MyBeanLife2 implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
if (!beanName.equals("myBeanLife")) {
return bean;
}
System.out.println("6.调用了BeanPostProcessor的postProcessBeforeInitialization方法,beanName:" + beanName);
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
if (!beanName.equals("myBeanLife")) {
return bean;
}
System.out.println("9.调用了BeanPostProcessor的postProcessAfterInitialization方法,beanName:" + beanName);
return bean;
}
}