IOC容器的依赖注入

1、依赖注入发生的时间
    当Spring IOC容器完成了Bean定义资源的定位、载入和解析注册以后,IOC容器中已经管理类Bean定义的相关数据,但是此时IOC容器还没有对所管理的Bean进行依赖注入,依赖注入在以下两种情况发生:
    (1)用户第一次通过getBean方法向IOC容器索要Bean时,IOC容器触发依赖注入。
    (2)当用户在Bean定义资源中<Bean>元素配置了lazy-init属性(默认是false),即让容器在解析注册Bean定义时进行预实例化,触发依赖注入。
BeanFactory接口定义了Spring IOC容器的基本功能规范,是Spring IOC容器所应遵守的最底层和最基本的编程规范。BeanFactory接口中定义了几个getBean方法,就是用户向IOC容器索取管理的Bean的方法,我们通过分析其子类的具体实现,理解Spring IOC容器在用户索取Bean时是如何完成依赖注入的。
第一步、读取BeanDefinition中的信息,获取其依赖关系,解释层BeanWapper保存下来;
第二步、实例化(代理对象)。createBeanInstance、生成Bean所包含的java对象实例。
第三步、注入:设值。populateBean、对Bean属性的依赖注入进行处理。
BeanPostProcessor后置处理器的实现,为AOP的实现做了铺垫,有了基础了。

spring-bean.jar 定义的是规范
spring-context.jar 工厂的实现,DI的实现。
spring-core.jar 是最顶层的,所有的项目都要依赖。
spring-aop是spring-aspects的上层建筑。spring-aspects定义接口;spring-aop从IOC中取得代理以后的对象,对每个方法进行重写,加入一些切面调用所需要的东西。
自动注入,注解编程@AutoWiring的功能,自动识别依赖,自动转型,声明的是街扩,自动找到该接口的实现类(前提:接口只有一个实现类)。

Spring里面默认的都是单例,除非手动声明了scope;prototype,每get一次,就new一个。

IOC判断,如果被代理的类实现了一个接口,那么默认用JDK代理
如果被代理的对象,没有实现任何接口,那就默认用CGLib
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值