我在项目中使用AspectJ。
@Aspect
Class FooAsspectj{
private static Logger log = LoggerFactory.getLogger(FooAsspectj.class);
@Pointcut("execution(* com.abc.Foo.getFoo(..))")
public void getFoo() { }
@Around("getFoo()")
public Object profileFoo(ProceedingJoinPoint pjp) throws Throwable {
long start = System.currentTimeMillis();
log.debug("Going to call the method.");
Object output = pjp.proceed();
log.debug("Method execution completed.");
long elapsedTime = System.currentTimeMillis() - start;
log.debug("Method execution time: " + elapsedTime + " milliseconds.");
return output;
}
}
Class Foo{
public void getFoo(String abc){
System.out.println("Hello Foo");
}
现在我有另一个类UseFoo,我在其中自动装配Foo类
Class UseFoo{
@Autowired
private Foo foo;
}
我在ApplicationContext.xml
中做了以下条目<aop:aspectj-autoproxy />
<bean id="fooaspect" class="FooAsspectj" />
我收到错误
引起:org.springframework.beans.factory.BeanCreationException: 创建名为'useFoo'的bean时出错: 注入自动连接的依赖项失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:不能 autowire字段:私人Foo UseFoo.foo; 嵌套异常是java.lang.IllegalArgumentException:无法设置 Foo场 UseFoo.foo来 $ Proxy56
如果我删除<bean id="fooaspect" class="FooAsspectj" />
,则可以正常使用。
答案 0 :(得分:4)
使用以下
解决了这个问题 <aop:aspectj-autoproxy proxy-target-class="true"/>