Spring——AOP核心思想與實現
阿新 • • 發佈:2019-02-08
AOP(Aspect Oriented Programming):面向切面程式設計
核心思想:動態的新增和刪除切面上的邏輯而不影響原來的執行程式碼
AOP相關概念:
1.JoinPoint
連線點,加入切面邏輯的位置。
@Before("execution(* com.spring.service..*.*(..))")
2.PointCut
JoinPoint的一個集合
@Pointcut("execution(* com.spring.service..*.*(..))")
public void myMethod(){};
@Before("myMethod()" )
public void before(){
System.out.println("before");
}
3.Aspect
指切面類,@Aspect
4.Advice
切面點上的業務邏輯
@Before;@AfterReturning;@Around ;…
5.Target
被代理物件
6.Weave
織入。將切面邏輯新增到原來執行程式碼上的過程。
AOP概念圖
Spring中AOP的實現
1.Annotation
<!-- 找到被註解的切面類,進行切面配置 aop Annotation方法-->
<aop:aspectj-autoproxy />
@Aspect
@Component
public class LogInterceptor {
@Pointcut("execution(* com.spring.service..*.*(..))")
public void myMethod(){};
@Before("myMethod()")
public void before(){
System.out.println("before");
}
@Around("execution(* com.spring.dao.impl..*.*(..))" )
public void aroundProcess(ProceedingJoinPoint pjp) throws Throwable{
System.out.println("around before");
pjp.proceed();
System.out.println("around after");
}
}
2.xml
<!-- aop xml方法 -->
<bean id="logInterceptor" class="com.spring.aop.LogInterceptor"/>
<aop:config>
<aop:pointcut id="logPointcut"
expression="execution(* com.spring.service..*.*(..))"/>
<aop:aspect id="logAspect" ref="logInterceptor">
<aop:before method="before" pointcut-ref="logPointcut"/>
</aop:aspect>
</aop:config>
Spring AOP主要通過動態代理實現。Struts2中的interceptor就是AOP的一種實現。