Spring 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 [com.blah.admin.persistence.impl.CircuitDAOImpl@5c81cf46]
2011-11-24 18:00:28,638 ContainerBackgroundProcessor[StandardEngine[Catalina]] DEBUG [JdkDynamicAopProxy] Creating JDK dynamic proxy: target source is SingletonTargetSource for target object [com.blah.admin.persistence.impl.CategoryDAOImpl@55eef3c1]
2011-11-24 18:00:28,645 ContainerBackgroundProcessor[StandardEngine[Catalina]] DEBUG [JdkDynamicAopProxy] Creating JDK dynamic proxy: target source is SingletonTargetSource for target object [com.blah.admin.services.circuit.impl.CircuitsServiceImpl@d50112d]
2011-11-24 18:00:28,953 ContainerBackgroundProcessor[StandardEngine[Catalina]] DEBUG [JdkDynamicAopProxy] Creating JDK dynamic proxy: target source is SingletonTargetSource for target object [com.blah.events.persistence.impl.EventsDAOImpl@4222023a]
2011-11-24 18:00:29,030 ContainerBackgroundProcessor[StandardEngine[Catalina]] DEBUG [JdkDynamicAopProxy] Creating JDK dynamic proxy: target source is SingletonTargetSource for target object [com.blah.events.persistence.impl.PrototypesDAOImpl@d3bef50]
Я думаю, что это должно произойти только тогда, когда точек определяется следующим образом:
execution(public * com.mycompany.myservice.MyService+.*(..))
Есть идеи?
2 ответа:
Можете ли вы изменить свое определение
PointCut
сexecution
наwithin
? В прошлом мне это удавалось. (Обратите внимание, что синтаксис немного отличается. Смотрите справочную документацию Spring AOP для получения подробной информации.)Например
@PointCut("within(com.blah.platform.persistence.generic.GenericDaoImpl)")