IOC:
什么是IOC?
IOC是一种编程思想,意思就是“控制翻转”,简单来说,就是将对象的创建权利交给第三方容器。
为什么需要“控制翻转”?
需要进行类和类之间的解耦
什么是解耦?
硬编码耦合:当A类中直接new了一个B类,则称之为A类硬编码耦合了B类。如果B类的构造方式发生了变化,则需要去修改A类,如果有很多类都引用了B类,则这些类都要去一一修改,这种编码方式会极大的提高了程序的维护成本。
解耦:消除类和类之间的这种耦合性。将对象的创建方式交给第三方容器,其他类中,如果需要获得这个对象,再从容器中获取(配置、注解的方式进行注入),这种方式的好处在于B类的构造方式发生变化时,对其他所有类没有任何影响。
问题:正式开发时,是否会经常对一个类的构造形式进行修改?如果修改频率不高,IOC是否没有意义?
AOP:
什么是AOP?
AOP是一种面向切面的编程思想。在实际开发过程中,通常有很多业务,业务一般会分为两部分,一部分是核心业务部分(每个业务都不相同),另一个部分是非核心业务部分(很多业务都相同,比如开启事务、开启资源、记录日志、行为记录.....),将非核心业务代码从整合业务中抽离出来的独立编写的开发模式,就是面向切面编程。
AOP的底层实现原理:
JDK的动态代理 + Cglib的动态代理
静态代理和动态代理区别:
静态代理,需要开发者手动的编写代理类,创建代理对象
动态代理,会自动的创建代理对象
什么是静态代理:
为什么Spring要准备JDK的动态代理方式和Cglib的动态代理方式两种?
当有若干接口的时候,JDK是基于接口实现,因为有接口,所以使系统更加松耦合
若目标对象没有实现任何接口,spring使用CGLIB库生成目标对象的子类 ,Cglib是基于父类实现,因为代理类与目标类是继承关系,所以不需要有接口的存在。