IOC :控制反转,是一种思想,把对象创建的权利交给了容器来进行管理。
初始化过程:(1)构建BeanFactory
(2)BeanDefinition的Resource定位,载入解析与注册
(3)创建Bean实例对象
sping有三个核心组件:Core ,Context,Bean
想一想你写的项目,写好了xml文件,Core 核心组件就对xml文件中的bean进行加载,解析与注册,在Spring内部就被转化为BeanDefinition对象。Context组件利用BeanFactory创建bean对象(工厂模式)。
DI(依赖注入):动态的向某个对象提供它所需要的其他对象(通过反射实现的)
依赖注入的三种方式:1:构造器注入
2:接口注入
3:setter注入
AOP:面向切面编程
两种实现方式 :jdk动态代理
cglib动态代理
1:jdk动态代理
在jdk.lang.reflect包下有一个Proxy类,它是动态代理的入口。newProxyInstance就是创建代理对象的方法
public static Object newProxyInstance(ClassLoader loader,Class<?> interfacers,InvocationHandler h )
三个参数 :ClassLoader 用于加载代理类的Loader类,和被代理的类是同一个Loader类,Interfaces是被代理类实现的接口(使用jdk动态代理必须要实现接口), invocationHandler 用于执行除了被代理类接口方法之外用户定义的其他操作。
2:cglib :cglib继承被代理的类(被代理的类不能是final类型,因为final类不能被继承),重写方法,织入通知,动态生成字节码并运行
实现MethodInterceptor接口,并且重写该接口
public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {