diff --git a/MyBatis/32c47fb3f80c151ecac657c98b536113.jpg b/MyBatis/32c47fb3f80c151ecac657c98b536113.jpg new file mode 100644 index 0000000..0f5e7c7 Binary files /dev/null and b/MyBatis/32c47fb3f80c151ecac657c98b536113.jpg differ diff --git a/MyBatis/Executor.cld.jpg b/MyBatis/Executor.cld.jpg new file mode 100644 index 0000000..b3c3ae5 Binary files /dev/null and b/MyBatis/Executor.cld.jpg differ diff --git a/MyBatis/SqlSessionFactoryBean.jpg b/MyBatis/SqlSessionFactoryBean.jpg new file mode 100644 index 0000000..a598c14 Binary files /dev/null and b/MyBatis/SqlSessionFactoryBean.jpg differ diff --git a/MyBatis/StatementHandler.cld.jpg b/MyBatis/StatementHandler.cld.jpg new file mode 100644 index 0000000..d11dca1 Binary files /dev/null and b/MyBatis/StatementHandler.cld.jpg differ diff --git "a/MyBatis/mYBAtis\346\212\200\346\234\257\345\206\205\345\271\225.jpg" "b/MyBatis/mYBAtis\346\212\200\346\234\257\345\206\205\345\271\225.jpg" new file mode 100644 index 0000000..234ed72 Binary files /dev/null and "b/MyBatis/mYBAtis\346\212\200\346\234\257\345\206\205\345\271\225.jpg" differ diff --git a/MyBatis/mybatis-tran.png b/MyBatis/mybatis-tran.png new file mode 100644 index 0000000..be0d96d Binary files /dev/null and b/MyBatis/mybatis-tran.png differ diff --git a/MyBatis/mybatis.png b/MyBatis/mybatis.png new file mode 100644 index 0000000..6464e27 Binary files /dev/null and b/MyBatis/mybatis.png differ diff --git a/Springer.An.Introduction.to.Network.Programming.with.Java.pdf b/Springer.An.Introduction.to.Network.Programming.with.Java.pdf new file mode 100644 index 0000000..10b36ad Binary files /dev/null and b/Springer.An.Introduction.to.Network.Programming.with.Java.pdf differ diff --git a/java/ClassLoeader.jpg b/java/ClassLoeader.jpg new file mode 100644 index 0000000..978010f Binary files /dev/null and b/java/ClassLoeader.jpg differ diff --git a/java/Class_Loading_Linking_Initializing.png b/java/Class_Loading_Linking_Initializing.png new file mode 100644 index 0000000..89d57bf Binary files /dev/null and b/java/Class_Loading_Linking_Initializing.png differ diff --git a/java/Figure1.png b/java/Figure1.png new file mode 100644 index 0000000..e678f9d Binary files /dev/null and b/java/Figure1.png differ diff --git a/java/Figure2.png b/java/Figure2.png new file mode 100644 index 0000000..52fb8dc Binary files /dev/null and b/java/Figure2.png differ diff --git a/java/JDBC.png b/java/JDBC.png new file mode 100644 index 0000000..ded2efe Binary files /dev/null and b/java/JDBC.png differ diff --git a/java/JEETT.pdf b/java/JEETT.pdf new file mode 100644 index 0000000..686c8ee Binary files /dev/null and b/java/JEETT.pdf differ diff --git a/java/JMM-thread.png b/java/JMM-thread.png new file mode 100644 index 0000000..55b4aa5 Binary files /dev/null and b/java/JMM-thread.png differ diff --git a/java/JVM_Internal_Architecture.png b/java/JVM_Internal_Architecture.png new file mode 100644 index 0000000..cc0fe3a Binary files /dev/null and b/java/JVM_Internal_Architecture.png differ diff --git a/java/Java-Design-Patterns.png b/java/Java-Design-Patterns.png new file mode 100644 index 0000000..3835e22 Binary files /dev/null and b/java/Java-Design-Patterns.png differ diff --git a/java/NIO.png b/java/NIO.png new file mode 100644 index 0000000..7d52150 Binary files /dev/null and b/java/NIO.png differ diff --git a/java/VM.png b/java/VM.png new file mode 100644 index 0000000..477ab58 Binary files /dev/null and b/java/VM.png differ diff --git a/java/aio.png b/java/aio.png new file mode 100644 index 0000000..403ec06 Binary files /dev/null and b/java/aio.png differ diff --git a/java/bio.png b/java/bio.png new file mode 100644 index 0000000..6ca3b98 Binary files /dev/null and b/java/bio.png differ diff --git a/java/concurent.jpg b/java/concurent.jpg new file mode 100644 index 0000000..36cfbfd Binary files /dev/null and b/java/concurent.jpg differ diff --git "a/java/dom\346\226\207\346\241\243\350\247\243\346\236\220.png" "b/java/dom\346\226\207\346\241\243\350\247\243\346\236\220.png" new file mode 100644 index 0000000..3901c1b Binary files /dev/null and "b/java/dom\346\226\207\346\241\243\350\247\243\346\236\220.png" differ diff --git a/java/factory-pattern-java.png b/java/factory-pattern-java.png new file mode 100644 index 0000000..f8e3d5e Binary files /dev/null and b/java/factory-pattern-java.png differ diff --git a/java/history.png b/java/history.png new file mode 100644 index 0000000..755e7e0 Binary files /dev/null and b/java/history.png differ diff --git a/java/io-mul.png b/java/io-mul.png new file mode 100644 index 0000000..ea0d0c1 Binary files /dev/null and b/java/io-mul.png differ diff --git a/java/j2ee.png b/java/j2ee.png new file mode 100644 index 0000000..cce3d89 Binary files /dev/null and b/java/j2ee.png differ diff --git a/java/java-init.jpg b/java/java-init.jpg new file mode 100644 index 0000000..266e661 Binary files /dev/null and b/java/java-init.jpg differ diff --git a/java/java-logo.jpg b/java/java-logo.jpg new file mode 100644 index 0000000..2b7e11c Binary files /dev/null and b/java/java-logo.jpg differ diff --git a/java/javax.mvc-api-1.0.0-spec.pdf b/java/javax.mvc-api-1.0.0-spec.pdf new file mode 100644 index 0000000..85fc1ef Binary files /dev/null and b/java/javax.mvc-api-1.0.0-spec.pdf differ diff --git a/java/jdbc4.2-fr-spec.pdf b/java/jdbc4.2-fr-spec.pdf new file mode 100644 index 0000000..13315db Binary files /dev/null and b/java/jdbc4.2-fr-spec.pdf differ diff --git a/java/jdk.jpg b/java/jdk.jpg new file mode 100644 index 0000000..cc3daf8 Binary files /dev/null and b/java/jdk.jpg differ diff --git a/java/jls8.pdf b/java/jls8.pdf new file mode 100644 index 0000000..d683898 Binary files /dev/null and b/java/jls8.pdf differ diff --git a/java/jls8.png b/java/jls8.png new file mode 100644 index 0000000..5b6dc67 Binary files /dev/null and b/java/jls8.png differ diff --git a/java/jmm8.png b/java/jmm8.png new file mode 100644 index 0000000..97cc7ca Binary files /dev/null and b/java/jmm8.png differ diff --git a/java/jsr133.pdf b/java/jsr133.pdf new file mode 100644 index 0000000..c07d385 Binary files /dev/null and b/java/jsr133.pdf differ diff --git a/java/jvm-art.png b/java/jvm-art.png new file mode 100644 index 0000000..6e0c029 Binary files /dev/null and b/java/jvm-art.png differ diff --git a/java/jvm.png b/java/jvm.png new file mode 100644 index 0000000..59af05e Binary files /dev/null and b/java/jvm.png differ diff --git a/java/jvm1.png b/java/jvm1.png new file mode 100644 index 0000000..4ce808d Binary files /dev/null and b/java/jvm1.png differ diff --git a/java/jvms8.pdf b/java/jvms8.pdf new file mode 100644 index 0000000..e0fdef7 Binary files /dev/null and b/java/jvms8.pdf differ diff --git a/java/new io.png b/java/new io.png new file mode 100644 index 0000000..5522fcd Binary files /dev/null and b/java/new io.png differ diff --git a/java/nio.pdf b/java/nio.pdf new file mode 100644 index 0000000..43e4799 Binary files /dev/null and b/java/nio.pdf differ diff --git a/java/o_44.png b/java/o_44.png new file mode 100644 index 0000000..1c2083d Binary files /dev/null and b/java/o_44.png differ diff --git a/java/opensource.png b/java/opensource.png new file mode 100644 index 0000000..5c479db Binary files /dev/null and b/java/opensource.png differ diff --git a/java/reactor-siemens.pdf b/java/reactor-siemens.pdf new file mode 100644 index 0000000..c5d7273 Binary files /dev/null and b/java/reactor-siemens.pdf differ diff --git a/java/reactor.pdf b/java/reactor.pdf new file mode 100644 index 0000000..0b77d9f Binary files /dev/null and b/java/reactor.pdf differ diff --git a/java/reactor.png b/java/reactor.png new file mode 100644 index 0000000..3c38a40 Binary files /dev/null and b/java/reactor.png differ diff --git a/java/reactor0.jpg b/java/reactor0.jpg new file mode 100644 index 0000000..11e7859 Binary files /dev/null and b/java/reactor0.jpg differ diff --git a/java/reactor1.jpg b/java/reactor1.jpg new file mode 100644 index 0000000..a8bb7a5 Binary files /dev/null and b/java/reactor1.jpg differ diff --git a/java/reactor2.jpg b/java/reactor2.jpg new file mode 100644 index 0000000..23b0c3a Binary files /dev/null and b/java/reactor2.jpg differ diff --git a/java/reactor3.jpg b/java/reactor3.jpg new file mode 100644 index 0000000..91f853d Binary files /dev/null and b/java/reactor3.jpg differ diff --git a/java/spring-rocketmqjpg.jpg b/java/spring-rocketmqjpg.jpg new file mode 100644 index 0000000..96d30b4 Binary files /dev/null and b/java/spring-rocketmqjpg.jpg differ diff --git a/java/thinking in java.jpg b/java/thinking in java.jpg new file mode 100644 index 0000000..97f14ff Binary files /dev/null and b/java/thinking in java.jpg differ diff --git a/java/thread/0.png b/java/thread/0.png new file mode 100644 index 0000000..09a8138 Binary files /dev/null and b/java/thread/0.png differ diff --git a/java/thread/1.png b/java/thread/1.png new file mode 100644 index 0000000..5883f5c Binary files /dev/null and b/java/thread/1.png differ diff --git a/java/thread/10.png b/java/thread/10.png new file mode 100644 index 0000000..1e2bee4 Binary files /dev/null and b/java/thread/10.png differ diff --git a/java/thread/11.png b/java/thread/11.png new file mode 100644 index 0000000..667e288 Binary files /dev/null and b/java/thread/11.png differ diff --git a/java/thread/2.png b/java/thread/2.png new file mode 100644 index 0000000..460e8a5 Binary files /dev/null and b/java/thread/2.png differ diff --git a/java/thread/3.png b/java/thread/3.png new file mode 100644 index 0000000..a6dd531 Binary files /dev/null and b/java/thread/3.png differ diff --git a/java/thread/4.png b/java/thread/4.png new file mode 100644 index 0000000..3f7032f Binary files /dev/null and b/java/thread/4.png differ diff --git a/java/thread/5.png b/java/thread/5.png new file mode 100644 index 0000000..8e0e0e9 Binary files /dev/null and b/java/thread/5.png differ diff --git a/java/thread/6.png b/java/thread/6.png new file mode 100644 index 0000000..441557b Binary files /dev/null and b/java/thread/6.png differ diff --git a/java/thread/7.png b/java/thread/7.png new file mode 100644 index 0000000..86f8676 Binary files /dev/null and b/java/thread/7.png differ diff --git a/java/thread/8.png b/java/thread/8.png new file mode 100644 index 0000000..788c4c1 Binary files /dev/null and b/java/thread/8.png differ diff --git a/java/thread/81838ee5-ac21-3635-a8f7-4ede59b5f610.png b/java/thread/81838ee5-ac21-3635-a8f7-4ede59b5f610.png new file mode 100644 index 0000000..8a97306 Binary files /dev/null and b/java/thread/81838ee5-ac21-3635-a8f7-4ede59b5f610.png differ diff --git a/java/thread/9.png b/java/thread/9.png new file mode 100644 index 0000000..5e07487 Binary files /dev/null and b/java/thread/9.png differ diff --git "a/java/thread/QQ\345\233\276\347\211\20720200411151320.png" "b/java/thread/QQ\345\233\276\347\211\20720200411151320.png" new file mode 100644 index 0000000..c30e701 Binary files /dev/null and "b/java/thread/QQ\345\233\276\347\211\20720200411151320.png" differ diff --git "a/java/thread/QQ\345\233\276\347\211\20720200413000957.png" "b/java/thread/QQ\345\233\276\347\211\20720200413000957.png" new file mode 100644 index 0000000..82483b5 Binary files /dev/null and "b/java/thread/QQ\345\233\276\347\211\20720200413000957.png" differ diff --git a/java/thread/ScheduledThreadPoolExecutor.png b/java/thread/ScheduledThreadPoolExecutor.png new file mode 100644 index 0000000..e3f4f9d Binary files /dev/null and b/java/thread/ScheduledThreadPoolExecutor.png differ diff --git a/java/thread/Thread_pool.png b/java/thread/Thread_pool.png new file mode 100644 index 0000000..d865e1a Binary files /dev/null and b/java/thread/Thread_pool.png differ diff --git a/java/thread/java-7-concurrent-collections-uml-class-diagram-example.png b/java/thread/java-7-concurrent-collections-uml-class-diagram-example.png new file mode 100644 index 0000000..b4f4957 Binary files /dev/null and b/java/thread/java-7-concurrent-collections-uml-class-diagram-example.png differ diff --git a/java/thread/java-7-concurrent-executors-uml-class-diagram-example.png b/java/thread/java-7-concurrent-executors-uml-class-diagram-example.png new file mode 100644 index 0000000..bbf41cd Binary files /dev/null and b/java/thread/java-7-concurrent-executors-uml-class-diagram-example.png differ diff --git a/java/thread/queue.png b/java/thread/queue.png new file mode 100644 index 0000000..2933a6a Binary files /dev/null and b/java/thread/queue.png differ diff --git a/java/thread/t0.png b/java/thread/t0.png new file mode 100644 index 0000000..bc8d5ea Binary files /dev/null and b/java/thread/t0.png differ diff --git a/java/thread/t1.png b/java/thread/t1.png new file mode 100644 index 0000000..cf5a738 Binary files /dev/null and b/java/thread/t1.png differ diff --git a/java/thread/t2.png b/java/thread/t2.png new file mode 100644 index 0000000..3b88ec5 Binary files /dev/null and b/java/thread/t2.png differ diff --git a/java/thread/t3.png b/java/thread/t3.png new file mode 100644 index 0000000..f64dcf0 Binary files /dev/null and b/java/thread/t3.png differ diff --git a/java/thread/t4.png b/java/thread/t4.png new file mode 100644 index 0000000..5b8d567 Binary files /dev/null and b/java/thread/t4.png differ diff --git a/java/thread/t5.png b/java/thread/t5.png new file mode 100644 index 0000000..e437d73 Binary files /dev/null and b/java/thread/t5.png differ diff --git a/java/thread/t6.png b/java/thread/t6.png new file mode 100644 index 0000000..d0873fd Binary files /dev/null and b/java/thread/t6.png differ diff --git a/java/thread/t61.png b/java/thread/t61.png new file mode 100644 index 0000000..d90d130 Binary files /dev/null and b/java/thread/t61.png differ diff --git a/java/thread/t62.png b/java/thread/t62.png new file mode 100644 index 0000000..23e76d4 Binary files /dev/null and b/java/thread/t62.png differ diff --git a/java/thread/t63.png b/java/thread/t63.png new file mode 100644 index 0000000..caee119 Binary files /dev/null and b/java/thread/t63.png differ diff --git a/java/thread/t64.png b/java/thread/t64.png new file mode 100644 index 0000000..e3f0e8e Binary files /dev/null and b/java/thread/t64.png differ diff --git a/java/thread/t7.png b/java/thread/t7.png new file mode 100644 index 0000000..65bbe5d Binary files /dev/null and b/java/thread/t7.png differ diff --git a/java/thread/t8.png b/java/thread/t8.png new file mode 100644 index 0000000..406acd1 Binary files /dev/null and b/java/thread/t8.png differ diff --git a/java/thread/t9.png b/java/thread/t9.png new file mode 100644 index 0000000..adf2e94 Binary files /dev/null and b/java/thread/t9.png differ diff --git a/java/thread/tPool.jpg b/java/thread/tPool.jpg new file mode 100644 index 0000000..a676242 Binary files /dev/null and b/java/thread/tPool.jpg differ diff --git a/java/thread/thread-state.png b/java/thread/thread-state.png new file mode 100644 index 0000000..1e7f268 Binary files /dev/null and b/java/thread/thread-state.png differ diff --git a/java/thread/threadPool.jpg b/java/thread/threadPool.jpg new file mode 100644 index 0000000..fb31072 Binary files /dev/null and b/java/thread/threadPool.jpg differ diff --git "a/java/\343\200\212Java\345\274\200\345\217\221\346\211\213\345\206\214\343\200\213v1.5.0 \345\215\216\345\261\261\347\211\210.pdf - \345\277\253\346\215\267\346\226\271\345\274\217.lnk" "b/java/\343\200\212Java\345\274\200\345\217\221\346\211\213\345\206\214\343\200\213v1.5.0 \345\215\216\345\261\261\347\211\210.pdf - \345\277\253\346\215\267\346\226\271\345\274\217.lnk" new file mode 100644 index 0000000..4041a10 Binary files /dev/null and "b/java/\343\200\212Java\345\274\200\345\217\221\346\211\213\345\206\214\343\200\213v1.5.0 \345\215\216\345\261\261\347\211\210.pdf - \345\277\253\346\215\267\346\226\271\345\274\217.lnk" differ diff --git "a/java/\346\226\260\345\273\272\346\226\207\346\234\254\346\226\207\346\241\243.txt" "b/java/\346\226\260\345\273\272\346\226\207\346\234\254\346\226\207\346\241\243.txt" new file mode 100644 index 0000000..5b15723 --- /dev/null +++ "b/java/\346\226\260\345\273\272\346\226\207\346\234\254\346\226\207\346\241\243.txt" @@ -0,0 +1,3 @@ +http://www.tupwk.com.cn/downpage/search.asp +http://ifeve.com/a-scalable-nonblocking-io-server/ +http://tutorials.jenkov.com/java-nio/selectors.html \ No newline at end of file diff --git "a/java/\346\241\206\346\236\266\346\250\241\345\274\217.png" "b/java/\346\241\206\346\236\266\346\250\241\345\274\217.png" new file mode 100644 index 0000000..5705298 Binary files /dev/null and "b/java/\346\241\206\346\236\266\346\250\241\345\274\217.png" differ diff --git "a/java/\346\250\241\345\274\217\345\214\272\345\210\253.jpg" "b/java/\346\250\241\345\274\217\345\214\272\345\210\253.jpg" new file mode 100644 index 0000000..9c6edf1 Binary files /dev/null and "b/java/\346\250\241\345\274\217\345\214\272\345\210\253.jpg" differ diff --git a/spring/622489-20180519092514495-1501179669.png b/spring/622489-20180519092514495-1501179669.png new file mode 100644 index 0000000..f143132 Binary files /dev/null and b/spring/622489-20180519092514495-1501179669.png differ diff --git a/spring/AspectJAwareAdvisorAutoProxyCreator.png b/spring/AspectJAwareAdvisorAutoProxyCreator.png new file mode 100644 index 0000000..397b210 Binary files /dev/null and b/spring/AspectJAwareAdvisorAutoProxyCreator.png differ diff --git a/spring/AutowiredAnnotationBeanPostProcessor.png b/spring/AutowiredAnnotationBeanPostProcessor.png new file mode 100644 index 0000000..a60a5ef Binary files /dev/null and b/spring/AutowiredAnnotationBeanPostProcessor.png differ diff --git a/spring/BeanFactory.png b/spring/BeanFactory.png new file mode 100644 index 0000000..66738cb Binary files /dev/null and b/spring/BeanFactory.png differ diff --git a/spring/FactoryBean.png b/spring/FactoryBean.png new file mode 100644 index 0000000..3949288 Binary files /dev/null and b/spring/FactoryBean.png differ diff --git "a/spring/QQ\345\233\276\347\211\20720200423014157.png" "b/spring/QQ\345\233\276\347\211\20720200423014157.png" new file mode 100644 index 0000000..7b6200e Binary files /dev/null and "b/spring/QQ\345\233\276\347\211\20720200423014157.png" differ diff --git "a/spring/QQ\345\233\276\347\211\20720200423163915.png" "b/spring/QQ\345\233\276\347\211\20720200423163915.png" new file mode 100644 index 0000000..35a830a Binary files /dev/null and "b/spring/QQ\345\233\276\347\211\20720200423163915.png" differ diff --git "a/spring/QQ\345\233\276\347\211\20720200424121301.png" "b/spring/QQ\345\233\276\347\211\20720200424121301.png" new file mode 100644 index 0000000..e95d7e2 Binary files /dev/null and "b/spring/QQ\345\233\276\347\211\20720200424121301.png" differ diff --git "a/spring/QQ\345\233\276\347\211\20720200424134451.png" "b/spring/QQ\345\233\276\347\211\20720200424134451.png" new file mode 100644 index 0000000..6391243 Binary files /dev/null and "b/spring/QQ\345\233\276\347\211\20720200424134451.png" differ diff --git a/spring/Screenshot_2020_0422_222322.png b/spring/Screenshot_2020_0422_222322.png new file mode 100644 index 0000000..c6e7cbf Binary files /dev/null and b/spring/Screenshot_2020_0422_222322.png differ diff --git a/spring/Screenshot_2020_0422_224759.png b/spring/Screenshot_2020_0422_224759.png new file mode 100644 index 0000000..e4b7b8f Binary files /dev/null and b/spring/Screenshot_2020_0422_224759.png differ diff --git a/spring/Spring-bean-life-cycle.png b/spring/Spring-bean-life-cycle.png new file mode 100644 index 0000000..0978d5d Binary files /dev/null and b/spring/Spring-bean-life-cycle.png differ diff --git a/spring/Spring.png b/spring/Spring.png new file mode 100644 index 0000000..a72eb9d Binary files /dev/null and b/spring/Spring.png differ diff --git a/spring/aop.png b/spring/aop.png new file mode 100644 index 0000000..46c6f22 Binary files /dev/null and b/spring/aop.png differ diff --git a/spring/beanLifeCycle.png b/spring/beanLifeCycle.png new file mode 100644 index 0000000..c5a6496 Binary files /dev/null and b/spring/beanLifeCycle.png differ diff --git a/spring/spring-aop.png b/spring/spring-aop.png new file mode 100644 index 0000000..0567e12 Binary files /dev/null and b/spring/spring-aop.png differ diff --git a/spring/spring.jpg b/spring/spring.jpg new file mode 100644 index 0000000..829ac48 Binary files /dev/null and b/spring/spring.jpg differ diff --git a/spring/spring.txt b/spring/spring.txt new file mode 100644 index 0000000..71bc869 --- /dev/null +++ b/spring/spring.txt @@ -0,0 +1,868 @@ +BeanNameAware's setBeanName +BeanClassLoaderAware's setBeanClassLoader +BeanFactoryAware's setBeanFactory +EnvironmentAware's setEnvironment +EmbeddedValueResolverAware's setEmbeddedValueResolver +ResourceLoaderAware's setResourceLoader (only applicable when running in an application context) +ApplicationEventPublisherAware's setApplicationEventPublisher (only applicable when running in an application context) +MessageSourceAware's setMessageSource (only applicable when running in an application context) +ApplicationContextAware's setApplicationContext (only applicable when running in an application context) +ServletContextAware's setServletContext (only applicable when running in a web application context) +postProcessBeforeInitialization methods of BeanPostProcessors +InitializingBean's afterPropertiesSet +a custom init-method definition +postProcessAfterInitialization methods of BeanPostProcessors +On shutdown of a bean factory, the following lifecycle methods apply: + + +DefaultListableBeanFactory +-------------------------------】 +BeanPostProcessor接口是最顶层的接口 +// 初始化之前的操作 + Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException; + // 初始化之后的操作 + Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException; + +InstantiationAwareBeanPostProcessor接口继承自BeanPostProcessor接口 +// postProcessBeforeInstantiation方法的作用在目标对象被实例化之前调用的方法,可以返回目标实例的一个代理用来代替目标实例 +// beanClass参数表示目标对象的类型,beanName是目标实例在Spring容器中的name +// 返回值类型是Object,如果返回的是非null对象,接下来除了postProcessAfterInitialization方法会被执行以外,其它bean构造的那些方法都不再执行。否则那些过程以及postProcessAfterInitialization方法都会执行 +Object postProcessBeforeInstantiation(Class beanClass, String beanName) throws BeansException; + +// postProcessAfterInstantiation方法的作用在目标对象被实例化之后并且在属性值被populate之前调用 +// bean参数是目标实例(这个时候目标对象已经被实例化但是该实例的属性还没有被设置),beanName是目标实例在Spring容器中的name +// 返回值是boolean类型,如果返回true,目标实例内部的返回值会被populate,否则populate这个过程会被忽视 +boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException; + +// postProcessPropertyValues方法的作用在属性中被设置到目标实例之前调用,可以修改属性的设置 +// pvs参数表示参数属性值(从BeanDefinition中获取),pds代表参数的描述信息(比如参数名,类型等描述信息),bean参数是目标实例,beanName是目标实例在Spring容器中的name +// 返回值是PropertyValues,可以使用一个全新的PropertyValues代替原先的PropertyValues用来覆盖属性设置或者直接在参数pvs上修改。如果返回值是null,那么会忽略属性设置这个过程(所有属性不论使用什么注解,最后都是null) +PropertyValues postProcessPropertyValues( + PropertyValues pvs, PropertyDescriptor[] pds, Object bean, String beanName) + throws BeansException; + +SmartInstantiationAwareBeanPostProcessor接口继承InstantiationAwareBeanPostProcessor接口 +// 预测Bean的类型,返回第一个预测成功的Class类型,如果不能预测返回null +Class predictBeanType(Class beanClass, String beanName) throws BeansException; + +// 选择合适的构造器,比如目标对象有多个构造器,在这里可以进行一些定制化,选择合适的构造器 +// beanClass参数表示目标实例的类型,beanName是目标实例在Spring容器中的name +// 返回值是个构造器数组,如果返回null,会执行下一个PostProcessor的determineCandidateConstructors方法;否则选取该PostProcessor选择的构造器 +Constructor[] determineCandidateConstructors(Class beanClass, String beanName) throws BeansException; + +// 获得提前暴露的bean引用。主要用于解决循环引用的问题 +// 只有单例对象才会调用此方法 +Object getEarlyBeanReference(Object bean, String beanName) throws BeansException; + +*********************************************** +postProcessBeforeInitialization是指bean在初始化之前需要调用的方法 +postProcessAfterInitialization是指bean在初始化之后需要调用的方法 +postProcessBeforeInitialization和postProcessAfterInitialization方法被调用的时候。这个时候bean已经被实例化,并且所有该注入的属性都已经被注入,是一个完整的bean +这2个方法的返回值可以是原先生成的实例bean,或者使用wrapper包装这个实例 + +SmartInstantiationAwareBeanPostProcessor接口继承InstantiationAwareBeanPostProcessor接口,它内部提供了3个方法,再加上父接口的5个方法,所以实现这个接口需要实现8个方法。SmartInstantiationAwareBeanPostProcessor接口的主要作用也是在于目标对象的实例化过程中需要处理的事情。它是InstantiationAwareBeanPostProcessor接口的一个扩展。主要在Spring框架内部使用 +predictBeanType方法用于预测Bean的类型,返回第一个预测成功的Class类型,如果不能预测返回null。主要在于BeanDefinition无法确定Bean类型的时候调用该方法来确定类型 +determineCandidateConstructors方法用于选择合适的构造器,比如类有多个构造器,可以实现这个方法选择合适的构造器并用于实例化对象。该方法在postProcessBeforeInstantiation方法和postProcessAfterInstantiation方法之间调用,如果postProcessBeforeInstantiation方法返回了一个新的实例代替了原本该生成的实例,那么该方法会被忽略 +getEarlyBeanReference主要用于解决循环引用问题。比如ReferenceA实例内部有ReferenceB的引用,ReferenceB实例内部有ReferenceA的引用。首先先实例化ReferenceA,实例化完成之后提前把这个bean暴露在ObjectFactory中,然后populate属性,这个时候发现需要ReferenceB。然后去实例化ReferenceB,在实例化ReferenceB的时候它需要ReferenceA的实例才能继续,这个时候就会去ObjectFactory中找出了ReferenceA实例,ReferenceB顺利实例化。ReferenceB实例化之后,ReferenceA的populate属性过程也成功完成,注入了ReferenceB实例。提前把这个bean暴露在ObjectFactory中,这个ObjectFactory获取的实例就是通过getEarlyBeanReference方法得到的 + + +InstantiationAwareBeanPostProcessor接口继承BeanPostProcessor接口,它内部提供了3个方法,再加上BeanPostProcessor接口内部的2个方法,所以实现这个接口需要实现5个方法。InstantiationAwareBeanPostProcessor接口的主要作用在于目标对象的实例化过程中需要处理的事情,包括实例化对象的前后过程以及实例的属性设置 +postProcessBeforeInstantiation方法是最先执行的方法,它在目标对象实例化之前调用,该方法的返回值类型是Object,我们可以返回任何类型的值。由于这个时候目标对象还未实例化,所以这个返回值可以用来代替原本该生成的目标对象的实例(比如代理对象)。如果该方法的返回值代替原本该生成的目标对象,后续只有postProcessAfterInitialization方法会调用,其它方法不再调用;否则按照正常的流程走 +postProcessAfterInstantiation方法在目标对象实例化之后调用,这个时候对象已经被实例化,但是该实例的属性还未被设置,都是null。如果该方法返回false,会忽略属性值的设置;如果返回true,会按照正常流程设置属性值 +postProcessPropertyValues方法对属性值进行修改(这个时候属性值还未被设置,但是我们可以修改原本该设置进去的属性值)。如果postProcessAfterInstantiation方法返回false,该方法不会被调用。可以在该方法内对属性值进行修改 +父接口BeanPostProcessor的2个方法postProcessBeforeInitialization和postProcessAfterInitialization都是在目标对象被实例化之后,并且属性也被设置之后调用的 +Instantiation表示实例化,Initialization表示初始化。实例化的意思在对象还未生成,初始化的意思在对象已经生成 +*********************************************** + +org.springframework.beans.factory.config.PropertyPlaceholderConfigurer + + + + + + + + + + + +#mysql.properties文件 +driver=com.mysql.jdbc.Driver +url=jdbc:mysql://192.168.8.200:3306/bdrackdemo?useUnicode=true&characterEncoding=utf8&autoReconnect=true +username=root +password=cstorfs + +java.lang.Object +org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor +org.springframework.context.annotation.CommonAnnotationBeanPostProcessor +All Implemented Interfaces: +Serializable, Aware, BeanFactoryAware, BeanPostProcessor, DestructionAwareBeanPostProcessor, InstantiationAwareBeanPostProcessor, MergedBeanDefinitionPostProcessor, Ordered, PriorityOrdered + @PostConstruct and @PreDestroy @Resource +https://docs.spring.io/spring-framework/docs/5.1.6.RELEASE/javadoc-api/org/springframework/context/annotation/CommonAnnotationBeanPostProcessor.html + +java.lang.Object +org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessorAdapter +org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor +All Implemented Interfaces: +Aware, BeanFactoryAware, BeanPostProcessor, InstantiationAwareBeanPostProcessor, SmartInstantiationAwareBeanPostProcessor, MergedBeanDefinitionPostProcessor, Ordered, PriorityOrdered +@Required +https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/annotation/RequiredAnnotationBeanPostProcessor.html + +java.lang.Object +org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessorAdapter +org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor +All Implemented Interfaces: +Aware, BeanFactoryAware, BeanPostProcessor, InstantiationAwareBeanPostProcessor, SmartInstantiationAwareBeanPostProcessor, MergedBeanDefinitionPostProcessor, Ordered, PriorityOrdered +@@@Autowired and @Value +https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/beans/factory/annotation/AutowiredAnnotationBeanPostProcessor.html + +java.lang.Object +org.springframework.context.annotation.ConfigurationClassPostProcessor +All Implemented Interfaces: +Aware, BeanClassLoaderAware, BeanFactoryPostProcessor, BeanDefinitionRegistryPostProcessor, EnvironmentAware, ResourceLoaderAware, Ordered, PriorityOrdered +@Configuration +https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/ConfigurationClassPostProcessor.html + + + + +ApplicationContextAwareProcessor + +AnnotationAwareAspectJAutoProxyCreator + +InstantiationAwareBeanPostProcessor + +AspectJAwareAdvisorAutoProxyCreator Spring启动时的beanPostProcessor,bean生命周期中经常可以看到beanPostProcessor在起作用,AOP也是基于IOC来实现的。 +例化ApplicationContext中加载配置文件过程 + +refresh- obtainFreshBeanFactory- refreshBeanFactory- AbstractRefreshableApplicationContext.loadBeanDefinitions(beanFactory)- …- XmlBeanDefinitionReader.loadBeanDefinitions(Resource resource)- DefaultBeanDefinitionDocumentReader.parseBeanDefinitions + +AspectJAwareAdvisorAutoProxyCreator的postProcessAfterInitialization方法再其父类AbstractAutoProxyCreator中实现,其会对已经实例化的bean进行wrap。 + +internalConfigurationAnnotationProcessor +ConfigurationClassPostProcessor +IoC容器启动流程中, refresh() +invokeBeanFactoryPostProcessors +BeanDefinitionRegistryPostProcessor继承了BeanFactoryPostProcessor,#postProcessBeanDefinitionRegistry()ConfigurationClassPostProcessor +BeanFactoryPostProcessor#postProcessBeanFactory(ConfigurableListableBeanFactory) + +执行逻辑总结: + 1、先执行BeanDefinitionRegistryPostProcessor#postProcessBeanDefinitionRegistry方法,其中BeanDefinitionRegistryPostProcessor执行优先级如下: + a、addBeanFactoryPostProcessor()传入到优先级最高,因为不需要实例化,直接可以获取到对象进行执行; + b、然后从IoC容器中获取PriorityOrdered接口的BeanDefinitionRegistryPostProcessor,实例化并排序后执行postProcessBeanDefinitionRegistry方法 + c、然后从IoC容器中获取Ordered接口的BeanDefinitionRegistryPostProcessor,实例化并排序后执行postProcessBeanDefinitionRegistry方法 + d、然后从IoC容器中获取剩余的BeanDefinitionRegistryPostProcessor,实例化后执行postProcessBeanDefinitionRegistry方法;注意这个处理步骤存在一个循环,主要是存在执行前面的BeanDefinitionRegistryPostProcessor#postProcessBeanDefinitionRegistry方法时,存在可能会向IoC容器中注册新的BeanDefinitionRegistryPostProcessor,通过循环保证都会被执行; + 2、然后执行BeanDefinitionRegistryPostProcessor#postProcessBeanFactory方法,执行顺序参照步骤1中执行顺序; + 3、最后才会执行BeanFactoryPostProcessor#postProcessBeanFactory,执行优先级和BeanDefinitionRegistryPostProcessor一致: + a、addBeanFactoryPostProcessor()传入到优先级最高,因为不需要实例化,直接可以获取到对象进行执行; + b、然后从IoC容器中获取PriorityOrdered接口的BeanFactoryPostProcessor,实例化并排序后执行postProcessBeanFactory方法 + c、然后从IoC容器中获取Ordered接口的BeanFactoryPostProcessor,实例化并排序后执行postProcessBeanFactory方法 + d、然后从IoC容器中获取剩余的BeanFactoryPostProcessor,实例化后执行postProcessBeanFactory方法 + +总结: +1、不同方法执行优先级:`BeanDefinitionRegistryPostProcessor#postProcessBeanDefinitionRegistry` > `BeanDefinitionRegistryPostProcessor#postProcessBeanFactory` > `BeanFactoryPostProcessor#postProcessBeanFactory`; +2、同方法执行优先级:`addBeanFactoryPostProcessor` > `PriorityOrdered` > `Ordered` > 非排序 +Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'appProperties' defined in spring.config.DatabaseConfiguration: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [spring.bean.ApplicationProperties]: Factory method 'appProperties' threw exception; nested exception is java.lang.NullPointerException + at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:656) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:484) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1338) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1177) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:557) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) + at org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$31/1418385211.getObject(Unknown Source) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:879) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:878) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) + at org.springframework.context.annotation.AnnotationConfigApplicationContext.(AnnotationConfigApplicationContext.java:89) + at spring.test.DatabaseBeanDefinitionRegistryPostProcessorExample.main(DatabaseBeanDefinitionRegistryPostProcessorExample.java:19) +Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [spring.bean.ApplicationProperties]: Factory method 'appProperties' threw exception; nested exception is java.lang.NullPointerException + at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) + at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:651) + ... 15 more +Caused by: java.lang.NullPointerException + at spring.config.DatabaseConfiguration.appProperties(DatabaseConfiguration.java:23) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:483) + at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) + ... 16 more + + Exception in thread "main" java.lang.IllegalStateException: app.connection.port is not found + at spring.config.RedisDataSourceProperties.getProperty(RedisDataSourceProperties.java:101) + at spring.config.RedisDataSourceProperties.getProperty(RedisDataSourceProperties.java:95) + at spring.config.RedisDataSourceProperties.(RedisDataSourceProperties.java:28) + at spring.bean.RedisBeanDefinitionRegistryPostProcessor.parseProperties(RedisBeanDefinitionRegistryPostProcessor.java:100) + at spring.bean.RedisBeanDefinitionRegistryPostProcessor.createRedisDatabaseBeans(RedisBeanDefinitionRegistryPostProcessor.java:109) + at spring.bean.RedisBeanDefinitionRegistryPostProcessor.postProcessBeanDefinitionRegistry(RedisBeanDefinitionRegistryPostProcessor.java:62) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:275) + at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:125) + at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:706) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:532) + at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:144) + at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:85) + at spring.test.TestSpringBeanLifecycleApp.testSpringBeanLifecycle2(TestSpringBeanLifecycleApp.java:58) + at spring.test.TestSpringBeanLifecycleApp.main(TestSpringBeanLifecycleApp.java:18) + + + context beanFactory bean + + + int count = registry.getBeanDefinitionCount(); + String[] beanNames = registry.getBeanDefinitionNames(); + System.out.println("Enter BeanDefinitionRegistryPostProcessor 111111111111: "+count); + System.out.println("execute postProcessBeanDefinitio.Registry() 1111111111111"); + System.out.println("BeanDefinitionRegistryPostProcessor postProcessBeanDefinitionRegistry阶段总共:"+count+" 个Beans"); + System.out.println(Arrays.asList(beanNames)); + + int count = beanFactory.getBeanDefinitionCount(); + String[] beanNames = beanFactory.getBeanDefinitionNames(); + System.out.println("BeanDefinitionRegistryPostProcessor postProcessBeanFactory阶段总共:"+count+" 个Beans"); + System.out.println(Arrays.asList(beanNames)); + + + System.out.println("Execute BeanFactoryPostProcessor postProcessBeanFactory() 444444444444"); + int count = beanFactory.getBeanDefinitionCount(); + String[] beanNames = beanFactory.getBeanDefinitionNames(); + System.out.println("BeanFactoryPostProcessor postProcessBeanFactory阶段总共:"+count+" 个Beans"); + System.out.println(Arrays.asList(beanNames)); + + + //遍历IoC中BeanDefinition + Arrays.stream(beanNames) + .forEach(x -> enhancer(beanFactory.getBeanDefinition(x))); + + [org.springframework.context.annotation.internalConfigurationAnnotationProcessor, + org.springframework.context.annotation.internalAutowiredAnnotationProcessor, + org.springframework.context.annotation.internalCommonAnnotationProcessor, + org.springframework.context.event.internalEventListenerProcessor, + org.springframework.context.event.internalEventListenerFactory, + redisDatabaseConfiguration, + dbConfigBean, + redisConfigBeanFactory, + datasource_redis, + repository_redis] + +spring的bean容器相关的注解有:@Required, @Autowired, @PostConstruct, @PreDestory。还有Spring3.0开始支持的JSR-330标准javax.inject.*中的注解(@Inject, @Named, @Qualifier, @Provider, @Scope, @Singleton). + +springmvc相关的注解有:@Controller,@RequestMapping,@RequestParam, @ResponseBody等等。 + +观察者模式,命令模式 +工厂模式,责任链模式,代理模式,适配器模式,构建者模式,门面设计模式, +装饰器模式,模板,单例模式,迭代器模式,组合模式 + +Builder模式 : 例如 SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、XMLStatementBuilder、CacheBuilder; +工厂模式 : 例如SqlSessionFactory、ObjectFactory、MapperProxyFactory; +单例模式 :例如ErrorContext和LogFactory; +代理模式 :Mybatis实现的核心,比如MapperProxy、ConnectionLogger,用的jdk的动态代理;还有executor.loader包使用了cglib或者javassist达到延迟加载的效果; +组合模式 :例如SqlNode和各个子类ChooseSqlNode等; +模板方法模式 : 例如BaseExecutor和SimpleExecutor,还有BaseTypeHandler和所有的子类例如IntegerTypeHandler; +适配器模式 : 例如Log的Mybatis接口和它对jdbc、log4j等各种日志框架的适配实现; +装饰者模式 : 例如cache包中的cache.decorators子包中等各个装饰者的实现; +迭代器模式 : 例如迭代器模式PropertyTokenizer; + +一、 Spring 中常见的设计模式 + +工厂模式 : BeanFactory + +装饰器模式: BeanWrapper + +代理模式: AopProxy + +单例模式: ApplicationContext + +委派模式: DispatcherServlet + +策略模式: HandlerMapping + +适配器模式: HandlerApdapter + +模板方法模式: JdbcTemplate + +观察者模式: ContextLoaderListener + +二、Spring 的四大模块及典型的设计模式 + +  1、Spring IOC 工厂模式、单例模式、装饰器模式 + +  2、Spring AOP 代理模式、观察者模式 + +  3、Spring MVC 委派模式、适配器模式 + +  4、Spring JDBC 模板方法模式 + + + +org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(String beanName, RootBeanDefinition mbd, @Nullable Object[] args) +org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(String beanName, RootBeanDefinition mbd, @Nullable Object[] args) + + +org.springframework.beans.factory.config.SingletonBeanRegistry + + /** Cache of singleton objects: bean name to bean instance. */ + private final Map singletonObjects = new ConcurrentHashMap<>(256); + + /** Cache of singleton factories: bean name to ObjectFactory. */ + private final Map> singletonFactories = new HashMap<>(16); + + /** Cache of early singleton objects: bean name to bean instance. */ + private final Map earlySingletonObjects = new HashMap<>(16); + + /** Set of registered singletons, containing the bean names in registration order. */ + private final Set registeredSingletons = new LinkedHashSet<>(256); + + /** Names of beans that are currently in creation. */ + private final Set singletonsCurrentlyInCreation = + Collections.newSetFromMap(new ConcurrentHashMap<>(16)); + + /** Names of beans currently excluded from in creation checks. */ + private final Set inCreationCheckExclusions = + Collections.newSetFromMap(new ConcurrentHashMap<>(16)); + + + + + ## Bean creation process + +st => start: springBoot main run method + e => end: Bean created +op1=>operation: SpringApplication.refreshContext(context) +op2=>operation: SpringApplication.refresh(context) +op3=>operation: EmbeddedWebApplicationContext.refresh()(super.refesh()) +op4=>operation: AbstractApplicationContext.refresh() +// Instantiate all remaining (non-lazy-init) singletons. +//finishBeanFactoryInitialization(beanFactory); +op5=>operation: AbstractApplicationContext.finishBeanFactoryInitialization() +// Instantiate all remaining (non-lazy-init) singletons. +//beanFactory.preInstantiateSingletons(); +op6=>operation: DefaultListableBeanFactory.preInstantiateSingletons() +//getBean(beanName); +op7=>operation: AbstractBeanFactory.getBean(String name) +//return doGetBean(name, null, null, false); +op8=>operation: AbstractBeanFactory.doGetBean() +//sharedInstance = getSingleton(beanName, new ObjectFactory() +op9=>operation: DefaultSingletonBeanRegistry.getSingleton(String beanName, ObjectFactory singletonFactory) +//singletonObject = singletonFactory.getObject(); +op10=>operation: AbstractBeanFactory.return createBean(beanName, mbd, args); +op11=>operation: AbstractAutowireCapableBeanFactory.doCreateBean(beanName, mbdToUse, args); +op12=>operation: AbstractAutowireCapableBeanFactory.createBeanInstance(beanName, mbd, args); +op13=>operation: AbstractAutowireCapableBeanFactory. instantiateUsingFactoryMethod(beanName, mbd, args) +op14=>operation: ConstructorResolver.this.beanFactory.getInstantiationStrategy().instantiate( + mbd, beanName, this.beanFactory, factoryBean, factoryMethodToUse, argsToUse); +op15=>operation: SimpleInstantiationStrategy.factoryMethod.invoke(factoryBean, args); + cond => condition: whether to buy and logged Make Fei like? + +st->op1->op2->op3->op4->op5->op6->op7->op8->op9->op10->op11->op12->op13->op14->op15->e + + +node element name: context:component-scan +property-override===org.springframework.context.config.PropertyOverrideBeanDefinitionParser@59402b8f +annotation-config===org.springframework.context.annotation.AnnotationConfigBeanDefinitionParser@7188af83 +mbean-server===org.springframework.context.config.MBeanServerBeanDefinitionParser@6be968ce +component-scan===org.springframework.context.annotation.ComponentScanBeanDefinitionParser@7c37508a +load-time-weaver===org.springframework.context.config.LoadTimeWeaverBeanDefinitionParser@247310d0 +property-placeholder===org.springframework.context.config.PropertyPlaceholderBeanDefinitionParser@1033576a +spring-configured===org.springframework.context.config.SpringConfiguredBeanDefinitionParser@303cf2ba +mbean-export===org.springframework.context.config.MBeanExportBeanDefinitionParser@76494737 +node element name: bean +node element name: aop:config +aspectj-autoproxy===org.springframework.aop.config.AspectJAutoProxyBeanDefinitionParser@5e17553a +spring-configured===org.springframework.aop.config.SpringConfiguredBeanDefinitionParser@3eb91815 +config===org.springframework.aop.config.ConfigBeanDefinitionParser@56dc1551 +标签名: aspect +aspect id: logAspect, aspect ref:logInterceptor +已注册的bean定义: [calculator, logInterceptor, org.springframework.context.annotation.internalConfigurationAnnotationProcessor, org.springframework.context.annotation.internalAutowiredAnnotationProcessor, org.springframework.context.annotation.internalRequiredAnnotationProcessor, org.springframework.context.annotation.internalCommonAnnotationProcessor, org.springframework.context.event.internalEventListenerProcessor, org.springframework.context.event.internalEventListenerFactory, org.springframework.aop.config.internalAutoProxyCreator] +pointcut id:logPointCut, expression表达式:execution(* spring.aop.CalculatorImp.*(..)) +已注册的bean定义: [calculator, logInterceptor, org.springframework.context.annotation.internalConfigurationAnnotationProcessor, org.springframework.context.annotation.internalAutowiredAnnotationProcessor, org.springframework.context.annotation.internalRequiredAnnotationProcessor, org.springframework.context.annotation.internalCommonAnnotationProcessor, org.springframework.context.event.internalEventListenerProcessor, org.springframework.context.event.internalEventListenerFactory, org.springframework.aop.config.internalAutoProxyCreator, org.springframework.aop.aspectj.AspectJPointcutAdvisor#0, org.springframework.aop.aspectj.AspectJPointcutAdvisor#1, logPointCut] +已完成注册的bean定义: [calculator, logInterceptor, org.springframework.context.annotation.internalConfigurationAnnotationProcessor, org.springframework.context.annotation.internalAutowiredAnnotationProcessor, org.springframework.context.annotation.internalRequiredAnnotationProcessor, org.springframework.context.annotation.internalCommonAnnotationProcessor, org.springframework.context.event.internalEventListenerProcessor, org.springframework.context.event.internalEventListenerFactory, org.springframework.aop.config.internalAutoProxyCreator, org.springframework.aop.aspectj.AspectJPointcutAdvisor#0, org.springframework.aop.aspectj.AspectJPointcutAdvisor#1, logPointCut] +spring.aop.CalculatorImp +spring.aop.LogInterceptor +org.springframework.context.annotation.ConfigurationClassPostProcessor +org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor +org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor +org.springframework.context.annotation.CommonAnnotationBeanPostProcessor +org.springframework.context.event.EventListenerMethodProcessor +org.springframework.context.event.DefaultEventListenerFactory +org.springframework.aop.aspectj.autoproxy.AspectJAwareAdvisorAutoProxyCreator +org.springframework.aop.aspectj.AspectJPointcutAdvisor +org.springframework.aop.aspectj.AspectJPointcutAdvisor +org.springframework.aop.aspectj.AspectJExpressionPointcut +prepareBeanFactory 已注册12个bean定义: [calculator, logInterceptor, org.springframework.context.annotation.internalConfigurationAnnotationProcessor, org.springframework.context.annotation.internalAutowiredAnnotationProcessor, org.springframework.context.annotation.internalRequiredAnnotationProcessor, org.springframework.context.annotation.internalCommonAnnotationProcessor, org.springframework.context.event.internalEventListenerProcessor, org.springframework.context.event.internalEventListenerFactory, org.springframework.aop.config.internalAutoProxyCreator, org.springframework.aop.aspectj.AspectJPointcutAdvisor#0, org.springframework.aop.aspectj.AspectJPointcutAdvisor#1, logPointCut] +spring.aop.CalculatorImp +spring.aop.LogInterceptor +org.springframework.context.annotation.ConfigurationClassPostProcessor +org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor +org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor +org.springframework.context.annotation.CommonAnnotationBeanPostProcessor +org.springframework.context.event.EventListenerMethodProcessor +org.springframework.context.event.DefaultEventListenerFactory +org.springframework.aop.aspectj.autoproxy.AspectJAwareAdvisorAutoProxyCreator +org.springframework.aop.aspectj.AspectJPointcutAdvisor +org.springframework.aop.aspectj.AspectJPointcutAdvisor +org.springframework.aop.aspectj.AspectJExpressionPointcut +environment +systemProperties +systemEnvironment +postProcessBeanFactory 已注册12个bean定义: [calculator, logInterceptor, org.springframework.context.annotation.internalConfigurationAnnotationProcessor, org.springframework.context.annotation.internalAutowiredAnnotationProcessor, org.springframework.context.annotation.internalRequiredAnnotationProcessor, org.springframework.context.annotation.internalCommonAnnotationProcessor, org.springframework.context.event.internalEventListenerProcessor, org.springframework.context.event.internalEventListenerFactory, org.springframework.aop.config.internalAutoProxyCreator, org.springframework.aop.aspectj.AspectJPointcutAdvisor#0, org.springframework.aop.aspectj.AspectJPointcutAdvisor#1, logPointCut] +spring.aop.CalculatorImp +spring.aop.LogInterceptor +org.springframework.context.annotation.ConfigurationClassPostProcessor +org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor +org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor +org.springframework.context.annotation.CommonAnnotationBeanPostProcessor +org.springframework.context.event.EventListenerMethodProcessor +org.springframework.context.event.DefaultEventListenerFactory +org.springframework.aop.aspectj.autoproxy.AspectJAwareAdvisorAutoProxyCreator +org.springframework.aop.aspectj.AspectJPointcutAdvisor +org.springframework.aop.aspectj.AspectJPointcutAdvisor +org.springframework.aop.aspectj.AspectJExpressionPointcut +environment +systemProperties +systemEnvironment +org.springframework.beans.factory.support.DefaultListableBeanFactory@3ddc6915: defining beans [calculator,logInterceptor,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.event.internalEventListenerProcessor,org.springframework.context.event.internalEventListenerFactory,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.aop.aspectj.AspectJPointcutAdvisor#0,org.springframework.aop.aspectj.AspectJPointcutAdvisor#1,logPointCut]; root of factory hierarchy beanFactory 是: BeanDefinitionRegistry 的对象 +BeanDefinitionRegistryPostProcessor: org.springframework.context.annotation.internalConfigurationAnnotationProcessor +org.springframework.context.annotation.internalConfigurationAnnotationProcessor BeanDefinitionRegistryPostProcessor 是: PriorityOrdered 的对象 +org.springframework.context.annotation.internalConfigurationAnnotationProcessor AOP 6666666666666666 +对象:org.springframework.context.annotation.ConfigurationClassPostProcessor@616ac46a 的类型是:class org.springframework.context.annotation.ConfigurationClassPostProcessor +BeanPostProcessor列表: [org.springframework.context.support.ApplicationContextAwareProcessor@67b9b51a] +org.springframework.context.support.ApplicationContextAwareProcessor +class org.springframework.context.annotation.ConfigurationClassPostProcessor AOP 888888888888 +org.springframework.context.annotation.ConfigurationClassPostProcessor@616ac46a 是: BeanDefinitionRegistryPostProcessor +reiterate阶段 BeanDefinitionRegistryPostProcessor: org.springframework.context.annotation.internalConfigurationAnnotationProcessor +org.springframework.context.annotation.ConfigurationClassPostProcessor@616ac46a 是: BeanFactoryPostProcessor +BeanFactoryPostProcessor: org.springframework.context.annotation.internalConfigurationAnnotationProcessor +none!!! +invokeBeanFactoryPostProcessors 已注册14个bean定义: [calculator, logInterceptor, org.springframework.context.annotation.internalConfigurationAnnotationProcessor, org.springframework.context.annotation.internalAutowiredAnnotationProcessor, org.springframework.context.annotation.internalRequiredAnnotationProcessor, org.springframework.context.annotation.internalCommonAnnotationProcessor, org.springframework.context.event.internalEventListenerProcessor, org.springframework.context.event.internalEventListenerFactory, org.springframework.aop.config.internalAutoProxyCreator, org.springframework.aop.aspectj.AspectJPointcutAdvisor#0, org.springframework.aop.aspectj.AspectJPointcutAdvisor#1, logPointCut, org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor, org.springframework.context.annotation.ConfigurationClassPostProcessor.enhancedConfigurationProcessor] +spring.aop.CalculatorImp +spring.aop.LogInterceptor +org.springframework.context.annotation.ConfigurationClassPostProcessor +org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor +org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor +org.springframework.context.annotation.CommonAnnotationBeanPostProcessor +org.springframework.context.event.EventListenerMethodProcessor +org.springframework.context.event.DefaultEventListenerFactory +org.springframework.aop.aspectj.autoproxy.AspectJAwareAdvisorAutoProxyCreator +org.springframework.aop.aspectj.AspectJPointcutAdvisor +org.springframework.aop.aspectj.AspectJPointcutAdvisor +org.springframework.aop.aspectj.AspectJExpressionPointcut +org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor +org.springframework.context.annotation.ConfigurationClassPostProcessor$EnhancedConfigurationBeanPostProcessor +environment +systemProperties +systemEnvironment +org.springframework.context.annotation.internalConfigurationAnnotationProcessor +org.springframework.context.annotation.ConfigurationClassPostProcessor.importRegistry +BeanPostProcessor: org.springframework.context.annotation.internalAutowiredAnnotationProcessor +BeanPostProcessor: org.springframework.context.annotation.internalRequiredAnnotationProcessor +BeanPostProcessor: org.springframework.context.annotation.internalCommonAnnotationProcessor +BeanPostProcessor: org.springframework.aop.config.internalAutoProxyCreator +BeanPostProcessor: org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor +BeanPostProcessor: org.springframework.context.annotation.ConfigurationClassPostProcessor.enhancedConfigurationProcessor +org.springframework.context.annotation.internalAutowiredAnnotationProcessor 匹配 PriorityOrdered +org.springframework.context.annotation.internalAutowiredAnnotationProcessor AOP 6666666666666666 +对象:org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor@11f0a5a1 的类型是:class org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor +BeanPostProcessor列表: [org.springframework.context.support.ApplicationContextAwareProcessor@67b9b51a, org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker@10f7f7de] +org.springframework.context.support.ApplicationContextAwareProcessor +org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker +class org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor AOP 888888888888 +org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor@11f0a5a1是 MergedBeanDefinitionPostProcessor +org.springframework.context.annotation.internalRequiredAnnotationProcessor 匹配 PriorityOrdered +org.springframework.context.annotation.internalRequiredAnnotationProcessor AOP 6666666666666666 +对象:org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor@73a8da0f 的类型是:class org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor +BeanPostProcessor列表: [org.springframework.context.support.ApplicationContextAwareProcessor@67b9b51a, org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker@10f7f7de] +org.springframework.context.support.ApplicationContextAwareProcessor +org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker +class org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor AOP 888888888888 +org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor@73a8da0f是 MergedBeanDefinitionPostProcessor +org.springframework.context.annotation.internalCommonAnnotationProcessor 匹配 PriorityOrdered +org.springframework.context.annotation.internalCommonAnnotationProcessor AOP 6666666666666666 +对象:org.springframework.context.annotation.CommonAnnotationBeanPostProcessor@5a5338df 的类型是:class org.springframework.context.annotation.CommonAnnotationBeanPostProcessor +BeanPostProcessor列表: [org.springframework.context.support.ApplicationContextAwareProcessor@67b9b51a, org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker@10f7f7de] +org.springframework.context.support.ApplicationContextAwareProcessor +org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker +class org.springframework.context.annotation.CommonAnnotationBeanPostProcessor AOP 888888888888 +org.springframework.context.annotation.CommonAnnotationBeanPostProcessor@5a5338df是 MergedBeanDefinitionPostProcessor +org.springframework.aop.config.internalAutoProxyCreator 匹配 Ordered +org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor 匹配 PriorityOrdered +org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor AOP 6666666666666666 +对象:org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor@418c5a9c 的类型是:class org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor +BeanPostProcessor列表: [org.springframework.context.support.ApplicationContextAwareProcessor@67b9b51a, org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker@10f7f7de] +org.springframework.context.support.ApplicationContextAwareProcessor +org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker +class org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor AOP 888888888888 +org.springframework.context.annotation.ConfigurationClassPostProcessor.enhancedConfigurationProcessor 匹配 PriorityOrdered +org.springframework.context.annotation.ConfigurationClassPostProcessor.enhancedConfigurationProcessor AOP 6666666666666666 +对象:org.springframework.context.annotation.ConfigurationClassPostProcessor$EnhancedConfigurationBeanPostProcessor@18e36d14 的类型是:class org.springframework.context.annotation.ConfigurationClassPostProcessor$EnhancedConfigurationBeanPostProcessor +BeanPostProcessor列表: [org.springframework.context.support.ApplicationContextAwareProcessor@67b9b51a, org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker@10f7f7de] +org.springframework.context.support.ApplicationContextAwareProcessor +org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker +class org.springframework.context.annotation.ConfigurationClassPostProcessor$EnhancedConfigurationBeanPostProcessor AOP 888888888888 +org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor@418c5a9c 是: BeanPostProcessor +org.springframework.context.annotation.ConfigurationClassPostProcessor$EnhancedConfigurationBeanPostProcessor@18e36d14 是: BeanPostProcessor +org.springframework.context.annotation.CommonAnnotationBeanPostProcessor@5a5338df 是: BeanPostProcessor +org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor@11f0a5a1 是: BeanPostProcessor +org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor@73a8da0f 是: BeanPostProcessor +org.springframework.aop.config.internalAutoProxyCreator AOP 6666666666666666 +对象:proxyTargetClass=false; optimize=false; opaque=false; exposeProxy=false; frozen=false 的类型是:class org.springframework.aop.aspectj.autoproxy.AspectJAwareAdvisorAutoProxyCreator +BeanPostProcessor列表: [org.springframework.context.support.ApplicationContextAwareProcessor@67b9b51a, org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker@10f7f7de, org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor@418c5a9c, org.springframework.context.annotation.ConfigurationClassPostProcessor$EnhancedConfigurationBeanPostProcessor@18e36d14, org.springframework.context.annotation.CommonAnnotationBeanPostProcessor@5a5338df, org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor@11f0a5a1, org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor@73a8da0f] +org.springframework.context.support.ApplicationContextAwareProcessor +org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker +org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor +org.springframework.context.annotation.ConfigurationClassPostProcessor$EnhancedConfigurationBeanPostProcessor +org.springframework.context.annotation.CommonAnnotationBeanPostProcessor +org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor +org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor +class org.springframework.aop.aspectj.autoproxy.AspectJAwareAdvisorAutoProxyCreator AOP 888888888888 +proxyTargetClass=false; optimize=false; opaque=false; exposeProxy=false; frozen=false 是: BeanPostProcessor +org.springframework.context.annotation.CommonAnnotationBeanPostProcessor@5a5338df 是: BeanPostProcessor +org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor@11f0a5a1 是: BeanPostProcessor +org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor@73a8da0f 是: BeanPostProcessor +registerBeanPostProcessors 已注册14个bean定义: [calculator, logInterceptor, org.springframework.context.annotation.internalConfigurationAnnotationProcessor, org.springframework.context.annotation.internalAutowiredAnnotationProcessor, org.springframework.context.annotation.internalRequiredAnnotationProcessor, org.springframework.context.annotation.internalCommonAnnotationProcessor, org.springframework.context.event.internalEventListenerProcessor, org.springframework.context.event.internalEventListenerFactory, org.springframework.aop.config.internalAutoProxyCreator, org.springframework.aop.aspectj.AspectJPointcutAdvisor#0, org.springframework.aop.aspectj.AspectJPointcutAdvisor#1, logPointCut, org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor, org.springframework.context.annotation.ConfigurationClassPostProcessor.enhancedConfigurationProcessor] +spring.aop.CalculatorImp +spring.aop.LogInterceptor +org.springframework.context.annotation.ConfigurationClassPostProcessor +org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor +org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor +org.springframework.context.annotation.CommonAnnotationBeanPostProcessor +org.springframework.context.event.EventListenerMethodProcessor +org.springframework.context.event.DefaultEventListenerFactory +org.springframework.aop.aspectj.autoproxy.AspectJAwareAdvisorAutoProxyCreator +org.springframework.aop.aspectj.AspectJPointcutAdvisor +org.springframework.aop.aspectj.AspectJPointcutAdvisor +org.springframework.aop.aspectj.AspectJExpressionPointcut +org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor +org.springframework.context.annotation.ConfigurationClassPostProcessor$EnhancedConfigurationBeanPostProcessor +environment +systemProperties +systemEnvironment +org.springframework.context.annotation.internalConfigurationAnnotationProcessor +org.springframework.context.annotation.ConfigurationClassPostProcessor.importRegistry +org.springframework.context.annotation.internalAutowiredAnnotationProcessor +org.springframework.context.annotation.internalRequiredAnnotationProcessor +org.springframework.context.annotation.internalCommonAnnotationProcessor +org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor +org.springframework.context.annotation.ConfigurationClassPostProcessor.enhancedConfigurationProcessor +org.springframework.aop.config.internalAutoProxyCreator +(inner bean)#1115ec15 AOP 6666666666666666 +对象:org.springframework.aop.aspectj.AspectJMethodBeforeAdvice: advice method [public void spring.aop.LogInterceptor.before()]; aspect name 'logInterceptor' 的类型是:class org.springframework.aop.aspectj.AspectJMethodBeforeAdvice +BeanPostProcessor列表: [org.springframework.context.support.ApplicationContextAwareProcessor@67b9b51a, org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker@10f7f7de, org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor@418c5a9c, org.springframework.context.annotation.ConfigurationClassPostProcessor$EnhancedConfigurationBeanPostProcessor@18e36d14, proxyTargetClass=false; optimize=false; opaque=false; exposeProxy=false; frozen=false, org.springframework.context.annotation.CommonAnnotationBeanPostProcessor@5a5338df, org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor@11f0a5a1, org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor@73a8da0f, org.springframework.context.support.PostProcessorRegistrationDelegate$ApplicationListenerDetector@141e5bef] +org.springframework.context.support.ApplicationContextAwareProcessor +org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker +org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor +org.springframework.context.annotation.ConfigurationClassPostProcessor$EnhancedConfigurationBeanPostProcessor +org.springframework.aop.aspectj.autoproxy.AspectJAwareAdvisorAutoProxyCreator +org.springframework.context.annotation.CommonAnnotationBeanPostProcessor +org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor +org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor +org.springframework.context.support.PostProcessorRegistrationDelegate$ApplicationListenerDetector +class org.springframework.aop.aspectj.AspectJMethodBeforeAdvice AOP 888888888888 +org.springframework.aop.aspectj.AspectJPointcutAdvisor#0 AOP 6666666666666666 +对象:org.springframework.aop.aspectj.AspectJPointcutAdvisor@4f74980d 的类型是:class org.springframework.aop.aspectj.AspectJPointcutAdvisor +BeanPostProcessor列表: [org.springframework.context.support.ApplicationContextAwareProcessor@67b9b51a, org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker@10f7f7de, org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor@418c5a9c, org.springframework.context.annotation.ConfigurationClassPostProcessor$EnhancedConfigurationBeanPostProcessor@18e36d14, proxyTargetClass=false; optimize=false; opaque=false; exposeProxy=false; frozen=false, org.springframework.context.annotation.CommonAnnotationBeanPostProcessor@5a5338df, org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor@11f0a5a1, org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor@73a8da0f, org.springframework.context.support.PostProcessorRegistrationDelegate$ApplicationListenerDetector@141e5bef] +org.springframework.context.support.ApplicationContextAwareProcessor +org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker +org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor +org.springframework.context.annotation.ConfigurationClassPostProcessor$EnhancedConfigurationBeanPostProcessor +org.springframework.aop.aspectj.autoproxy.AspectJAwareAdvisorAutoProxyCreator +org.springframework.context.annotation.CommonAnnotationBeanPostProcessor +org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor +org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor +org.springframework.context.support.PostProcessorRegistrationDelegate$ApplicationListenerDetector +class org.springframework.aop.aspectj.AspectJPointcutAdvisor AOP 888888888888 +(inner bean)#10b9db7b AOP 6666666666666666 +对象:org.springframework.aop.aspectj.AspectJAfterAdvice: advice method [public void spring.aop.LogInterceptor.after()]; aspect name 'logInterceptor' 的类型是:class org.springframework.aop.aspectj.AspectJAfterAdvice +BeanPostProcessor列表: [org.springframework.context.support.ApplicationContextAwareProcessor@67b9b51a, org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker@10f7f7de, org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor@418c5a9c, org.springframework.context.annotation.ConfigurationClassPostProcessor$EnhancedConfigurationBeanPostProcessor@18e36d14, proxyTargetClass=false; optimize=false; opaque=false; exposeProxy=false; frozen=false, org.springframework.context.annotation.CommonAnnotationBeanPostProcessor@5a5338df, org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor@11f0a5a1, org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor@73a8da0f, org.springframework.context.support.PostProcessorRegistrationDelegate$ApplicationListenerDetector@141e5bef] +org.springframework.context.support.ApplicationContextAwareProcessor +org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker +org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor +org.springframework.context.annotation.ConfigurationClassPostProcessor$EnhancedConfigurationBeanPostProcessor +org.springframework.aop.aspectj.autoproxy.AspectJAwareAdvisorAutoProxyCreator +org.springframework.context.annotation.CommonAnnotationBeanPostProcessor +org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor +org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor +org.springframework.context.support.PostProcessorRegistrationDelegate$ApplicationListenerDetector +class org.springframework.aop.aspectj.AspectJAfterAdvice AOP 888888888888 +org.springframework.aop.aspectj.AspectJPointcutAdvisor#1 AOP 6666666666666666 +对象:org.springframework.aop.aspectj.AspectJPointcutAdvisor@4f74980d 的类型是:class org.springframework.aop.aspectj.AspectJPointcutAdvisor +BeanPostProcessor列表: [org.springframework.context.support.ApplicationContextAwareProcessor@67b9b51a, org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker@10f7f7de, org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor@418c5a9c, org.springframework.context.annotation.ConfigurationClassPostProcessor$EnhancedConfigurationBeanPostProcessor@18e36d14, proxyTargetClass=false; optimize=false; opaque=false; exposeProxy=false; frozen=false, org.springframework.context.annotation.CommonAnnotationBeanPostProcessor@5a5338df, org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor@11f0a5a1, org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor@73a8da0f, org.springframework.context.support.PostProcessorRegistrationDelegate$ApplicationListenerDetector@141e5bef] +org.springframework.context.support.ApplicationContextAwareProcessor +org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker +org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor +org.springframework.context.annotation.ConfigurationClassPostProcessor$EnhancedConfigurationBeanPostProcessor +org.springframework.aop.aspectj.autoproxy.AspectJAwareAdvisorAutoProxyCreator +org.springframework.context.annotation.CommonAnnotationBeanPostProcessor +org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor +org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor +org.springframework.context.support.PostProcessorRegistrationDelegate$ApplicationListenerDetector +class org.springframework.aop.aspectj.AspectJPointcutAdvisor AOP 888888888888 +calculator AOP 6666666666666666 +对象:spring.aop.CalculatorImp@232a7d73 的类型是:class spring.aop.CalculatorImp +BeanPostProcessor列表: [org.springframework.context.support.ApplicationContextAwareProcessor@67b9b51a, org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker@10f7f7de, org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor@418c5a9c, org.springframework.context.annotation.ConfigurationClassPostProcessor$EnhancedConfigurationBeanPostProcessor@18e36d14, proxyTargetClass=false; optimize=false; opaque=false; exposeProxy=false; frozen=false, org.springframework.context.annotation.CommonAnnotationBeanPostProcessor@5a5338df, org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor@11f0a5a1, org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor@73a8da0f, org.springframework.context.support.PostProcessorRegistrationDelegate$ApplicationListenerDetector@141e5bef] +org.springframework.context.support.ApplicationContextAwareProcessor +org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker +org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor +org.springframework.context.annotation.ConfigurationClassPostProcessor$EnhancedConfigurationBeanPostProcessor +org.springframework.aop.aspectj.autoproxy.AspectJAwareAdvisorAutoProxyCreator +org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(Object bean, String beanName) +org.springframework.context.annotation.CommonAnnotationBeanPostProcessor +org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor +org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor +org.springframework.context.support.PostProcessorRegistrationDelegate$ApplicationListenerDetector +class com.sun.proxy.$Proxy23 AOP 888888888888 +logInterceptor AOP 6666666666666666 +对象:spring.aop.LogInterceptor@50ecde95 的类型是:class spring.aop.LogInterceptor +BeanPostProcessor列表: [org.springframework.context.support.ApplicationContextAwareProcessor@67b9b51a, org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker@10f7f7de, org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor@418c5a9c, org.springframework.context.annotation.ConfigurationClassPostProcessor$EnhancedConfigurationBeanPostProcessor@18e36d14, proxyTargetClass=false; optimize=false; opaque=false; exposeProxy=false; frozen=false, org.springframework.context.annotation.CommonAnnotationBeanPostProcessor@5a5338df, org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor@11f0a5a1, org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor@73a8da0f, org.springframework.context.support.PostProcessorRegistrationDelegate$ApplicationListenerDetector@141e5bef] +org.springframework.context.support.ApplicationContextAwareProcessor +org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker +org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor +org.springframework.context.annotation.ConfigurationClassPostProcessor$EnhancedConfigurationBeanPostProcessor +org.springframework.aop.aspectj.autoproxy.AspectJAwareAdvisorAutoProxyCreator +org.springframework.context.annotation.CommonAnnotationBeanPostProcessor +org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor +org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor +org.springframework.context.support.PostProcessorRegistrationDelegate$ApplicationListenerDetector +class spring.aop.LogInterceptor AOP 888888888888 +org.springframework.context.event.internalEventListenerProcessor AOP 6666666666666666 +对象:org.springframework.context.event.EventListenerMethodProcessor@45815ffc 的类型是:class org.springframework.context.event.EventListenerMethodProcessor +BeanPostProcessor列表: [org.springframework.context.support.ApplicationContextAwareProcessor@67b9b51a, org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker@10f7f7de, org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor@418c5a9c, org.springframework.context.annotation.ConfigurationClassPostProcessor$EnhancedConfigurationBeanPostProcessor@18e36d14, proxyTargetClass=false; optimize=false; opaque=false; exposeProxy=false; frozen=false, org.springframework.context.annotation.CommonAnnotationBeanPostProcessor@5a5338df, org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor@11f0a5a1, org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor@73a8da0f, org.springframework.context.support.PostProcessorRegistrationDelegate$ApplicationListenerDetector@141e5bef] +org.springframework.context.support.ApplicationContextAwareProcessor +org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker +org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor +org.springframework.context.annotation.ConfigurationClassPostProcessor$EnhancedConfigurationBeanPostProcessor +org.springframework.aop.aspectj.autoproxy.AspectJAwareAdvisorAutoProxyCreator +org.springframework.context.annotation.CommonAnnotationBeanPostProcessor +org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor +org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor +org.springframework.context.support.PostProcessorRegistrationDelegate$ApplicationListenerDetector +class org.springframework.context.event.EventListenerMethodProcessor AOP 888888888888 +org.springframework.context.event.internalEventListenerFactory AOP 6666666666666666 +对象:org.springframework.context.event.DefaultEventListenerFactory@732f29af 的类型是:class org.springframework.context.event.DefaultEventListenerFactory +BeanPostProcessor列表: [org.springframework.context.support.ApplicationContextAwareProcessor@67b9b51a, org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker@10f7f7de, org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor@418c5a9c, org.springframework.context.annotation.ConfigurationClassPostProcessor$EnhancedConfigurationBeanPostProcessor@18e36d14, proxyTargetClass=false; optimize=false; opaque=false; exposeProxy=false; frozen=false, org.springframework.context.annotation.CommonAnnotationBeanPostProcessor@5a5338df, org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor@11f0a5a1, org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor@73a8da0f, org.springframework.context.support.PostProcessorRegistrationDelegate$ApplicationListenerDetector@141e5bef] +org.springframework.context.support.ApplicationContextAwareProcessor +org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker +org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor +org.springframework.context.annotation.ConfigurationClassPostProcessor$EnhancedConfigurationBeanPostProcessor +org.springframework.aop.aspectj.autoproxy.AspectJAwareAdvisorAutoProxyCreator +org.springframework.context.annotation.CommonAnnotationBeanPostProcessor +org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor +org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor +org.springframework.context.support.PostProcessorRegistrationDelegate$ApplicationListenerDetector +class org.springframework.context.event.DefaultEventListenerFactory AOP 888888888888 +finishBeanFactoryInitialization 已注册14个bean定义: [calculator, logInterceptor, org.springframework.context.annotation.internalConfigurationAnnotationProcessor, org.springframework.context.annotation.internalAutowiredAnnotationProcessor, org.springframework.context.annotation.internalRequiredAnnotationProcessor, org.springframework.context.annotation.internalCommonAnnotationProcessor, org.springframework.context.event.internalEventListenerProcessor, org.springframework.context.event.internalEventListenerFactory, org.springframework.aop.config.internalAutoProxyCreator, org.springframework.aop.aspectj.AspectJPointcutAdvisor#0, org.springframework.aop.aspectj.AspectJPointcutAdvisor#1, logPointCut, org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor, org.springframework.context.annotation.ConfigurationClassPostProcessor.enhancedConfigurationProcessor] +spring.aop.CalculatorImp +spring.aop.LogInterceptor +org.springframework.context.annotation.ConfigurationClassPostProcessor +org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor +org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor +org.springframework.context.annotation.CommonAnnotationBeanPostProcessor +org.springframework.context.event.EventListenerMethodProcessor +org.springframework.context.event.DefaultEventListenerFactory +org.springframework.aop.aspectj.autoproxy.AspectJAwareAdvisorAutoProxyCreator +org.springframework.aop.aspectj.AspectJPointcutAdvisor +org.springframework.aop.aspectj.AspectJPointcutAdvisor +org.springframework.aop.aspectj.AspectJExpressionPointcut +org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor +org.springframework.context.annotation.ConfigurationClassPostProcessor$EnhancedConfigurationBeanPostProcessor +environment +systemProperties +systemEnvironment +org.springframework.context.annotation.internalConfigurationAnnotationProcessor +org.springframework.context.annotation.ConfigurationClassPostProcessor.importRegistry +org.springframework.context.annotation.internalAutowiredAnnotationProcessor +org.springframework.context.annotation.internalRequiredAnnotationProcessor +org.springframework.context.annotation.internalCommonAnnotationProcessor +org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor +org.springframework.context.annotation.ConfigurationClassPostProcessor.enhancedConfigurationProcessor +org.springframework.aop.config.internalAutoProxyCreator +messageSource +applicationEventMulticaster +org.springframework.aop.aspectj.AspectJPointcutAdvisor#0 +org.springframework.aop.aspectj.AspectJPointcutAdvisor#1 +calculator +logInterceptor +org.springframework.context.event.internalEventListenerProcessor +org.springframework.context.event.internalEventListenerFactory +对象类型: class com.sun.proxy.$Proxy23 +login start! +add 方法执行了 ----> 23 +login end! + + + + + System.out.println("pointcut id:" +id+", expression表达式:"+expression); +String[] beanNames = parserContext.getRegistry().getBeanDefinitionNames(); + System.out.println("已注册的bean定义: "+Arrays.asList(beanNames)); + //遍历IoC中BeanDefinition + Arrays.stream(beanNames).forEach(x -> System.out.println(beanFactory.getBeanDefinition(x).getBeanClassName())); + +String[] beanNames = beanFactory.getBeanDefinitionNames(); + String[] singletonObjects = beanFactory.getSingletonNames(); + //遍历IoC中BeanDefinition + Arrays.stream(beanNames).forEach(x -> System.out.println(beanFactory.getBeanDefinition(x).getBeanClassName())); + Arrays.stream(singletonObjects).forEach(x -> System.out.println(x)); + beanFactoryPostProcessors.forEach(item->{System.out.println("BeanFactoryPostProcessor: "+item);}); + +AspectJMethodBeforeAdvice,AspectJAfterAdvice, +AspectJAfterReturningAdvice,AspectJAfterThrowingAdvice +AspectJAroundAdvice + +AspectJPointcutAdvisor +AspectJExpressionPointcut + +new AspectComponentDefinition(aspectId, beanDefArray, beanRefArray, source) +new PointcutComponentDefinition(pointcutBeanName, pointcutDefinition, expression) + +org.springframework.aop.aspectj.AspectJPointcutAdvisor@6d7fc27 +org.springframework.aop.aspectj.AspectJMethodBeforeAdvice: advice method [public void spring.aop.LogInterceptor.before()]; aspect name 'logInterceptor' +ComposablePointcut: AspectJExpressionPointcut: () execution(* spring.aop.CalculatorImp.*(..)), org.springframework.aop.support.MethodMatchers$IntersectionMethodMatcher@f78f08d5 + + +/** + * Gets the advice implementation class corresponding to the supplied {@link Element}. + */ + private Class getAdviceClass(Element adviceElement, ParserContext parserContext) { + String elementName = parserContext.getDelegate().getLocalName(adviceElement); + if (BEFORE.equals(elementName)) { + return AspectJMethodBeforeAdvice.class; + } + else if (AFTER.equals(elementName)) { + return AspectJAfterAdvice.class; + } + else if (AFTER_RETURNING_ELEMENT.equals(elementName)) { + return AspectJAfterReturningAdvice.class; + } + else if (AFTER_THROWING_ELEMENT.equals(elementName)) { + return AspectJAfterThrowingAdvice.class; + } + else if (AROUND.equals(elementName)) { + return AspectJAroundAdvice.class; + } + else { + throw new IllegalArgumentException("Unknown advice kind [" + elementName + "]."); + } + } + + ClassPathBeanDefinitionScanner + + //注册公共性BeanDefinition(org.springframework.context.annotation.ConfigurationClassPostProcessor +org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor +org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor +org.springframework.context.annotation.CommonAnnotationBeanPostProcessor +org.springframework.context.event.EventListenerMethodProcessor +org.springframework.context.event.DefaultEventListenerFactory,可选PersistenceAnnotationBeanPostProcessor) + + BeanDefinition org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(Element ele, BeanDefinition containingBd) + BeanDefinition org.springframework.context.annotation.ComponentScanBeanDefinitionParser.parse(Element element, ParserContext parserContext) + + void org.springframework.context.annotation.ComponentScanBeanDefinitionParser.registerComponents(XmlReaderContext readerContext, Set beanDefinitions, Element element) + Set org.springframework.context.annotation.AnnotationConfigUtils.registerAnnotationConfigProcessors(BeanDefinitionRegistry registry, Object source) + + public class AnnotationConfigUtils { + + /** + * The bean name of the internally managed Configuration annotation processor. + */ + public static final String CONFIGURATION_ANNOTATION_PROCESSOR_BEAN_NAME = + "org.springframework.context.annotation.internalConfigurationAnnotationProcessor"; + + /** + * The bean name of the internally managed BeanNameGenerator for use when processing + * {@link Configuration} classes. Set by {@link AnnotationConfigApplicationContext} + * and {@code AnnotationConfigWebApplicationContext} during bootstrap in order to make + * any custom name generation strategy available to the underlying + * {@link ConfigurationClassPostProcessor}. + * @since 3.1.1 + */ + public static final String CONFIGURATION_BEAN_NAME_GENERATOR = + "org.springframework.context.annotation.internalConfigurationBeanNameGenerator"; + + /** + * The bean name of the internally managed Autowired annotation processor. + */ + public static final String AUTOWIRED_ANNOTATION_PROCESSOR_BEAN_NAME = + "org.springframework.context.annotation.internalAutowiredAnnotationProcessor"; + + /** + * The bean name of the internally managed Required annotation processor. + */ + public static final String REQUIRED_ANNOTATION_PROCESSOR_BEAN_NAME = + "org.springframework.context.annotation.internalRequiredAnnotationProcessor"; + + /** + * The bean name of the internally managed JSR-250 annotation processor. + */ + public static final String COMMON_ANNOTATION_PROCESSOR_BEAN_NAME = + "org.springframework.context.annotation.internalCommonAnnotationProcessor"; + + /** + * The bean name of the internally managed JPA annotation processor. + */ + public static final String PERSISTENCE_ANNOTATION_PROCESSOR_BEAN_NAME = + "org.springframework.context.annotation.internalPersistenceAnnotationProcessor"; + + + private static final String PERSISTENCE_ANNOTATION_PROCESSOR_CLASS_NAME = + "org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"; + + /** + * The bean name of the internally managed @EventListener annotation processor. + */ + public static final String EVENT_LISTENER_PROCESSOR_BEAN_NAME = + "org.springframework.context.event.internalEventListenerProcessor"; + + /** + * The bean name of the internally managed EventListenerFactory. + */ + public static final String EVENT_LISTENER_FACTORY_BEAN_NAME = + "org.springframework.context.event.internalEventListenerFactory"; + + private static final boolean jsr250Present = + ClassUtils.isPresent("javax.annotation.Resource", AnnotationConfigUtils.class.getClassLoader()); + + private static final boolean jpaPresent = + ClassUtils.isPresent("javax.persistence.EntityManagerFactory", AnnotationConfigUtils.class.getClassLoader()) && + ClassUtils.isPresent(PERSISTENCE_ANNOTATION_PROCESSOR_CLASS_NAME, AnnotationConfigUtils.class.getClassLoader()); + + org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator$BeanFactoryAdvisorRetrievalHelperAdapter@232a7d73 +[org.springframework.aop.aspectj.AspectJPointcutAdvisor#0, org.springframework.aop.aspectj.AspectJPointcutAdvisor#1] +[org.springframework.aop.aspectj.AspectJPointcutAdvisor@6d7fc27, org.springframework.aop.aspectj.AspectJPointcutAdvisor@6d7fc27] +java.util.LinkedList$Node@33b1c5c5 +org.springframework.aop.aspectj.AspectJPointcutAdvisor@6d7fc27 +org.springframework.aop.aspectj.AspectJMethodBeforeAdvice: advice method [public void spring.aop.LogInterceptor.before()]; aspect name 'logInterceptor' +null +null +false +org.springframework.aop.config.SimpleBeanFactoryAwareAspectInstanceFactory@4b41e4dd +public void spring.aop.LogInterceptor.before() +logInterceptor +7 +class spring.aop.LogInterceptor +null +class java.lang.Object +class java.lang.Object +-1 +-1 +before +[] +AspectJExpressionPointcut: () execution(* spring.aop.CalculatorImp.*(..)) +null +null +null +ComposablePointcut: AspectJExpressionPointcut: () execution(* spring.aop.CalculatorImp.*(..)), org.springframework.aop.support.MethodMatchers$IntersectionMethodMatcher@f78f08d5 +AspectJExpressionPointcut: () execution(* spring.aop.CalculatorImp.*(..)) +org.springframework.aop.support.MethodMatchers$IntersectionMethodMatcher@f78f08d5 +org.springframework.aop.aspectj.AbstractAspectJAdvice$AdviceExcludingMethodMatcher@b5111031 +AspectJExpressionPointcut: () execution(* spring.aop.CalculatorImp.*(..)) +java.util.LinkedList$Node@4372b9b6 +org.springframework.aop.aspectj.AspectJPointcutAdvisor@6d7fc27 +null +java.util.LinkedList$Node@33b1c5c5 +null +java.util.LinkedList$Node@4372b9b6 +2 +2 \ No newline at end of file diff --git a/spring/springmvc.png b/spring/springmvc.png new file mode 100644 index 0000000..a5a35a3 Binary files /dev/null and b/spring/springmvc.png differ diff --git "a/spring/spring\345\206\205\345\271\225/0.png" "b/spring/spring\345\206\205\345\271\225/0.png" new file mode 100644 index 0000000..57feaff Binary files /dev/null and "b/spring/spring\345\206\205\345\271\225/0.png" differ diff --git "a/spring/spring\345\206\205\345\271\225/1.png" "b/spring/spring\345\206\205\345\271\225/1.png" new file mode 100644 index 0000000..32f1cd2 Binary files /dev/null and "b/spring/spring\345\206\205\345\271\225/1.png" differ diff --git "a/spring/spring\345\206\205\345\271\225/10.png" "b/spring/spring\345\206\205\345\271\225/10.png" new file mode 100644 index 0000000..e1bcde3 Binary files /dev/null and "b/spring/spring\345\206\205\345\271\225/10.png" differ diff --git "a/spring/spring\345\206\205\345\271\225/11.png" "b/spring/spring\345\206\205\345\271\225/11.png" new file mode 100644 index 0000000..6b1c4fc Binary files /dev/null and "b/spring/spring\345\206\205\345\271\225/11.png" differ diff --git "a/spring/spring\345\206\205\345\271\225/2.png" "b/spring/spring\345\206\205\345\271\225/2.png" new file mode 100644 index 0000000..8c06fbc Binary files /dev/null and "b/spring/spring\345\206\205\345\271\225/2.png" differ diff --git "a/spring/spring\345\206\205\345\271\225/3.png" "b/spring/spring\345\206\205\345\271\225/3.png" new file mode 100644 index 0000000..24f1168 Binary files /dev/null and "b/spring/spring\345\206\205\345\271\225/3.png" differ diff --git "a/spring/spring\345\206\205\345\271\225/3be455aa812c8f072769ead2e09935c9.jpg" "b/spring/spring\345\206\205\345\271\225/3be455aa812c8f072769ead2e09935c9.jpg" new file mode 100644 index 0000000..a91ce1d Binary files /dev/null and "b/spring/spring\345\206\205\345\271\225/3be455aa812c8f072769ead2e09935c9.jpg" differ diff --git "a/spring/spring\345\206\205\345\271\225/4.png" "b/spring/spring\345\206\205\345\271\225/4.png" new file mode 100644 index 0000000..543bf56 Binary files /dev/null and "b/spring/spring\345\206\205\345\271\225/4.png" differ diff --git "a/spring/spring\345\206\205\345\271\225/5.png" "b/spring/spring\345\206\205\345\271\225/5.png" new file mode 100644 index 0000000..00319a3 Binary files /dev/null and "b/spring/spring\345\206\205\345\271\225/5.png" differ diff --git "a/spring/spring\345\206\205\345\271\225/6.png" "b/spring/spring\345\206\205\345\271\225/6.png" new file mode 100644 index 0000000..112bb1f Binary files /dev/null and "b/spring/spring\345\206\205\345\271\225/6.png" differ diff --git "a/spring/spring\345\206\205\345\271\225/7.png" "b/spring/spring\345\206\205\345\271\225/7.png" new file mode 100644 index 0000000..27412f0 Binary files /dev/null and "b/spring/spring\345\206\205\345\271\225/7.png" differ diff --git "a/spring/spring\345\206\205\345\271\225/8.png" "b/spring/spring\345\206\205\345\271\225/8.png" new file mode 100644 index 0000000..3efa3d1 Binary files /dev/null and "b/spring/spring\345\206\205\345\271\225/8.png" differ diff --git "a/spring/spring\345\206\205\345\271\225/9.png" "b/spring/spring\345\206\205\345\271\225/9.png" new file mode 100644 index 0000000..bcf81bc Binary files /dev/null and "b/spring/spring\345\206\205\345\271\225/9.png" differ diff --git "a/spring/spring\345\206\205\345\271\225/Advice.png" "b/spring/spring\345\206\205\345\271\225/Advice.png" new file mode 100644 index 0000000..23a5f68 Binary files /dev/null and "b/spring/spring\345\206\205\345\271\225/Advice.png" differ diff --git "a/spring/spring\345\206\205\345\271\225/Advisor-Pointcut-Advice.png" "b/spring/spring\345\206\205\345\271\225/Advisor-Pointcut-Advice.png" new file mode 100644 index 0000000..9a04973 Binary files /dev/null and "b/spring/spring\345\206\205\345\271\225/Advisor-Pointcut-Advice.png" differ diff --git "a/spring/spring\345\206\205\345\271\225/Advisor.png" "b/spring/spring\345\206\205\345\271\225/Advisor.png" new file mode 100644 index 0000000..a16745a Binary files /dev/null and "b/spring/spring\345\206\205\345\271\225/Advisor.png" differ diff --git "a/spring/spring\345\206\205\345\271\225/ApplicationContext .jpg" "b/spring/spring\345\206\205\345\271\225/ApplicationContext .jpg" new file mode 100644 index 0000000..f8ba432 Binary files /dev/null and "b/spring/spring\345\206\205\345\271\225/ApplicationContext .jpg" differ diff --git "a/spring/spring\345\206\205\345\271\225/BeanFactory .jpg" "b/spring/spring\345\206\205\345\271\225/BeanFactory .jpg" new file mode 100644 index 0000000..4bcb586 Binary files /dev/null and "b/spring/spring\345\206\205\345\271\225/BeanFactory .jpg" differ diff --git "a/spring/spring\345\206\205\345\271\225/BeanFactory.jpg" "b/spring/spring\345\206\205\345\271\225/BeanFactory.jpg" new file mode 100644 index 0000000..cad5cef Binary files /dev/null and "b/spring/spring\345\206\205\345\271\225/BeanFactory.jpg" differ diff --git "a/spring/spring\345\206\205\345\271\225/Pointcut.png" "b/spring/spring\345\206\205\345\271\225/Pointcut.png" new file mode 100644 index 0000000..c1bf561 Binary files /dev/null and "b/spring/spring\345\206\205\345\271\225/Pointcut.png" differ diff --git "a/spring/spring\345\206\205\345\271\225/PostProcessor.png" "b/spring/spring\345\206\205\345\271\225/PostProcessor.png" new file mode 100644 index 0000000..7ab80cd Binary files /dev/null and "b/spring/spring\345\206\205\345\271\225/PostProcessor.png" differ diff --git "a/spring/spring\345\206\205\345\271\225/QQ\345\233\276\347\211\20720200501155223.png" "b/spring/spring\345\206\205\345\271\225/QQ\345\233\276\347\211\20720200501155223.png" new file mode 100644 index 0000000..8525e6f Binary files /dev/null and "b/spring/spring\345\206\205\345\271\225/QQ\345\233\276\347\211\20720200501155223.png" differ diff --git "a/spring/spring\345\206\205\345\271\225/aop-aspect.png" "b/spring/spring\345\206\205\345\271\225/aop-aspect.png" new file mode 100644 index 0000000..b75f0db Binary files /dev/null and "b/spring/spring\345\206\205\345\271\225/aop-aspect.png" differ diff --git "a/spring/spring\345\206\205\345\271\225/spring-aop-1024x683.png" "b/spring/spring\345\206\205\345\271\225/spring-aop-1024x683.png" new file mode 100644 index 0000000..9630a5b Binary files /dev/null and "b/spring/spring\345\206\205\345\271\225/spring-aop-1024x683.png" differ diff --git a/tomcat/.classpath b/tomcat/.classpath new file mode 100644 index 0000000..add46bf --- /dev/null +++ b/tomcat/.classpath @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/tomcat/.project b/tomcat/.project new file mode 100644 index 0000000..6b2605a --- /dev/null +++ b/tomcat/.project @@ -0,0 +1,17 @@ + + + tomcat + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/tomcat/.settings/org.eclipse.jdt.core.prefs b/tomcat/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..a698e59 --- /dev/null +++ b/tomcat/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,12 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8