AOP PK OOP
AOP(Aspect-Oriented Programming,面向对象编程),也可以是说是OOP(Object-OrientedPrograming,面向对象编程)的补充和完善。
基本关系OOP侧重点:纵向技术即核心关注点(软件的业务流程)
AOP侧重点:横切技术即核心关注点(业务处理流程)和横切关注点(与业务关系不大,但是很重要的部分)
很多人在初次接触AOP的时候可能会说,AOP能做到的,一个定义良好的OOP的接口也一样能够做到,我想这个观点是值得商榷的。AOP和定义良好的OOP的接口可能说都是用来解决问题并且实现需求中的横向问题的方法,这是OOP所无法避免的,并且一旦接口不修改的时候,所有事情就会变的一团糟;但是AOP不会这样,你只需修改相应的aspect,再重新组织即可。当然AOP也绝不会代替OOP。核心的需求仍然会有OOP来加以实现,而AOP将会和OOP整合起来,形成一套互补的体系。
AOP功能
Spring AOP的主要功能:日志记录、性能统计、安全控制,事务处理,异常处理。
主要意图:将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务。在Spring中提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(如审计和事务管理)进行内聚性的开发。应用对象只实现它们应该做的----完成业务逻辑-----仅此而已。它们并不负责其他系统级关注点,例如日志管理或事务管理。可以更好的将未来不应该粘合在一起的功能进行分离。
Spring AOP的优势
借助于Spring AOP,Spring IoC能够很方便的使用到非常健壮、灵活的企业级服务,是因为Spring AOP能够提供几方面的优势:
1.允许开发者使用声明式业务服务,比如事务服务,安全性服务,EJB开发者都知道,EJB组件能够使用J2EE容器提供的声明式服务,但是这些服务要借助于EJB容器,而Spring AOP却不需要EJB容器,借助于Spring的事务抽象矿建就可以这些服务。
2.开发者可以开发满足业务需求的自定义切面
3.开发SpringAOPAdvice很方便。因为这些AOP Advice仅是POJO类,借助于Spring提供的ProxyFactoryBean,能够快速的搭建SpringAOP Advice
AOP术语解析
解析:
• Aspect:方向
– 我们将业务组件的事务管理部分提取出来,被提取的层面就称为“方面”,如图中的事务管理。方面的意义在于将业务逻辑中复杂问题分离成不同的层面,使其实现统一集中的管理
• Advice:劝告
– 在特定的连接点执行的动作。如在执行execute()方法前的预处理,在执行完execute()方法后的后处理
• Pointcut:切点
– 连接点的集合,指定在何时引发通知。如事务例子中配置了所有execute.*的方法为切入点
• JoinPoint:连接点
– 程序在执行过程中明确的点,如execute()方法
• Weave:织入
– 将Advice应用到Target Object上的过程叫织入,Spring支持的是动态织入
• Target Object
– 包含连接点的对象,也称为代理的对象。如图中的业务组件。
• Proxy
– Spring AOP默认使用JDK的动态代理,它的代理是运行时创建,也可以使用CGLIB代理