Spring框架的两大核心思想是控制反转(IOC)和面向切面编程(AOP)。
IOC ( Inversion of Control ,中文释义:控制反转)是Spring框架的核心思想之一,主要用于解耦。 IOC是指将创建对象的控制权转移给Spring 框架进行管理。由Spring框架根据配置文件或注解等方式,创建bean对象并管理各个bean对象之间的依赖关系。使对象之间形成松散耦合的关系,实现解耦;
控制:指的是对象创建(实例化、管理)的权力反转:
反转:控制权交给外部环境( Spring 框架、IoC 容器)
AOP ( Aspect -Oriented Programing :面向切面编程):将那些与业务无关,却为业务模块所共同调用的逻辑(例如事务处理、日志管理、权限控制等)封装抽取成一个可重用的模块,这个模块被命名为“切面”( Aspect ), 便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性;
Spring AOP基于动态代理实现:
如果被代理的对象,已经实现某个接口,则Spring AOP会使用JDK Proxy (反射) , 基于接口的方式,创建代理对象;
如果被代理的对象,没有实现某个接口,则Spring AOP无法使用JDK Proxy (反射) , 这时Spring AOP 会使用Cglib,基于继承的方式,创建一个代理对象的子类对象来作为代理;