AOP,Aspected Oriented Program,面向切面编程。
AOP是不同于OOP的一种编程思想,算是对OOP编程思想的扩充。
AOP为了实现什么?程序正常运行都有核心业务,最基本的核心业务就是增删改查,而在程序正常运行时,经常需要一些周边功能,比如性能统计、日志等,将这些周边功能和核心业务分离,就是AOP所需要做的事情。
如何理解切面?其实这里的切面应该是和核心业务本身所在的面对应的。在需要加入周边功能的地方,定义一个切点,当触发这个切点时,即进行切面上的操作。
切面实现代码:
1.定义业务类:ProductService
package com.myTest.service;
public class ProductService {
public void doSomeService(){
System.out.println("业务类。。。");
}
}
2.定义切面业务类:日志
该类中在执行核心功能类之前和之后做了输出,并不影响核心功能的执行,即为切面业务。
package com.myTest.aspect;
import org.aspectj.lang.ProceedingJoinPoint;
public class LoggerAspect(){
public Object log(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("start:" + joinPoint.getSignature().getName());
//执行核心功能类
Object object = joinPoint.proceed();
System.out.println("end:" + joinPoint.getSignature().getName());
return object;
}
}
3.配置xml文件
配置xml文件通俗点说分为两步,第一是声明切入点,第二步是将切入点和切面对应起来。
整个逻辑就是在进行某个核心业务操作时,触发切入点,执行切面操作。
通过切入点和切面,将核心业务和周边功能编织起来。
<!-- 业务类的对象 -->
<bean name="s" class="com.myTest.service.ProductService">
</bean>
<!-- 日志切面对象,代号为loggerAspect-->
<bean id="loggerAspect" class="com.how2java.aspect.LoggerAspect"/>
<!-- 声明切入点pointcut,代号标记为loggerCutpoint-->
<!-- expression表达式意为当执行expression表达式里面的操作时,即调用标记为loggercutpoint的切入点对应的切面-->
<aop:config>
<aop:pointcut id="loggerCutpoint"
expression=
"execution(* com.myTest.service.ProductService.*(..)) "/>
<!--声明切面aspect,将切点和切面对应起来-->
<aop:aspect id="logAspect" ref="loggerAspect">
<aop:around pointcut-ref="loggerCutpoint" method="log"/>
</aop:aspect>
</aop:config>