Spring Aop拦截Action

yoxibaga 2013-10-31 10:28:45
aop能够拦截到action方法,但是对于struts2自动封装的参数却丢失了。当然在没有aop情况下是能够正常接收到参数的。
代码如下:当我输入用户名和密码时,打印出的结果
环绕通知(前)execute
null--null
failer
然后倒腾了半天,查了点资料,在后面强制使用cglib代理,此时就能正确获取参数
<aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>
这是为什么呢?

@Aspect
@Component
public class ActionInterceptor {
/**
* 声明切入点
*/
@Pointcut("execution(String com.uestc.babasport.action..*.*(..))")
public void anyMethod() {
}

@Around("anyMethod()")
public Object around(ProceedingJoinPoint joinPoint){
Object object = null;
try {
System.out.println("环绕通知(前)"+joinPoint.getSignature().getName());
object = joinPoint.proceed();
System.out.println(object.toString());
//System.out.println("环绕通知(后)");
} catch (Throwable e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return object;
}
}



@Controller
public class EmployeeLoginAction extends ActionSupport {

private static final long serialVersionUID = 1L;
private String userName;
private String password;
private String tip;
@Resource
private EmployeeService employeeService;
//seter getter省略了
@Override
public String execute() throws Exception {
System.out.println(getUserName()+"--"+getPassword());
if (getUserName() != null && !"".equals(getUserName().trim())
&& getPassword() != null && !"".equals(getPassword().trim())) {
if(employeeService.validate(getUserName(), getPassword())){

ActionContext ac = ActionContext.getContext();
ac.put("message", "您已经成功登录");
ac.put("url", "default");
ac.getSession().put("employee", employeeService.find(Employee.class,getUserName().trim()));

setTip(null);
setUserName(null);
setPassword(null);
return "message";
}else{
tip = "您输入的用户名或者密码有误";
}
}
return "failer";
}
}
...全文
273 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
iichuang 2014-05-13
  • 打赏
  • 举报
回复
楼上说的好, mark一下, 看这里看这里:http://blog.holdlg.com/?p=1215
suciver 2014-05-08
  • 打赏
  • 举报
回复
spring的动态代理如果不指定,他会根据类的信息来进行代理,如果类有接口的会使用JDK的动态代理,如果类没有接口的就会使用cglib,因为struts2的ActionSupport是有实现接口的,所以他用了JDK的动态代理,那样你类中自己的属性自然就没有了。而你指定了使用cglib,那他就会动态生成一个继承你这个Action的子类,自然你Action类中可供子类访问的属性都有了。 不过struts2有自己的拦截器没必要也是不建议用spring的AOP
yoxibaga 2013-11-03
  • 打赏
  • 举报
回复
人工置顶

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧