AutowireCapableBeanFactory源码详解
一、概述
对于想要拥有自动装配能力,并且想要把这种能力暴露给外部应用BeanFactory类需要实现此接口。
正常情况下不要使用此接口,应该更倾向于使用BeanFactory或者ListableBeanFactory接口。
此接口主要是针对框架之外,没有向Spring托管的Bean的应用。通过暴露此功能,Spring框架之外的程序,具有自动装配Spring的功能
需要注意的是ApplicationContext并没有实现此接口。因为应用代码很少使用此功能。如果确实需要的话可以调用ApplicationContext.getAutowireCapableBeanFactory()的方法,来获取此接口的实例
如果一个类实现了此接口,那么很大程度上它还需要实现BeanFactoryWare接口。它可以在应用上下文中返回BeanFactory;
四个常量
int AUTOWIRE_NO = 0; 常量,用于标识外部自动装配功能是否可用。但是此标识不影响正常的(基于注解的等)自动装配功能的使用
int AUTOWIRE_BY_NAME = 1; 标识按名装配的常量
int AUTOWIRE_BY_TYPE = 2;标识按类型自动装配的常量
int AUTOWIRE_CONSTRCTOR = 3;标识按照贪婪策略匹配出的最符合的构造方法来自动装配的常量
int AUTOwIRE_DETECTE = 4;标识自动识别一种装配策略来实现自动装配的常量
创建一个给定Class的实例。
<T> T createBean(Class<T> beanClass) throws BeansException;
通过调用给定Bean的after-instantiation及post-processing接口,对bean进行配置。
void autowireBean(Object existingBean) throws BeansException;
配置参数中指定的bean,包括自动装配其域,对其应用如setBeanName功能的回调函数。
Object configureBean(Object existingBean, String beanName) throws BeansException;
创建一个指定class的实例,通过参数可以指定其自动装配模式(by-name or by-type).
Object createBean(Class<?> beanClass, int autowireMode, boolean dependencyCheck) throws BeansException;
通过指定的自动装配策略来初始化一个Bean。
Object autowire(Class<?> beanClass, int autowireMode, boolean dependencyCheck) throws BeansException;
通过指定的自动装配方式来对给定的Bean进行自动装配。
void autowireBeanProperties(Object existingBean, int autowireMode, boolean dependencyCheck) throws BeansException;
将参数中指定了那么的Bean,注入给定实例当中
void applyBeanPropertyValues(Object existingBean, String beanName) throws BeansException;
初始化参数中指定的Bean,调用任何其注册的回调函数如setBeanName、setBeanFactory等。
Object initializeBean(Object existingBean, String beanName) throws BeansException;
调用参数中指定Bean的postProcessBeforeInitialization方法
Object applyBeanPostProcessorsBeforeInitialization(Object existingBean, String beanName) throws BeansException
调用参数中指定Bean的postProcessAfterInitialization方法
Object applyBeanPostProcessorsAfterInitialization(Object existingBean, String beanName) throws BeansException;
void destroyBean(Object existingBean);销毁参数中指定的Bean,同时调用此Bean上的DisposableBean和DestructionAwareBeanPostProcessors方法
<T> NamedBeanHolder<T> resolveNamedBean(Class<T> requiredType) throws BeansException;销毁参数中指定的Bean,同时调用此Bean上的DisposableBean和DestructionAwareBeanPostProcessors方法
Object resolveDependency(DependencyDescriptor descriptor, String requestingBeanName) throws BeansException; 查找唯一符合指定类的实例,如果有,则返回实例的名字和实例本身
Object resolveDependency(DependencyDescriptor descriptor, String requestingBeanName, 解析出在Factory中与指定Bean有指定依赖关系的Bean
Set<String> autowiredBeanNames, TypeConverter typeConverter) throws BeansException; 解析指定Bean在Factory中的依赖关系
AutowireCapableBeanFactory源码详解的更多相关文章
- Spark Streaming揭秘 Day25 StreamingContext和JobScheduler启动源码详解
Spark Streaming揭秘 Day25 StreamingContext和JobScheduler启动源码详解 今天主要理一下StreamingContext的启动过程,其中最为重要的就是Jo ...
- spring事务详解(三)源码详解
系列目录 spring事务详解(一)初探事务 spring事务详解(二)简单样例 spring事务详解(三)源码详解 spring事务详解(四)测试验证 spring事务详解(五)总结提高 一.引子 ...
- 条件随机场之CRF++源码详解-预测
这篇文章主要讲解CRF++实现预测的过程,预测的算法以及代码实现相对来说比较简单,所以这篇文章理解起来也会比上一篇条件随机场训练的内容要容易. 预测 上一篇条件随机场训练的源码详解中,有一个地方并没有 ...
- [转]Linux内核源码详解--iostat
Linux内核源码详解——命令篇之iostat 转自:http://www.cnblogs.com/york-hust/p/4846497.html 本文主要分析了Linux的iostat命令的源码, ...
- saltstack源码详解一
目录 初识源码流程 入口 1.grains.items 2.pillar.items 2/3: 是否可以用python脚本实现 总结pillar源码分析: @(python之路)[saltstack源 ...
- Shiro 登录认证源码详解
Shiro 登录认证源码详解 Apache Shiro 是一个强大且灵活的 Java 开源安全框架,拥有登录认证.授权管理.企业级会话管理和加密等功能,相比 Spring Security 来说要更加 ...
- udhcp源码详解(五) 之DHCP包--options字段
中间有很长一段时间没有更新udhcp源码详解的博客,主要是源码里的函数太多,不知道要不要一个一个讲下去,要知道讲DHCP的实现理论的话一篇博文也就可以大致的讲完,但实现的源码却要关心很多的问题,比如说 ...
- Activiti架构分析及源码详解
目录 Activiti架构分析及源码详解 引言 一.Activiti设计解析-架构&领域模型 1.1 架构 1.2 领域模型 二.Activiti设计解析-PVM执行树 2.1 核心理念 2. ...
- 源码详解系列(六) ------ 全面讲解druid的使用和源码
简介 druid是用于创建和管理连接,利用"池"的方式复用连接减少资源开销,和其他数据源一样,也具有连接数控制.连接可靠性测试.连接泄露控制.缓存语句等功能,另外,druid还扩展 ...
随机推荐
- 事件冒泡的应用——jq on的实现
曾对jQuery中on的实现有所疑问,一直没有找到合适的实现方法,今日看<javascript高级程序设计>中的事件冒泡有了些思路. 针对于新增的DOM元素,JQ中若为其绑定事件就必须使用 ...
- CentOS下双网卡绑定-bond0
网卡绑定就是多张网卡逻辑上作为一张网卡用.可分为,负载均衡绑定和冗余绑定两种. 加载bonding驱动 #modprobe bonding 1.编辑虚拟网络接口配置文件 [root@test~]# ...
- FastReport二维码打印存在的问题
FastReport二维码打印存在的问题 (2018-05-21 09:28:38) 转载▼ 标签: delphi 分类: Delphi10.2 FastReport本身支持二维码,实际应用中遇到这样 ...
- MariaDB安装、初始化及常用操作
1.Linux下安装与初始化 #安装 yum install mariadb-server #设置编码 vim /etc/my.cnf [mysqld]character-set-server=utf ...
- KNIME + Python = 数据分析+报表全流程
Python 数据分析环境 数据分析领域有很多可选方案,例如SPSS傻瓜式分析工具,SAS专业性商业分析工具,R和python这类需要代码编程类的工具.个人选择是python这类,包括pandas,n ...
- php file_get_contents fopen 连接远程文件
使用file_get_contents和fopen必须空间开启allow_url_fopen. 方法: 编辑php.ini,设置allow_url_fopen =true On,allow_url_f ...
- C# Winform 换肤
本来计划接着上篇 C# Winform模仿百度日历,发现一时半会写不完,只写了一小半还不全,暂且搁置下.现在计划下班后每天至少写一篇博客,未能完成的等周末(不加班都情况)补充完整. 本篇博客窗体换肤, ...
- 浏览器环境下JavaScript脚本加载与执行探析之代码执行顺序
本文主要基于向HTML页面引入JavaScript的几种方式,分析HTML中JavaScript脚本的执行顺序问题 1. 关于JavaScript脚本执行的阻塞性 JavaScript在浏览器中被解析 ...
- JQuery Mobile - 解决页面点击时候,页眉和页脚消失问题!
当点击页面时候,页眉和页脚会消失!解决方法,在页面和页脚中加入: data-quicklinks="true" 实际使用代码: <div data-role="pa ...
- 链表(上):如何实现LRU缓存淘汰算法?
一.什么是链表 和数组一样,链表也是一种线性表. 从内存结构来看,链表的内存结构是不连续的内存空间,是将一组零散的内存块串联起来,从而进行数据存储的数据结构. 链表中的每一个内存块被称为节点Node. ...