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