IOC 的思想: Spring 容器来实现这些相互依赖的对象的创建、协调工作。对象只需要关心业务逻辑本身。
IOC 容器的执行步骤:
applicationContext.xml
BeanDefinition
中,方便后续处理 registerBeanDefinition
方法向IOC容器注入 BeanDefinition
数据 registerBeanDefinition(String beanName, BeanDefinition beanDefinition)
BeanDefinition
中的数据进行依赖注入 (通过反射机制实现的,在实例化一个类时,它通过反 射调用类中 setProperty
方法将事先保存在 HashMap
中的类属性注入到类中)
Spring通过 反射
来进行注入。Spring将我们配置的信息保存在一个 HashMap
中,HashMap 的 key 就是 Bean 的 id, value 就是 Bean 本身。
AOP 的配置
ProxyFactoryBean
1.基于 JDK
面向接口的动态代理 JdkDynamicAopProxy
生成代理对象。
JdkDynamicAopProxy
类实现了 AopProxy
,能够返回 Proxy
,并且,其自身也实现了 InvocationHandler
角色。也就是说,当我们使用 proxy
时,我们对 proxy
对象调用的方法,都最终被转到这个类的 invoke()
方法中。
2.基于 Cglib
子类继承方式的动态代理 CglibAopProxy
生成代理对象
(有关动态代理的知识点将在之后细说)