SpringIOC 和 SpringAOP

IOC:“控制反转” 另外一种说法叫DI(Dependency Injection),即依赖注入。它并不是一种技术实现,而是一种设计思想。在任何一个有实际开发意义的程序项目中,我们会使用很多类来描述它们特有的功能,并且通过类与类之间的相互协作来完成特定的业务逻辑。这个时候,每个类都需要负责管理与自己有交互的类的引用和依赖,代码将会变的异常难以维护和极度的高耦合。而IOC的出现正是用来解决这个问题,我们通过IOC将这些相互依赖对象的创建、协调工作交给Spring容器去处理,每个对象只需要关注其自身的业务逻辑关系就可以了。在这样的角度上来看,获得依赖的对象的方式,进行了反转,变成了由spring容器控制对象如何获取外部资源(包括其他对象和文件资料等等)。

  IOC起到的就是医生的作用,它收集你的需求要求,并且对症下药,直接把药开给你。你就是对象,药品就是你所需要的外部资源。通过医生,你不用再去找药品,而是通过医生把药品开给你。这就是整个IOC的精髓所在。

 

AOP:“面向切面编程” 往往被定义为促使软件系统实现关注点的分离的技术。系统是由许多不同的组件所组成的,每一个组件各负责一块特定功能。除了实现自身核心功能之外,这些组件还经常承担着额外的职责。例如日志、事务管理和安全这样的核心服务经常融入到自身具有核心业务逻辑的组件中去。这些系统服务经常被称为横切关注点,因为它们会跨越系统的多个组件。

  在系统操作数据库的过程中,不可避免地要考虑到事务相关的内容。如果在每一个方法中都新建一个事务管理器,那么无疑是对代码严重的耦合和侵入。为了简化我们的开发过程(实际上spring所做的一切实现都是为了简化开发过程),需要把事务相关的代码抽成出来做为一个独立的模块。通过AOP,确认每一个操作数据库方法为一个连接点,这些连接点组成了一个切面。当程序运行到其中某个一个切点时,我们将事务管理模块顺势织入对象中(在织入切面时,AOP容器会为目标对象动态地创建一个代理对象。SpringAOP就是以这种方式织入切面的),通过通知功能,完成整个事务管控的实现。这样一来,所有的操作数据库的方法中不需要再单独关心事务管理的内容,只需要关注自身的业务代码的实现即可。所有的事务管控相关的内容都通过AOP的方式进行了实现。简化了代码的内容,将目标对象复杂的内容进行解耦,分离业务逻辑与横切关注点。

 

posted on 2018-09-18 09:11  荆棘Study  阅读(91)  评论(0编辑  收藏  举报