博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于@Configuration和@Bean的新发现
阅读量:5743 次
发布时间:2019-06-18

本文共 1112 字,大约阅读时间需要 3 分钟。

hot3.png

今天在配置spring的调度器的时候,意外的发现带有@Configuration注解的类中的方法,如果该方法需要调用另外一个方法获取返回值,且被调用的方法上带有@Bean注解的话,spring框架会优先从容器中获取该bean实例来替代返回值。初步猜测是由org.springframework.context.annotation.ConfigurationClassEnhancer这个类,依靠CGLIB实现这个功能的。

代码如下:

@Configurationpublic 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);	}}
@SpringBootApplicationpublic 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));	}}

输出结果显示如下:

175439_NZA9_2624635.png

好神奇,taskExecutor()方法只被调用了一次。

spring好强大,先记录下来,日后好好研究原理。

转载于:https://my.oschina.net/lixin91/blog/613127

你可能感兴趣的文章
iOS 高性能异构滚动视图构建方案 —— LazyScrollView
查看>>
Java 重载、重写、构造函数详解
查看>>
【Best Practice】基于阿里云数加·StreamCompute快速构建网站日志实时分析大屏
查看>>
【云栖大会】探索商业升级之路
查看>>
HybridDB实例新购指南
查看>>
C语言及程序设计提高例程-35 使用指针操作二维数组
查看>>
华大基因BGI Online的云计算实践
查看>>
深入理解自定义Annotation,实现ButterKnif小原理
查看>>
排序高级之交换排序_冒泡排序
查看>>
Cocos2d-x3.2 Ease加速度
查看>>
[EntLib]关于SR.Strings的使用办法[加了下载地址]
查看>>
中小型网站架构分析及优化
查看>>
写shell的事情
查看>>
负载均衡之Haproxy配置详解(及httpd配置)
查看>>
linux虚拟机拷贝之后联网出错
查看>>
Linux文件系统探索
查看>>
标准与扩展ACL 、 命名ACL 、 总结和答疑
查看>>
查找恶意的TOR中继节点
查看>>
MAVEN 属性定义与使用
查看>>
hadoop2.7.2 HA搭建
查看>>