关于@Aspect切入失败可参考

个人博客:https:lingdu.love

我按照原文更改后成功切入。这里备份一下;

想写一个AOP,主要有2个用意,,
第一个用意是做后端的防表单重复提交的token验证。
第二个用意是对后台JSR303 Validator的校验结果做一个统一处理,不想把对校验结果的处理分散在每个controller方法中

@ResponseBody
@RequestMapping(value = “add”, method = RequestMethod.POST)
public ResponseModel add(@Valid User user, BindingResult br, HttpServletResponse response) {

	if(br.hasErrors()) {
		return ResponseModel.validFail(getErrorsSplitNewLine(br));
	}
	accountService.addUser(user);
	return ResponseModel.success("保存用户成功");
}

如上面方法中, br.hasErrors() 在每个表单提交方法中都存在,想单独抽出来使用AOP统一处理。

所以写一个AOP,如下:

@Aspect
@Component
public class ParamValidAspect {
@Before(“@annotation(com.hebao.tech.adm.framework.annotation.ParamValid)”)
public void paramValid(JoinPoint point) {
System.out.println(“参数校验切入方法被调用了…”);
//省略
}
}
由于这篇文章主要是记录AOP不生效的原因,所以,这里不写具体实现了。想了解具体实现的参考另一篇文章。

上面的内容定义一个Aop织入,在有注解@ParamValid的注释Controller方法上织入。

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ParamValid {

}
这个ParamValid的内容,仅仅是一个标志性的注解,声明为方法层的注解,并且是运行时注解。

最后在application.xml中加入AOP动态代理设置。

<aop:aspectj-autoproxy proxy-target-class=“true” />
如果spring配置文件没引入过aop的配置,还需要在加入xml声明

大功告成,测试了一下,发现有点悲剧,根本织入不生效,也不报错,,楞是不执行相关的织入代码。

最后在网上搜了一下,发现Spring与SpringMVC是2个不同的父子容器, @Aspect如果被spring容器加载的话,而@Controller注解的这些类的实例化以及注入却是由SpringMVC来完成。 @Aspect如果被spring容器加载的时候,可能Spring MVC容器还未初始化, Controller类还未初始化,所以无法正常织入。。

所以调整如下:

@Aspect
public class ParamValidAspect {
@Before(“@annotation(com.hebao.tech.adm.framework.annotation.ParamValid)”)
public void paramValid(JoinPoint point) {
System.out.println(“参数校验切入方法被调用了…”);
//省略
}
}
去掉@Component注解,然后把 aop:aspectj-autoproxy 移入springmvc配置文件中,并定义bean,如下:

<aop:aspectj-autoproxy proxy-target-class=“true” />

这样就大功告成了。

————————————————
版权声明:本文为CSDN博主「苦作舟」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/oKuZuoZhou/article/details/81015310

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值