当前位置: 首页 > 知识库问答 >
问题:

控制器中所有方法的Spring AOP切入点

巢海
2023-03-14

我想在Spring(3.2.3)@Controller中的每个方法之前运行一些代码。我定义了以下内容,但它不会运行。我怀疑切入点表达式不正确。

dispatcher-servlet.xml

<aop:aspectj-autoproxy/>
<bean class="com.example.web.controllers.ThingAspect"/>

C. E. W. C. ThingAspect

@Pointcut("execution(com.example.web.controllers.ThingController.*(..))")
public void thing() {
}

@Before("thing()")
public void doStuffBeforeThing(JoinPoint joinPoint) {
    // do stuff here
}

共有3个答案

耿玄裳
2023-03-14

除了另一个答案中已经提到的@ControllerAdvice,您还应该查看Spring MVC拦截器。

它们基本上简化了控制器的AOP,并且可以在@ControllerAdvice不能提供足够功率的情况下使用。

宓和同
2023-03-14

在当前版本的Spring MVC中,正确的方法是通过控件建议
请参见:使用@控件建议注释向控制器提供建议

对于以前的版本,请参考我的回答:https://stackoverflow.com/a/5866960/342852

慕容聪
2023-03-14

切入点表达式缺少返回类型,例如voidString*

execution(* com.example.web.controllers.ThingController.*(..))
 类似资料:
  • 问题内容: 我有针对特定软件包的此工作代码,但我想针对所有 controllers , service 和 dao 软件包进行配置 com.abc.xyz.content.controller com.abc.xyz.content.service com.abc.xyz.content.dao com.abc.xyz.category.controller com.abc.xyz.categor

  • 我定义了这个类方面,它对服务很好(除非用户有角色管理器,否则不允许访问,但对控制器(?)没有限制 和ImportController: 当我作为userrole.manager登录时,将调用before(joinpointjp)方法,否则不是 我明白了,当我只是在浏览器中粘贴URL时,前面的方法(joinpointjp)没有被调用....

  • 我有一个特定包的工作代码,但我想为所有控制器、服务和dao包配置它,例如 com。abc。xyz。所容纳之物控制器 com。abc。xyz。所容纳之物服务 com。abc。xyz。所容纳之物道 com。abc。xyz。类别控制器 com。abc。xyz。类别服务 com。abc。xyz。类别dao公司 等等这是我的项目的基本包,有人可以帮助我如何去做它,使它适用于我的网络项目,包括控制器的所有类,

  • 我想从类列表(可能属于不同的包)中记录所有方法的条目。注意,这些方法应该只属于指定的类。 我尝试了以下方法,但这些都不起作用 (1) 在这里使用if()切入点,我得到一个错误 (2) 使用切入点和aop的组合。xml在这里我得到一个错误 这里出了什么问题? 当然可以通过在切入点中单独指定每个类来实现,但这对于数百个类来说是不可扩展的。理想情况下,如果可以从外部文本文件中提取类列表(便于配置),那就

  • 问题内容: 为什么无法从另一个内部访问其他控制器方法呢? 像这样。 已编译 如果您不能这样做,那为什么不呢?我还应该怎么做… 问题答案: 最近几个小时遇到相同的问题。我使用了api / services文件夹。它可能不完全是您所需要的,但是它是一个选择。

  • 问题内容: 我想用指定的注释(例如@Monitor)监视所有类的所有公共方法(注意:注释在类级别)。可能的切入点是什么?注意:我正在使用@AspectJ样式的Spring AOP。 问题答案: 你应该将类​​型切入点与方法切入点结合使用。 这些切入点将在标记为@Monitor的类中查找所有公共方法: 为结合了前两者的最后一个切入点提供建议,你就完成了!