1. 程式人生 > >Spring——AOP核心思想與實現

Spring——AOP核心思想與實現

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的一種實現。

動態代理