一、IOC(Inverse of Control)控制反转
1.依赖注入DI(dependency injection)
所谓依赖,从程序的角度看,就是比如 A 要调用 B 的方法,那么 A 就依赖于 B,反正 A 要用到 B,则 A 依赖于 B。所谓倒置,你必须理解如果不倒置,会怎么着,因为 A 必须要有 B,才可以调用 B,如果不倒置,意思就是 A 主动获取 B 的实例:B b = new B (),这就是最简单的获取 B 实例的方法(当然还有各种设计模式可以帮助你去获得 B 的实例,比如工厂、Locator 等等),然后你就可以调用 b 对象了。所以,不倒置,意味着 A 要主动获取 B,才能使用 B;到了这里,就应该明白了倒置的意思了。倒置就是 A 要调用 B 的话,A 并不需要主动获取 B,而是由其它人自动将 B 送上门来。
2.IOC思想
java 程序中的每个业务逻辑至少需要两个或以上的对象来协作完成,通常,在使用其他的合作对象时,均要使用像 new object() 这样的语法来完成合作对象的申请工作。你会发现:对象间的耦合度高了。而 IOC 的思想是:**Spring 容器来实现这些相互依赖对象的创建、协调工作。对象只需要关心业务逻辑本身就可以了。**从这方面来说,对象如何得到他的协作对象的责任被反转了(IOC、DI)。
IOC和DI是代表的含义是类似的
3.spring的容器
在 Spring 容器启动的时候,Spring 会把你在 application.xml 中配置好的 bean 都初始化,在你需要调用的时候,把已经初始化的 bean 分配给你要调用这些 bean 的类,而不用去创建一个对象的实例。
Ioc 的常见容器是:ApplicationContext 和 BeanFactory
4.IOC 是基于 java 的反射机制以及工厂模式实现的。
二、AOP(面向切面编程)
1.分离关注点
面向切面编程的目的是分离关注点,通俗的说是指使用 aop 你可以一心关注你的正事,而其他的事交给别人处理
AOP (面向切面编程) 技术利用一种称为 “横切” 的技术,解剖封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,这样就能减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。
2.横切关注点
AOP 把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本相似。比如权限认证、日志、事务处理。
比如提供的事务管理机制,事务管理就是一个关注点,你的正事就是去访问数据库(核心关注点),而你不想管事务(横切关注点),所以,Spring 在你访问数据库之前,自动帮你开启事务,当你访问数据库结束之后,自动帮你提交 / 回滚事务!
3.aop采用的技术
一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;
二是采用静态织入的方式,引入特定的语法创建 “方面”,从而使得编译器可以在编译期间织入有关 “方面” 的代码。这里静态织入的原理就是在编译期间,切面直接以字节码形式编译到目标字节码中
相关技术: