spring aop使用記錄

1.spring配置,本文采用xml配置方式

配置文件爲:

<bean id="springAop" class="com.XXX.share.XXXX.SpringAop"/>//實現定義方法的類路徑
<aop:config proxy-target-class="false">
    <aop:aspect id="addAop" ref="springAop">
        <!--interceptorUpdate-->
        <aop:pointcut id="addPointCut" expression="execution(* com.XXX.share.service.*.add*(..))" />//掃描路徑
        <aop:around pointcut-ref="addPointCut" method="doAround"/>
    </aop:aspect>
    <aop:aspect id="updateAop" ref="springAop">
        <!--interceptorUpdate-->
        <aop:pointcut id="updatePointCut" expression="execution(* com.XXX.share.service.*.update*(..))" />
        <aop:around pointcut-ref="updatePointCut" method="doAround"/>
    </aop:aspect>
</aop:config>

2.寫實體類

 

public class SpringAop {

    private static final org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(SpringAop.class);
    /**
     * 攔截service層所有update,add開頭的方法 
     * @param jp
     * @return
     * @throws Throwable
     */
    public Object doAround(ProceedingJoinPoint jp) throws Throwable {
        Object[] args = jp.getArgs();//實體類的參數
        String methodUrl = jp.getSignature().getDeclaringTypeName(); //實現類路徑
        String methodName = jp.getSignature().getName();//方法名

        //寫自己的方法
        
        return jp.proceed();
    }

3.該方式僅能攔截controller調用的方法,無法攔截service內部調用的方法。

攔截service內部方法需將調用的service重新實例化,具體方法爲:

XXXX bean = (XXXX)SpringContextUtil.getBean(XXXX.class);其中XXXX爲實現類的類名
bean.method(....);//其中....爲傳的參數

4.SpringContextUtil類的實現

@Component
public class SpringContextUtil implements ApplicationContextAware {

    // Spring應用上下文環境
    private static ApplicationContext applicationContext;

    /**
     * 實現ApplicationContextAware接口的回調方法,設置上下文環境
     *
     * @param applicationContext
     */
    public void setApplicationContext(ApplicationContext applicationContext) {
        SpringContextUtil.applicationContext = applicationContext;
    }

    /**
     * @return ApplicationContext
     */
    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    /**
     * 獲取對象
     *
     * @param name
     * @return Object
     * @throws
     */
    public static Object getBean(String name) {

        return applicationContext.getBean(name);
    }

    public static <T> T getBean(Class<T> requiredType) {
        return applicationContext.getBean(requiredType);
    }

}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章