Spring AOP - @AfterReturning 不起作用
Spring AOP - @AfterReturning does not work
我有一个 Java 方法 getAllItems(),我创建了一个方面方法,它在 getAllItems() 结束后调用。
@Repository
@Scope("prototype")
public class ItemDao {
// not using database connection for this question; the program works fine, except aspects
public List<String> getIAllItems() {
List<String> items = new ArrayList();
items.add("item1");
return items;
}
}
方面class是这样的:
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import java.util.List;
@Aspect
public class MyAspects {
@AfterReturning(pointcut = "execution(* ro.telacad.dao.ItemDao.getIAllItems(..))", returning="items")
public void afterGetAllItems(List<String> items) {
System.out.println(items);
}
}
因此,在调用 getAllItems() 之后,我希望在控制台中看到打印的“[item1]”,但未调用方面方法。控制台没有错误,除了方面,应用程序工作正常。所以我认为所有 spring 个 bean 都已创建。
在appConfig.xml中,bean是这样声明的:
<context:component-scan base-package="ro.telacad.*" />
<aop:aspectj-autoproxy/>
我的问题是我在方面做错了什么。
MyAspects
没有被 Spring 的组件扫描拾取,因为它没有 @Component
注释,@Aspect
. @Repository
也没有注释。
将 @Component
注释添加到 MyAspects
,或者在 XML 配置中显式声明 bean:
<bean id="myAspects" class="com.yourpackage.MyAspects">
...
</bean>
我有一个 Java 方法 getAllItems(),我创建了一个方面方法,它在 getAllItems() 结束后调用。
@Repository
@Scope("prototype")
public class ItemDao {
// not using database connection for this question; the program works fine, except aspects
public List<String> getIAllItems() {
List<String> items = new ArrayList();
items.add("item1");
return items;
}
}
方面class是这样的:
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import java.util.List;
@Aspect
public class MyAspects {
@AfterReturning(pointcut = "execution(* ro.telacad.dao.ItemDao.getIAllItems(..))", returning="items")
public void afterGetAllItems(List<String> items) {
System.out.println(items);
}
}
因此,在调用 getAllItems() 之后,我希望在控制台中看到打印的“[item1]”,但未调用方面方法。控制台没有错误,除了方面,应用程序工作正常。所以我认为所有 spring 个 bean 都已创建。
在appConfig.xml中,bean是这样声明的:
<context:component-scan base-package="ro.telacad.*" />
<aop:aspectj-autoproxy/>
我的问题是我在方面做错了什么。
MyAspects
没有被 Spring 的组件扫描拾取,因为它没有 @Component
注释,@Aspect
. @Repository
也没有注释。
将 @Component
注释添加到 MyAspects
,或者在 XML 配置中显式声明 bean:
<bean id="myAspects" class="com.yourpackage.MyAspects">
...
</bean>