@Autowire原理分析
源码如下:
public static void main(String[] args) {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();context.scan("service");context.refresh();for (String s : context.getBeanDefinitionNames()) {System.out.println(s);}UserService userService = (UserService) context.getBean("userService");userService.printUser();}@Servicepublic class UserService {@Autowiredprivate AuthService authService;public void printUser(){System.out.println("user:1");}}@Servicepublic class AuthService {public void login(){System.out.println("login");}}
分析@Autowired:
点击注解查看注解源码:
@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Autowired {/*** Declares whether the annotated dependency is required.* <p>Defaults to {@code true}.*/boolean required() default true;
}
点击Autowired
类可以看到:AutowiredAnnotationBeanPostProcessor
进入自动注入的初始化元数据方法postProcessMergedBeanDefinition()
,
@Overridepublic void postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, Class<?> beanType, String beanName) {if (beanType != null) {搜索每个Bean内@Autowired注解的信息InjectionMetadata metadata = findAutowiringMetadata(beanName, beanType, null);metadata.checkConfigMembers(beanDefinition);}}
注入操作,在bean的实例化之后,调用postProcessPropertyValues()方法
public PropertyValues postProcessPropertyValues(PropertyValues pvs, PropertyDescriptor[] pds, Object bean, String beanName) throws BeanCreationException {InjectionMetadata metadata = findAutowiringMetadata(beanName, bean.getClass(), pvs);try {metadata.inject(bean, beanName, pvs);}catch (BeanCreationException ex) {throw ex;}catch (Throwable ex) {throw new BeanCreationException(beanName, "Injection of autowired dependencies failed", ex);}return pvs;}
@Autowire原理分析相关推荐
- Java程序员进阶——Spring依赖注入原理分析
Spring依赖注入原理分析 下面谈谈Spring是如何实现反转模式IOC或依赖注入模式DI: 平时,我们需要生成一个对象,使用new语法,如一个类为A public class A{public v ...
- MyBatis(五)MyBatis整合Spring原理分析
前面梳理了下MyBatis在单独使用时的工作流程和关键源码,现在看看MyBatis在和Spring整合的时候是怎么工作的 也先从使用开始 Spring整合MyBatis 1.引入依赖,除了MyBati ...
- MyBatis整合Spring原理分析
目录 MyBatis整合Spring原理分析 MapperScan的秘密 简单总结 假如不结合Spring框架,我们使用MyBatis时的一个典型使用方式如下: public class UserDa ...
- java signature 性能_Java常见bean mapper的性能及原理分析
背景 在分层的代码架构中,层与层之间的对象避免不了要做很多转换.赋值等操作,这些操作重复且繁琐,于是乎催生出很多工具来优雅,高效地完成这个操作,有BeanUtils.BeanCopier.Dozer. ...
- Select函数实现原理分析
转载自 http://blog.chinaunix.net/uid-20643761-id-1594860.html select需要驱动程序的支持,驱动程序实现fops内的poll函数.select ...
- spring ioc原理分析
spring ioc原理分析 spring ioc 的概念 简单工厂方法 spirng ioc实现原理 spring ioc的概念 ioc: 控制反转 将对象的创建由spring管理.比如,我们以前用 ...
- 一次 SQL 查询优化原理分析(900W+ 数据,从 17s 到 300ms)
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:Muscleape jianshu.com/p/0768eb ...
- 原理分析_变色近视眼镜原理分析
随着眼镜的发展,眼镜的外型变得越来越好看,并且眼镜的颜色也变得多姿多彩,让佩戴眼镜的你变得越来越时尚.变色近视眼镜就是由此产生的新型眼镜.变色镜可以随着阳光的强弱变换不同的色彩. 变色眼镜的原理分析 ...
- jieba分词_从语言模型原理分析如何jieba更细粒度的分词
jieba分词是作中文分词常用的一种工具,之前也记录过源码及原理学习.但有的时候发现分词的结果并不是自己最想要的.比如分词"重庆邮电大学",使用精确模式+HMM分词结果是[&quo ...
最新文章
- 2432功率计使用说明_为什么说功率计是自行车开挂神器?
- Flutter开发环境安装
- coding pages绑定freenom.com域名
- Visual Basic、C# 和 C++ 的数据类型比较(转)
- [TJOI2017]城市(未解决)
- [html] html标签的属性值是否可以省略引号?为什么?
- oracle asm ora 15041,ORA-15041,ORA-01274 故障解决实例
- 设计模式学习-简单工厂模式
- 申请一个公网ip多少钱_申请1个条形码多少钱?小作坊如何申请条形码?
- step 7在win10上安装教程及安装包
- cs 61c学习总结
- Python网络爬虫:空姐网、糗百、xxx结果图与源码
- centos7.6 安装docker
- matlab 理论力学,MATLAB理论力学/高等学校教材
- JavaScript 每日一题---LeetCode 122. 买卖股票的最佳时机 II
- [笑话] 有关本人现在是独身的消息不甚走漏
- SNOI2018 滚粗记
- python微信公众号翻译功能怎么用_使用python一步一步搭建微信公众平台(二)----搭建一个中英互译的翻译工具...
- Halcon图像预处理-感兴趣区域(ROI)
- IDEA license server 地址