扫描Spring AOP的特定包

时间:2013-08-27 10:00:02

标签: spring spring-aop

我正在尝试将AOP用于现有的(大型)Spring项目。问题是我不希望Spring为ApplicationContext中的所有对象创建代理,主要是为了提高性能,还因为有最终的类我无法修改。

我试图通过定义以下方面在“com.foo.bar。*”内部进行Spring搜索:

com.baz.MyAspect

@Aspect
public class MyAspect {

    private static final Logger LOGGER = LoggerFactory.getLogger(MyAspect.class);

    @Before("within(com.foo.bar.*) && " +
        "execution(* com.foo.bar.MyController.handleRequest(..))")
    public void getData() {
        // Nothing yet
    }
}

我已将这些行添加到配置中:

<?xml version="1.0" encoding="utf-8"?>
<beans ...>
    <aop:aspectj-autoproxy proxy-target-class="true" />
    <bean id="myAspect" class="com.baz.MyAspect"/>
</beans>

但是当我运行应用程序时,我得到以下异常:

Initialization of bean failed; nested exception is org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class com.foobar.FinalController]: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException: Cannot subclass final class com.foobar.FinalController

所以看起来Spring正在扫描除了表达式中定义的包之外的包。我想知道是否有办法指定要扫描的包或任何其他方法来解决这个问题。

1 个答案:

答案 0 :(得分:0)

是的,你可以像这样定义你的点数

执行bar包或子包中定义的任何方法:

执行(* com.foo.bar .. (..))click here for detail