关于@Configuration和@Bean的新发现
2016-02-02 00:00
197 查看
今天在配置spring的调度器的时候,意外的发现带有@Configuration注解的类中的方法,如果该方法需要调用另外一个方法获取返回值,且被调用的方法上带有@Bean注解的话,spring框架会优先从容器中获取该bean实例来替代返回值。初步猜测是由org.springframework.context.annotation.ConfigurationClassEnhancer这个类,依靠CGLIB实现这个功能的。
代码如下:
输出结果显示如下:
好神奇,taskExecutor()方法只被调用了一次。
spring好强大,先记录下来,日后好好研究原理。
代码如下:
@Configuration public class Configurer implements SchedulingConfigurer { @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { Object taskExecutor = taskExecutor(); System.err.println(System.identityHashCode(taskExecutor)); taskRegistrar.setScheduler(taskExecutor); } @Bean(name="taskExecutor",destroyMethod="shutdown") public Object taskExecutor() { System.err.println(getClass().getName()); System.err.println("方法被调用"); return Executors.newScheduledThreadPool(20); } }
@SpringBootApplication public class Application { public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(Application.class, args); Object bean = context.getBean("taskExecutor"); System.err.println(System.identityHashCode(bean)); } }
输出结果显示如下:
好神奇,taskExecutor()方法只被调用了一次。
spring好强大,先记录下来,日后好好研究原理。
相关文章推荐
- Android 判断签名MD5——JNI实现
- nginx源码修改之stub_status
- Mac PHP连接MySQL报错"No such file or directory"
- 浅谈Android五大布局——LinearLayout、FrameLayout和AbsoulteLa
- java.lang.*不用我们导入,编译器会自动给我们导入的,,,这个包是默认导入的。
- [深入理解Android卷一全文-第八章]深入理解Surface系统
- OpenGL ES之GLSurfaceView学习一:介绍
- 爬取贴吧帖子
- 常用脚本之本件
- 常用脚本文件之批处理
- ABBYY FineReader 12完整功能列表汇总(二)
- 设置SVN忽略文件和目录(文件夹)
- how to check logcat by specify tag
- mongodb 3.0 使用mongodump、mongorestore数据迁移
- gatling简单使用说明
- CentOS 6.6 内核升级
- 企业网盘不仅只是存储
- 可视化java jvm
- Java 实现动态代理实现AOP
- 我被Java包装类教育了(Long和Integer)