Spring annotation 提供 @autowired,可以使我们通过注解的方式进行依赖注入,但是这种注入方式比较麻烦,只能逐个注入,没有实现xml配置的 autowire 自动注入功能。
我偶然看到 http://www.iteye.com/topic/263895 实现了 @GlobalAutowired ,我猜想这个 annotation 可以实现对某个类的所有 filed 进行注入。我也尝试的简单实现了一个,下面先看看这个 @GlobalAutowired 使用方法:
@GlobalAutowired
public PersonManager{
private PersonDao personDao;
public List list(){
return personDao.list();
}
}
在 class 上声明 @GlobalAutowired 使得 spring 能够自动注入 personDao。
/**
* 全局自动注入 annotation
* @author auauau
*
*/
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface GlobalAutowired {
}
下面看一下处理类
/**
* 对 classes 中的 field 实现注入
* 目前只实现根据名称注入
* @author auauau
*
*/
@Component
public class GlobalAutowiredAnnotationBeanPostProcessor extends InitDestroyAnnotationBeanPostProcessor implements InstantiationAwareBeanPostProcessor, BeanFactoryAware {
private ConfigurableListableBeanFactory beanFactory;
public Object postProcessBeforeInstantiation(Class beanClass,String beanName) throws BeansException {
return null;
}
public PropertyValues postProcessPropertyValues(PropertyValues pvs,PropertyDescriptor[] pds, Object bean, String beanName) throws BeansException {
return pvs;
}
/**
* 处理GlobeAutowired
*/
public boolean postProcessAfterInstantiation(Object bean, String beanName)
throws BeansException {
if (bean.getClass().isAnnotationPresent(GlobalAutowired.class)) {
Field[] fields = bean.getClass().getDeclaredFields(); //通过反射取得类中的field
for (Field field : fields) {
Object o = beanFactory.getBean(field.getName()); //从beanFactory中取得bean
if (o != null) {
field.setAccessible(true);
try {
field.set(bean, o); //注入
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
return true;
}
/**
* 设定 beanFactory
*/
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
if (!(beanFactory instanceof ConfigurableListableBeanFactory)) {
throw new IllegalArgumentException(
"GlobeAutowiredAnnotationBeanPostProcessor requires a ConfigurableListableBeanFactory");
}
this.beanFactory = (ConfigurableListableBeanFactory) beanFactory;
}
}
这个处理类通过反射的方式进行注入。目前仅仅实现了按名称注入(byName),还可以进一步扩展,实现按类型注入(byType)。
分享到:
相关推荐
基于Comsol的多物理场仿真:单相变压器绕组及铁芯振动形变分析模型,有限元仿真模型四:基于comsol的单相变压器绕组及铁芯振动形变仿真模型 1、单相变压器绕组振动形变模型:绕组在漏磁场的洛伦兹力作用下振动,在长期作用下发生位移形变 2、单相变压器铁芯振动形变模型:铁芯在磁致伸缩作用下发生振动形变 注:时域仿真可以设置观察点,导出随时间变化的变压器磁通、位移、压力、形变曲线 ,基于Comsol的仿真模型;单相变压器绕组振动形变;铁芯磁致伸缩形变;时域仿真观察点。,基于Comsol的变压器绕组铁芯振动形变仿真模型
基于Comsol的变压器热流耦合非等温流多物理场仿真计算模型,精准获取温度、速度及压力分布真实计算模型与服务,Comsol变压器热流耦合温度场仿真计算模型,采用温度场和流体场耦合非等温流多物理场进行计算,可以得到计算模型的温度、速度和压力分布,提供真实的计算模型和服务, ,核心关键词:Comsol变压器;热流耦合;温度场仿真;非等温流多物理场计算;温度、速度、压力分布;真实计算模型;服务。,COMSOL变压器多物理场耦合温度场仿真模型
基于改进MSR的小波变换图像增强算法.pdf
Comsol能带理论解析教程视频:深入理解电子结构与传输机制,Comsol能带理论教程视频 ,Comsol; 能带理论; 教程视频; 理论教程; 视频教程,Comsol能带理论教程视频:深度解析与应用实例
基于精准碰撞检测算法的机械臂避障轨迹规划.pdf
基于三菱PLC的组态王大小球分练系统设计与程序图纸说明文档,基于三菱 组态王PLC 大小球分练系统设计(程序图纸说明文档) ,基于三菱;组态王PLC;大小球分练系统设计;程序图纸说明文档。,三菱PLC驱动大小球分练系统设计程序图纸说明
国际象棋中马的周游路线问题新解法.pdf
COMSOL软件多物理场仿真教程:电热力耦合传热及微波加热优化实践,comsol软件教程,电热力耦合,动网格,传热,优化,微波加热,压电(非comsol官网搬运) comsol仿真教程,多物理场,建模仿真,低频电磁 ,comsol软件教程; 电热力耦合; 动网格; 传热; 优化; 微波加热; 压电; 多物理场; 建模仿真; 低频电磁,《Comsol软件教程:多物理场仿真与电热力耦合优化》
图书推荐系统 免费JAVA毕业设计 2024成品源码+论文+录屏+启动教程 启动教程:https://www.bilibili.com/video/BV1jKDjYrEz1 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
一类二阶欠驱动系统的自适应有限时间滑模控制.pdf
COMSOL锌沉积溶解模型的研究与应用,comsol锌沉积溶解模型 ,comsol;锌沉积;溶解模型;电化学模拟;物理化学过程。,COMSOL锌沉积溶解模型
电压电阻转换模块
蜀味道江湖餐饮管理系统小程序 免费JAVA毕业设计 2024成品源码+论文+录屏+启动教程 启动教程:https://www.bilibili.com/video/BV1jKDjYrEz1 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
外卖点餐系统 免费JAVA毕业设计 2024成品源码+论文+录屏+启动教程 启动教程:https://www.bilibili.com/video/BV1jKDjYrEz1 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
触宝输入法Go版_6.2.6.7.apk
"COMSOL六角蜂窝光子晶体高对称路径与K空间能带仿真研究:双模型出图与MATLAB脚本实现",comsol六角蜂窝光子晶体能带仿真 高对称路径+k空间,含两个仿真模型和一个k空间能带图出图matlab脚本 comsol光学仿真 ,comsol;六角蜂窝光子晶体;能带仿真;高对称路径;k空间;仿真模型;出图matlab脚本;comsol光学仿真,基于Comsol的光子晶体六角蜂窝结构能带仿真与k空间分析
C#标签打印控制程序源代码,自定义二次开发功能强大的条形码及二维码编辑系统,标签打印C#控制程序源代码,适合自己进行二次开发。 软件可以自己编辑标签,可以自动条形码或二维码的位置。 ,标签打印; C#控制程序; 二次开发; 编辑标签; 自动条形码或二维码。,C#标签打印控制程序源代码,支持二次开发与自定义编辑条码二维码
"COMSOL仿真研究:煤体钻孔周围损伤变形及其对温度场、渗流扩散场的影响",COMSOL实现煤体钻孔周围损伤变形。 该案列考虑温度场和渗流扩散场对损伤影响,介绍钻孔周围损伤分布、损伤后瓦斯压力分布,可分析损伤后渗透率应力等 ,COMSOL;煤体钻孔;损伤变形;温度场;渗流扩散场;损伤分布;瓦斯压力分布;损伤后渗透率应力,COMSOL模拟煤体钻孔损伤变形:考虑温度与渗流场影响
"COMSOL气体放电仿真模型:流注放电现象研究,棒-板电极模型下的等离子体粒子化学反应模拟,包含33个反应式,多参数分析电场与等离子体特性",COMSOL气体放电仿真模型(流注放电),棒——板电极模型,模拟空气中流注发展过程,等离子体粒子化学反应模型,包含33个反应式,可分析电场强度,电子密度,电子温度等多个参数的变化。 ,核心关键词:COMSOL气体放电仿真模型; 流注放电; 棒-板电极模型; 空气流注发展; 等离子体粒子化学反应模型; 反应式; 电场强度; 电子密度; 电子温度。,COMSOL气体放电仿真:流注放电与等离子体特性分析模型
《考虑瓦斯吸热效应的流固耦合三维瓦斯抽采模拟技术——基于煤体变形与钻孔间距优化研究》,comsol瓦斯抽采数值模拟,煤体变形耦合瓦斯抽采,钻孔间距为流固耦合模型,三维瓦斯抽采为考虑瓦斯吸热效应热流固耦合。 ,核心关键词:comsol瓦斯抽采模拟; 煤体变形与瓦斯耦合; 钻孔间距; 流固耦合模型; 三维瓦斯抽采; 瓦斯吸热效应热流固耦合。,热流固耦合模型下瓦斯抽采的数值模拟研究