ioc(控制反转 inversion of control) 和 aop (Aspect-Oriented Programming) 是spring的灵魂
我的理解:
控制反转
就是说对原来对象的创建,也就是new一个对象,都是我们手动完成的,但是引入了ioc的思想之后,
我们将对象的创建交给spring容器而不需要我们手动进行创建,我们要用的时候只需要将某个需要使用的对象
注入(@Autoware, @Resource,或者其他方法),然后直接调用即可,依赖的创建有两种方式,一种是直接在
启动容器时立马创建,一种是延迟创建,也就是懒加载的方式,依赖注入(DI)和控制反转是同一个概念。
面向切面编程
就是说在我们不需要修改原有代码的前提下,对原有的代码进行功能的增强,例如利用aop进行方法
添加日志,可以在执行前后进行日志输出,aop也算是一种解耦思想的体现,让代码耦合率降低,提高代码的可用性,
让代码也更容易扩展和维护。下面是我对aop的理解,用一张图展示核心思想,大概就是oop是一种垂直的关系,而不
能实现功能切入水平:
用到的设计模式
ioc使用了工厂模式加反射实现,通过sessionFactory去注入实例,通过反射动态的创建对象
aop使用了代理模式,代理模式是常用的java设计模式。
aop的实现主要分为两大类:一类是动态代理,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;
二是采用静态代理,引入特定的语法创建页面,从而使得编译器可以在编译期间织入有关代码。