2010-07-27 73 views
1

我试着将AOP应用到Struts2的动作类。 我的配置是:Struts2的Spring AOP动作

<aop:aspectj-autoproxy proxy-target-class="true"/> 
<bean id="actionClassAspect" class="com.rpm.application.profiling.ActionClassAspect"/> 
<aop:config> 
<aop:pointcut id="actionClassPointcut" expression="execution(public * com.rpm..action.*.*(..)) 
    and !execution(public * com.rpm..action.*.get*(..)) 
    and !execution(public * com.rpm..action.*.set*(..)) 
    and !within(com.rpm..profiling.*)"/> 

<aop:aspect id="actionAspect" ref="actionClassAspect"> 
    <aop:around method="doAspect" pointcut-ref="actionClassPointcut"/> 
</aop:aspect> 

我的动作类:

package com.rpm.application.common.web.action; 

import com.opensymphony.xwork2.ActionSupport; 

public class ApplicationLoginAction extends ActionSupport { 
private String userID, password; 

@Override 
public String execute() throws Exception { 
    try { 
     //validation logic 
     System.out.println("Login success"); 
     return SUCCESS; 
    } catch(Exception e) { 
     return ERROR; 
    } 
} 

public String getUserID() { 
    return userID; 
} 

public void setUserID(String userID) { 
    this.userID = userID; 
} 

public String getPassword() { 
    return password; 
} 

public void setPassword(String password) { 
    this.password = password; 
} 
} 

我的方面是:

package com.rpm.application.profiling; 
import org.aspectj.lang.ProceedingJoinPoint; 
import org.aspectj.lang.annotation.Aspect; 

@Aspect 
public abstract class ActionClassAspect { 
public Object doAspect(ProceedingJoinPoint proceedingJoinPoint) throws Throwable { 
    long start = System.currentTimeMillis(); 
    Object returnValue = proceedingJoinPoint.proceed(proceedingJoinPoint.getArgs()); 
    long end = System.currentTimeMillis(); 
    System.out.println(" " + proceedingJoinPoint.getTarget().getClass() + " KIND:" + proceedingJoinPoint.getSignature().toShortString() + " TIME: " + (end - start)); 
    return returnValue; 
} 
} 

当我执行上tomcat6.x服务器AOP这个应用程序不适用于该操作类。

回答

2

我找到了解决方案。需要在类路径中添加struts2-spring-plugin-2.x.x.jar。 此插件将自动将在struts.xml中配置的所有操作类添加到弹簧容器