2011-11-24 65 views
2

我有一个基类,有几个派生类可以扩展它。 我想将我的Spring AOP Aspect仅限制为超类,以便仅为它创建AOP代理,而不是为派生类创建AOP代理。春季AOP - 如何防止派生类被定位

我试图定义切入点如下:

@Pointcut("execution(* com.blah.platform.persistence.generic.GenericDaoImpl.*(..))") 
public void withinGenericDao() {} 

其中GenericDaoImpl是超类。

我仍然可以看到代理的派生类生成,以及:

2011-11-24 18:00:28,616 ContainerBackgroundProcessor[StandardEngine[Catalina]] DEBUG [JdkDynamicAopProxy] Creating JDK dynamic proxy: target source is SingletonTargetSource for target object [[email protected]] 
2011-11-24 18:00:28,638 ContainerBackgroundProcessor[StandardEngine[Catalina]] DEBUG [JdkDynamicAopProxy] Creating JDK dynamic proxy: target source is SingletonTargetSource for target object [[email protected]] 
2011-11-24 18:00:28,645 ContainerBackgroundProcessor[StandardEngine[Catalina]] DEBUG [JdkDynamicAopProxy] Creating JDK dynamic proxy: target source is SingletonTargetSource for target object [[email protected]] 
2011-11-24 18:00:28,953 ContainerBackgroundProcessor[StandardEngine[Catalina]] DEBUG [JdkDynamicAopProxy] Creating JDK dynamic proxy: target source is SingletonTargetSource for target object [[email protected]] 
2011-11-24 18:00:29,030 ContainerBackgroundProcessor[StandardEngine[Catalina]] DEBUG [JdkDynamicAopProxy] Creating JDK dynamic proxy: target source is SingletonTargetSource for target object [[email protected]] 

我认为如下这应该仅被定义切入点时发生:

execution(public * com.mycompany.myservice.MyService+.*(..)) 

任何想法?

回答

0

您是否可以将PointCut的定义从execution更改为within?过去我已经取得了成功。 (请注意,语法略有不同,详情请参阅Spring AOP参考文档。)

例如@PointCut("within(com.blah.platform.persistence.generic.GenericDaoImpl)")

+0

是的,这似乎工作。非常感谢! – vladiu

0

子类继承父类的公共方法和属性,包含注释。