Java @包内所有方法的AspectJ切入点

Java @包内所有方法的AspectJ切入点,java,spring,aop,aspectj,spring-aop,Java,Spring,Aop,Aspectj,Spring Aop,我有一个特定包的工作代码,但我想为所有控制器、服务和dao包配置它 乙二醇 com.abc.xyz.content.controller com.abc.xyz.content.service com.abc.xyz.content.dao com.abc.xyz.category.controller com.abc.xyz.category.service com.abc.xyz.category.dao 等等。 这是我的项目的基本包,有人可以帮助我如何去做,使它为我的网络项目,包括控制

我有一个特定包的工作代码,但我想为所有控制器服务dao包配置它 乙二醇

  • com.abc.xyz.content.controller
  • com.abc.xyz.content.service
  • com.abc.xyz.content.dao
  • com.abc.xyz.category.controller
  • com.abc.xyz.category.service
  • com.abc.xyz.category.dao
等等。 这是我的项目的基本包,有人可以帮助我如何去做,使它为我的网络项目,包括控制器的所有类工作,提前感谢。 . .


您只需将切点更改为以下内容:

@Pointcut("within(com.abc.*)")

进一步阅读-

这些备选方案中的一个如何

A)带有包限制的常规执行切入点:

执行(**(..)&&
(
在(com.abc.xyz..controller..*中)||
在(com.abc.xyz..service….*内)||
在(com.abc.xyz..dao..*内)
)
B)包限制执行切入点:

执行(*com.abc.xyz..controller.*(.)||
执行(*com.abc.xyz..service..*(..)||
执行(*com.abc.xyz..dao..*(..)

顺便说一句,我更喜欢B,因为它有点短,更容易阅读。您可能已经猜到,
符号表示“任何包或子包”,而
后面表达式末尾的
*
表示“任何类中的任何方法”。

另一种选择是使用

@Pointcut("bean(*Controller)")

但是bean的命名应该是对应的

好的。对于控制器,您可以在名为“dispatcher”的DispatcherServlet中使用URI[/xyz web vodafone/content.showContentWorkbench.htm]执行HTTP请求找不到映射之类的操作。首先,我至少可以为服务和dao包配置它,您可以告诉我如何实现它吗?这非常简单。您需要做的是在@Pointcut本身中提供表达式,如答案中所述。因此,基本上可以使用其他切入点设计器定义()中的所有
切入点表达式,对吗?我认为对于嵌套类,
in()
可以简化表达式(有时非常简单),但除此之外,它只是一个方便的切入点指示符。理论上是这样,但通常没有意义。我总是选择最清楚地表达我作为开发人员意图的切入点(组合)。好的切入点可以像这样理解:“在包x和y中,选择@Z注释的类中的所有公共、非静态方法,但前提是它们返回类型a的值。”
@Pointcut("bean(*Controller)")