aop:aspectj-autoproxy 致使autowired失效
之前使用SSH三大經典框架的時候,寫了一個簡單的統計Action每個方法執行時間的功能類,程式碼如下:
- import javax.servlet.http.HttpServletRequest;
- import org.aopalliance.intercept.MethodInterceptor;
- import org.aopalliance.intercept.MethodInvocation;
-
import org.apache.commons.lang.StringUtils;
- import org.apache.commons.lang.time.StopWatch;
- import org.apache.struts.actions.DispatchAction;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.stereotype.Service;
- import org.springframework.aop.framework.ReflectiveMethodInvocation;
- /**
-
* 統計方法執行時間的攔截器,採用Spring AOP方式實現.
- *
- * @author Kanine
- */
- @Service("runTimeHandler")
- publicclass RunTimeHandler implements MethodInterceptor {
- privatestatic Logger logger = LoggerFactory.getLogger("code.coolbaby");
- @SuppressWarnings("unchecked")
-
public Object invoke(MethodInvocation methodInvocation)
- Object[] args = methodInvocation.getArguments();
- String method = methodInvocation.getMethod().getName();
- String action = methodInvocation.getMethod().getDeclaringClass().getName();
- /**
- * 由於Spring使用了Cglib代理,導致不能直接取得目標類名,需作此轉換
- */
- if (methodInvocation instanceof ReflectiveMethodInvocation) {
- Object proxy = ((ReflectiveMethodInvocation) methodInvocation).getProxy();
- action = StringUtils.substringBefore(proxy.toString(), "@");
- /**
- * 如使用了DispatchAction,將不能直接取得目標方法,需作此處理
- */
- if (proxy instanceof DispatchAction) {
- for (Object arg : args) {
- if (arg instanceof HttpServletRequest)
- method = ((HttpServletRequest) arg).getParameter("method");
- }
- }
- }
- /**
- * 方法引數型別,轉換成簡單型別
- */
- Class[] params = methodInvocation.getMethod().getParameterTypes();
- String[] simpleParams = new String[params.length];
- for (int i = 0; i < params.length; i++) {
- simpleParams[i] = params[i].getSimpleName();
- }
- String simpleMethod = method + "(" + StringUtils.join(simpleParams, ",") + ")";
- logger.info("{} 開始執行[{}]方法", action, method);
- StopWatch clock = new StopWatch();
- clock.start();
- Object result = methodInvocation.proceed();
- clock.stop();
- logger.info("執行[{}]方法共消耗{}毫秒", simpleMethod, clock.getTime());
- return result;
- }
- }
- <context:component-scanbase-package="code.coolbaby"/>
- <aop:config>
- <aop:advisoradvice-ref="runTimeHandler"pointcut="execution(* code.coolbaby.core.BaseDispatchAction.*(..))"/>
- </aop:config>
最近把框架升級到SS2H,順便把Spring AOP實現由原來的Schema方式改為AspectJ方式,程式碼如下:
- import org.apache.commons.lang.time.StopWatch;
- import org.aspectj.lang.ProceedingJoinPoint;
- import org.aspectj.lang.annotation.Around;
- import org.aspectj.lang.annotation.Aspect;
- import org.aspectj.lang.annotation.Pointcut;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.stereotype.Component;
- /**
- * 統計方法執行時間的工具類,採用Spring AOP方式實現.
- *
- * @author Kanine
- */
- @Aspect
- @Component
- publicclass RunTimeHandler {
- privatestatic Logger logger = LoggerFactory.getLogger("code.coolbaby");
- @Pointcut("execution(public String *()) && !execution(public String toString())" + " && target(code.coolbaby.core.CRUDActionSupport)")
- void timer() {
- }
- @Around("timer()")
- public Object time(ProceedingJoinPoint joinPoint) throws Throwable {
- String clazz = joinPoint.getTarget().getClass().getSimpleName();
- String method = joinPoint.getSignature().getName();
- StopWatch clock = new StopWatch();
- clock.start();
- Object result = joinPoint.proceed();
- clock.stop();
- String[] params = new String[] { clazz, method, clock.getTime() + "" };
- logger.info("[{}]執行[{}]方法共消耗[{}]毫秒", params);
- return result;
- }
- }
- <?xmlversion="1.0"encoding="UTF-8"?>
- <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
- "http://struts.apache.org/dtds/struts-2.1.dtd">
- <struts>
-
<constantname="struts.convention.default.parent.package"value=
相關推薦
aop:aspectj-autoproxy 致使autowired失效
對Struts1/2 Action應用Spring AOP問題小結 之前使用SSH三大經典框架的時候,寫了一個簡單的統計Action每個方法執行時間的功能類,程式碼如下: import javax.servlet.http.HttpSer
aop aspectj autoproxy / 的作用
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
spring基於aspectj的AOP配置 aop:aspectj-autoproxy proxy-target-class="true"
精通Spring4.x--企業應用開發實戰 [email protected]("@annotation()")切點函式詳解 程式碼實現的目標是為NaugthyWaiter類的greetTo()方法實現後置增強,其中greetTo()方法被@NeedTest
aop:aspectj-autoproxy 標籤解析
1.標籤解析對應的handler http\://www.springframework.org/schema/aop=org.springframework.aop.config.AopNames
aop:aspectj-autoproxy 不能生效
警告: Exception encountered during context initialization - cancelling refresh attemptorg.springframework.beans.factory.BeanCreationException: Error creating
萬用字元的匹配很全面, 但無法找到元素 'aop:aspectj-autoproxy' 的宣告
因為專案需要,想使用spring的註解方法的AOP切面程式設計,在xml配置檔案中加入<aop:aspectj-autoproxy proxy-target-class="true"/> 之後,專案啟動報文章標題的錯誤。 檢查原因是忘記引用AOP的檔案。 xm
Spring 之AOP AspectJ切入點語法詳解(最全面、最詳細。)(轉)
6.5 AspectJ切入點語法詳解 6.5.1 Spring AOP支援的AspectJ切入點指示符 切入點指示符用來指示切入點表示式目的,,在spring AOP中目
29--aspectj-autoproxy解析及Spring解析自定義標籤
前兩個小節已經介紹了AOP的一些基礎知識回顧並對靜態代理、JDK動態代理、CGLIB動態代理做了一些簡單的介紹,本節介紹AOP標籤的解析過程。 1.aspectj-autoproxy標籤簡介 使用註解方式應用aop需要在配置檔案中配置<aop:aspect
Spring 之AOP AspectJ切入點語法詳解 @AspectJ進階
AspectJ切入點語法詳解 此文章來源於網路,版權不歸本人所有。本人結合起來 1.Spring AOP @Before @Around @After 等 advice 的執行順序 @Around/**ProceedingJo
32--aspectj-autoproxy解析及Spring解析自定義標籤
前面的章節已經介紹了AOP的相關概念和一些知識點,接下來我們就要開始分析SpringAOP的原始碼了,接下來的分析都基於@AspectJ註解。雖然@AspectJ是基於註解的方式實現AOP,但還是要在配置檔案中配置<aop:aspectj-autoprox
Spring aop AspectJ切入點初用心得
以前專案中未用過aop,故一直對aop不瞭解,近期看了看,大致瞭解了下,在上程式碼前首先需要了解aop一些基本概念。 一、AOP基本概念 : 1、Aspect(切面):說白了就是一個class,裡面定義切入點和通知 2、JointPoint(連線點):接入
Spring框架的AOP — AspectJ支援包下載的與安裝
學習Spring框架進行面向方面的程式設計(AOP)時,所需要的AspectJ支援包來源於Eclipse下面的一個子專案AspectJ,可到此專案的官網地址下載AspectJ支援包。同時也要下載aopalliance包並新增到專案中。 一
Spring 之AOP AspectJ切入點語法詳解(最全了,不需要再去其他地找了)
6.5 AspectJ切入點語法詳解 6.5.1 Spring AOP支援的AspectJ切入點指示符 切入點指示符用來指示切入點表示式目的,,在Spring AOP中目前只有執行方法這一個連線點,Spring AOP支援的AspectJ切入點指示符
org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator
Spring提供了很多擴充套件介面,BeanPostProcessor介面和InstantiationAwareBeanPostProcessor介面就是其中兩個。 BeanPostProcessor BeanPostProcessor介面作用是:如果我們需要在Spring容器完成Bean的例項化、配置和
關於 spring aop (aspectj) 你該知曉的一切
本篇是年後第一篇博文,由於博主用了不少時間在構思這篇博文,加上最近比較忙,所以這篇檔案寫得比較久,也分了不同的時間段在寫,已盡最大能力去連貫博文中的內容,盡力呈現出簡單易懂的文字含義,如文中有錯誤請留言,謝謝。 神一樣的AspectJ-AOP的領跑者AspectJ的織入方式及其原理概要
Spring-AOP @AspectJ進階之繫結類註解物件
概述 例項 概述 @within()和@target()函式可以將目標類的註解物件繫結到增強方法中。 我們通過@within()演示註解繫結的操作 例項 註
Spring AOP+AspectJ在XML配置例項(詳解)
在本教程中,我們將向你展示如何轉換上章節中 轉成基於XML的配置。對於那些不喜歡註釋,使用JDK1.4,則可以基於XML,而不使用 AspectJ。再次回顧上個 customerBo 介面中的幾個方法,以後你將學會如何在 XML檔案實現 AspectJ 攔截。File:Cus
Spring AOP @AspectJ 入門例項
從Spring 2.0開始,可以使用基於schema及@AspectJ的方式來實現AOP,本文以一個簡單的例項介紹瞭如何以@AspectJ方式在Spring中實現AOP。由於@Aspect是基於註解的,因此要求支援註解的5.0版本以上的JDK。 環境要求: 1
Spring-AOP @AspectJ進階之繫結丟擲的異常
概述 例項 總結 概述 和通過切點函式繫結連線點資訊不同,連線點丟擲的異常必須使用AfterThrowing註解的throwing成員進行繫結 例項 業務類 p
配置@aspectj-autoproxy切面,生成代理物件
有時候在呼叫一個方法時,可能需要在呼叫該方法之前需要做點其他的操作,比如我要做一個往資料庫中插入資料的操作,這個插入的方法有一個json資料,但是我可能在插入之前還需要往這個json引數中塞入其他的資