AOP(Aspect Oriented Programming):意思就是面相切面编程。通俗来说就是一种在通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术,这种在运行时,动态的将代码切入到类的指定方法、指定位置上的编程思想就是面向切面编程,AOP通过一系列的代理来实现的。
说到底,AOP其实就是OOP的补充而已,OOP面向对象编程,而面向对象编程的特点就是,封装,继承和多态,而封装就是要求将功能分散到不同的对象当中,实际上也就是说,让不同的类设计不同的方法,而将相同的代码提到父类,让子类拥有自己独特的方法和行为,这样做的好处就是降低了代码的复杂程度,可以使公共的代码重复利用,它实际上就是一种横向切分,但是慢慢的在项目越来越大也带来了问题,比如说,在两个子类中,可能都需要在每个方法之前执行一段代码,在执行完之后,又需要执行一段代码,这样就需要在每个类中都加入前后执行的方法,也许他们就是完全相同的,但是因为面相对象的设计无法让他们联系在一起,而不能将重复的代码统一起来。代码的冗余较大,我们需要将分散在不同子类当中的公共方法提取出来,提高代码的复用性,而面向对象编程的这种横向切分就无法满足这样的要求,所以就出现了AOP来完善OOP的缺陷,AOP面向切面编程,他将纵向的切割代码的执行,一般来说,我们将切入到指定类,指定方法中的代码片段称之为横切面,将切入到那些类,哪些方法,叫做切入点,有了AOP,我们就可以把不同类之间共有的代码,抽取到一个切面中,等到需要时在切入到对象中,从而改变原有的行为,使类和类之间的关系更加紧密。
AOP和OOP编程思想。就是将业务,横向和纵向的切分,由二维编程了三维编程,由平面变成了立体,从技术上来,AOP是通过动态代理和静态织入的机制来实现。
对于Spring框架的两大核心组件之一的AOP来说,最核心的就是通知(advice)和切面(pointcut),我们需要关注的是核心关注点和横切关注点,spring当中运用到AOP最大的功能是在事物管理,权限认证,日志等功能
在Spring中的advice分为五大通知,分别是:前置。后置,环绕。返回值,异常,
pointcut就是配合Advice来使用的,它定义了就是在满足它规定的环境中,执行advice的方法,从而实现和Advice的绑定,实现很切面。进而完成对OOP的补充
spring当中运用很切面配置很切面(事务管理):
<!-- 1.0 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" />
<!--
1.0 配置通知的方法
哪些方法执行横切面的代码块
-->
<tx:advice transaction-manager="transactionManager" id="txAdvice">
<tx:attributes>
<tx:method name="find*" read-only="true"/>
<tx:method name="sel*" read-only="true"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<!--
2.0 配置横切点
确定哪些类来执行
-->
<aop:config>
<aop:pointcut expression="execution(* com.spongeli.ego.service.impl.*.*(..))" id="pointcut"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"/>
</aop:config>