spring java.lang.IllegalStateException:未识别的每条款:pmAspect

ghhaqwfi  于 2023-08-02  发布在  Spring
关注(0)|答案(1)|浏览(78)

<aop:aspectj-autoproxy/>配置标签有问题。
我已经添加了 * aspectjrt.jar * 和 aspectjweaver.jar,但我的设置仍然不起作用。

<dependency>
  <groupId>org.aspectj</groupId>
  <artifactId>aspectjweaver</artifactId>
  <version>1.8.9</version>
</dependency>
<dependency>
  <groupId>org.aspectj</groupId>
  <artifactId>aspectjrt</artifactId>
  <version>1.6.1</version>
</dependency>
org.springframework.context.support.AbstractApplicationContext refresh
WARNING: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ser' defined in file \[C:\\Users\\kunar\\eclipse-workspace\\Spring\\AopProj1\\target\\classes\\com\\krk\\service\\ServiceTest.class\]: BeanPostProcessor before instantiation of bean failed
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ser' defined in file \[C:\\Users\\kunar\\eclipse-workspace\\Spring\\AopProj1\\target\\classes\\com\\krk\\service\\ServiceTest.class\]: BeanPostProcessor before instantiation of bean failed
Caused by: java.lang.IllegalStateException: Per-clause not recognized: pmAspect
    at org.aspectj.internal.lang.reflect.AjTypeImpl.getPerClause(AjTypeImpl.java:183)
    at org.springframework.aop.aspectj.annotation.AspectMetadata.\<init\>(AspectMetadata.java:103)
@Component
@Aspect("pmAspect") 
public class AspectTest {
  @Around(value = "execution(int com.krk.service.ServiceTest.a*(..))")
  public Object around(ProceedingJoinPoint php) throws Throwable {
    System.out.println("before method call");
    Object ob=php.proceed();
    System.out.println("after method call");
    return ob;
  }
}
lnlaulya

lnlaulya1#

你使用@Aspect("pmAspect")的方式显然是错误的。看起来好像你想命名方面,但是你应该在@Component中这样做,或者可能在@Bean中这样做,如果在另一种情况下你想在配置类中使用工厂方法的话。
如果您查看@Aspect javadoc,您会注意到value参数不是用于命名的,而是用于指定示例化类型,如果您需要的不是单例方面的东西。你不能只是将任何东西放入字符串参数中,然后简单地假设它将被解释为名称或标签。
因此,您的问题的解决方案是简单地使用@Aspect而不带任何参数。
还有一件事POM中不需要AspectJ weaver和运行时。织工已包含运行库。此外,您应该升级到更新的AspectJ版本,而不仅仅是从WWW复制和粘贴随机片段。最新版本为:

<dependency>
  <groupId>org.aspectj</groupId>
  <artifactId>aspectjweaver</artifactId>
  <version>1.9.19</version>
</dependency>

字符串
但这不是你问题的根本原因。

相关问题