我在项目中使用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:无法
自动连线栏位:私人Foo
UseFoo.foo;
嵌套异常为java.lang.IllegalArgumentException:无法设置
富田
UseFoo.foo来
$代理56
如果我删除
<bean id="fooaspect" class="FooAsspectj" />
,它将正常工作。 最佳答案
这可以通过使用以下方法解决
<aop:aspectj-autoproxy proxy-target-class="true"/>