在bean生命周期过程中,用于增强(扩展功能)的对象;
也是一种Bean,在Spring容器中。
package com.example.demo.springTest.a04;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
@Slf4j
public class Bean01 {
// public Bean01(String home){
// log.info("bean01 构造函数执行了");
// this.home=home;
// }
public Bean01(){
log.info("bean01 无参构造函数执行了");
}
private Bean02 bean02;
@Autowired
public void setBean02(Bean02 bean02){
log.info("@Autowired 生效:{}",bean02);
this.bean02=bean02;
}
private Bean03 bean03;
@Resource
public void setBean03(Bean03 bean03){
log.info("@Resource 生效: {}",bean03);
this.bean03=bean03;
}
private String home;
@Autowired
public void setHome(@Value("${JAVA_HOME}") String home){
log.info("@Value 生效:{}",home);
this.home=home;
}
@PostConstruct
public void init(){
log.info("@PostConstruct 生效");
}
@Override
public String toString() {
return "Bean01{" +
"bean02=" + bean02 +
", bean03=" + bean03 +
", home='" + home + '\'' +
'}';
}
}
package com.example.demo.springTest.a04;
public class Bean02 {
}
package com.example.demo.springTest.a04;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor;
import org.springframework.context.annotation.CommonAnnotationBeanPostProcessor;
import org.springframework.context.annotation.ContextAnnotationAutowireCandidateResolver;
import org.springframework.context.support.GenericApplicationContext;
/**
* bean后处理器的作用:解析@Autowired注解,完成注入。
*/
@Slf4j
public class Application04 {
public static void main(String[] args) {
// 创建ApplicationContext
GenericApplicationContext context = new GenericApplicationContext();
// 在ApplicationContext中注册Class为bean
context.registerBean("bean01",Bean01.class);
context.registerBean("bean02",Bean02.class);
context.registerBean("bean03",Bean03.class);
// refresh()创建单例
log.info("===================context.refresh() begin");
// context.refresh();
// Object bean01 = context.getBean("bean01");
// log.info("01--只创建未注入的bean01: "+bean01.toString());
log.info("===================context.refresh() 增加AutowiredAnnotationBeanPostProcessor后 begin");
context.getDefaultListableBeanFactory().setAutowireCandidateResolver(new ContextAnnotationAutowireCandidateResolver());
context.registerBean(AutowiredAnnotationBeanPostProcessor.class);
context.registerBean(CommonAnnotationBeanPostProcessor.class);
context.refresh();
Object bean01 = context.getBean("bean01");
log.info("01--只创建未注入的bean01: "+bean01.toString());
}
}
C:\Java\jdk1.8.0_341\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2022.1.4\lib\idea_rt.jar=62173:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2022.1.4\bin" -Dfile.encoding=UTF-8 -classpath C:\Java\jdk1.8.0_341\jre\lib\charsets.jar;C:\Java\jdk1.8.0_341\jre\lib\deploy.jar;C:\Java\jdk1.8.0_341\jre\lib\ext\access-bridge-64.jar;C:\Java\jdk1.8.0_341\jre\lib\ext\cldrdata.jar;C:\Java\jdk1.8.0_341\jre\lib\ext\dnsns.jar;C:\Java\jdk1.8.0_341\jre\lib\ext\jaccess.jar;C:\Java\jdk1.8.0_341\jre\lib\ext\jfxrt.jar;C:\Java\jdk1.8.0_341\jre\lib\ext\localedata.jar;C:\Java\jdk1.8.0_341\jre\lib\ext\nashorn.jar;C:\Java\jdk1.8.0_341\jre\lib\ext\sunec.jar;C:\Java\jdk1.8.0_341\jre\lib\ext\sunjce_provider.jar;C:\Java\jdk1.8.0_341\jre\lib\ext\sunmscapi.jar;C:\Java\jdk1.8.0_341\jre\lib\ext\sunpkcs11.jar;C:\Java\jdk1.8.0_341\jre\lib\ext\zipfs.jar;C:\Java\jdk1.8.0_341\jre\lib\javaws.jar;C:\Java\jdk1.8.0_341\jre\lib\jce.jar;C:\Java\jdk1.8.0_341\jre\lib\jfr.jar;C:\Java\jdk1.8.0_341\jre\lib\jfxswt.jar;C:\Java\jdk1.8.0_341\jre\lib\jsse.jar;C:\Java\jdk1.8.0_341\jre\lib\management-agent.jar;C:\Java\jdk1.8.0_341\jre\lib\plugin.jar;C:\Java\jdk1.8.0_341\jre\lib\resources.jar;C:\Java\jdk1.8.0_341\jre\lib\rt.jar;D:\20--Dev\Projects\demo\target\classes;D:\20--Dev\apache-maven-3.8.6\local_repo\org\springframework\boot\spring-boot-starter\2.7.3\spring-boot-starter-2.7.3.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\org\springframework\boot\spring-boot\2.7.3\spring-boot-2.7.3.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\org\springframework\spring-context\5.3.22\spring-context-5.3.22.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\org\springframework\boot\spring-boot-autoconfigure\2.7.3\spring-boot-autoconfigure-2.7.3.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\org\springframework\boot\spring-boot-starter-logging\2.7.3\spring-boot-starter-logging-2.7.3.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\ch\qos\logback\logback-classic\1.2.11\logback-classic-1.2.11.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\ch\qos\logback\logback-core\1.2.11\logback-core-1.2.11.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\org\apache\logging\log4j\log4j-to-slf4j\2.17.2\log4j-to-slf4j-2.17.2.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\org\apache\logging\log4j\log4j-api\2.17.2\log4j-api-2.17.2.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\org\slf4j\jul-to-slf4j\1.7.36\jul-to-slf4j-1.7.36.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\org\springframework\spring-core\5.3.22\spring-core-5.3.22.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\org\springframework\spring-jcl\5.3.22\spring-jcl-5.3.22.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\org\yaml\snakeyaml\1.30\snakeyaml-1.30.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\org\slf4j\slf4j-api\1.7.36\slf4j-api-1.7.36.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\org\springframework\boot\spring-boot-starter-web\2.7.3\spring-boot-starter-web-2.7.3.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\org\springframework\boot\spring-boot-starter-json\2.7.3\spring-boot-starter-json-2.7.3.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\com\fasterxml\jackson\core\jackson-databind\2.13.3\jackson-databind-2.13.3.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\com\fasterxml\jackson\core\jackson-annotations\2.13.3\jackson-annotations-2.13.3.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\com\fasterxml\jackson\core\jackson-core\2.13.3\jackson-core-2.13.3.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.13.3\jackson-datatype-jdk8-2.13.3.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.13.3\jackson-datatype-jsr310-2.13.3.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\com\fasterxml\jackson\module\jackson-module-parameter-names\2.13.3\jackson-module-parameter-names-2.13.3.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\org\springframework\boot\spring-boot-starter-tomcat\2.7.3\spring-boot-starter-tomcat-2.7.3.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\org\apache\tomcat\embed\tomcat-embed-core\9.0.65\tomcat-embed-core-9.0.65.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\org\apache\tomcat\embed\tomcat-embed-el\9.0.65\tomcat-embed-el-9.0.65.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.65\tomcat-embed-websocket-9.0.65.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\org\springframework\spring-web\5.3.22\spring-web-5.3.22.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\org\springframework\spring-beans\5.3.22\spring-beans-5.3.22.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\org\springframework\spring-webmvc\5.3.22\spring-webmvc-5.3.22.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\org\springframework\spring-aop\5.3.22\spring-aop-5.3.22.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\org\springframework\spring-expression\5.3.22\spring-expression-5.3.22.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\org\projectlombok\lombok\1.16.10\lombok-1.16.10.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\com\oracle\ojdbc6\6.0\ojdbc6-6.0.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\com\baomidou\mybatis-plus-boot-starter\3.5.2\mybatis-plus-boot-starter-3.5.2.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\com\baomidou\mybatis-plus\3.5.2\mybatis-plus-3.5.2.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\com\baomidou\mybatis-plus-extension\3.5.2\mybatis-plus-extension-3.5.2.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\com\baomidou\mybatis-plus-core\3.5.2\mybatis-plus-core-3.5.2.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\com\baomidou\mybatis-plus-annotation\3.5.2\mybatis-plus-annotation-3.5.2.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\com\github\jsqlparser\jsqlparser\4.4\jsqlparser-4.4.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\org\mybatis\mybatis\3.5.10\mybatis-3.5.10.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\org\mybatis\mybatis-spring\2.0.7\mybatis-spring-2.0.7.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\org\jetbrains\kotlin\kotlin-stdlib-jdk8\1.6.21\kotlin-stdlib-jdk8-1.6.21.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\org\jetbrains\kotlin\kotlin-stdlib\1.6.21\kotlin-stdlib-1.6.21.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\org\jetbrains\kotlin\kotlin-stdlib-common\1.6.21\kotlin-stdlib-common-1.6.21.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\org\jetbrains\annotations\13.0\annotations-13.0.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\org\jetbrains\kotlin\kotlin-stdlib-jdk7\1.6.21\kotlin-stdlib-jdk7-1.6.21.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\org\springframework\boot\spring-boot-starter-jdbc\2.7.3\spring-boot-starter-jdbc-2.7.3.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\com\zaxxer\HikariCP\4.0.3\HikariCP-4.0.3.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\org\springframework\spring-jdbc\5.3.22\spring-jdbc-5.3.22.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\org\springframework\spring-tx\5.3.22\spring-tx-5.3.22.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\com\baomidou\dynamic-datasource-spring-boot-starter\3.5.2\dynamic-datasource-spring-boot-starter-3.5.2.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\org\springframework\boot\spring-boot-starter-aop\2.7.3\spring-boot-starter-aop-2.7.3.jar;D:\20--Dev\apache-maven-3.8.6\local_repo\org\aspectj\aspectjweaver\1.9.7\aspectjweaver-1.9.7.jar com.example.demo.springTest.a04.Application04
00:11:14.551 [main] INFO com.example.demo.springTest.a04.Application04 - ===================context.refresh() begin
00:11:14.551 [main] INFO com.example.demo.springTest.a04.Application04 - ===================context.refresh() 增加AutowiredAnnotationBeanPostProcessor后 begin
00:11:14.571 [main] DEBUG org.springframework.context.support.GenericApplicationContext - Refreshing org.springframework.context.support.GenericApplicationContext@16b3fc9e
00:11:14.583 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor'
00:11:14.611 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.CommonAnnotationBeanPostProcessor'
00:11:14.620 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'bean01'
00:11:14.636 [main] INFO com.example.demo.springTest.a04.Bean01 - bean01 无参构造函数执行了
00:11:14.670 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'bean03'
00:11:14.670 [main] INFO com.example.demo.springTest.a04.Bean01 - @Resource 生效: com.example.demo.springTest.a04.Bean03@757942a1
00:11:14.678 [main] DEBUG org.springframework.core.env.PropertySourcesPropertyResolver - Found key 'JAVA_HOME' in PropertySource 'systemEnvironment' with value of type String
00:11:14.678 [main] INFO com.example.demo.springTest.a04.Bean01 - @Value 生效:C:\Java\jdk1.8.0_341
00:11:14.678 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'bean02'
00:11:14.678 [main] INFO com.example.demo.springTest.a04.Bean01 - @Autowired 生效:com.example.demo.springTest.a04.Bean02@548ad73b
00:11:14.678 [main] INFO com.example.demo.springTest.a04.Bean01 - @PostConstruct 生效
00:11:14.678 [main] INFO com.example.demo.springTest.a04.Application04 - 01--只创建未注入的bean01: Bean01{bean02=com.example.demo.springTest.a04.Bean02@548ad73b, bean03=com.example.demo.springTest.a04.Bean03@757942a1, home='C:\Java\jdk1.8.0_341'}
Process finished with exit code 0