Пожалуйста, рассмотрите следующую ситуацию с spring 4.0.7
Для Eclipselink мы используем load-time-weaver. Поэтому мы хотели поэкспериментировать с аннотацией Springs @Configurable, используя @EnableSpringConfigured с @EnableLoadTimeWeaving одновременно.
Это полностью функционально, и Spring-Beans идеально внедряются в POJO во время построения. Эта функциональность полезна для нас, потому что мы хотим сохранить некоторый код, касающийся проверки этих POJO, внутри них, а не где-то еще в Bean.
Некоторый из нашего Spring Context содержит Bean-компоненты, которые не реализуют никакого интерфейса, потому что они локальны для некоторого пакета и используются только там. Допустим, FooLogicBean — один из них. Если это должно быть внедрено в другой Bean, и некоторый Spring-AOP-Aspect (не-aspectj), например, некоторый аспект измерения производительности, находится в пути выполнения, Spring создаст автопрокси CGLIB для FooLogicBean и внедрит его. Это полностью функционально и работает отлично.
Проблемы возникают, когда мы хотим использовать POJO с аннотацией @Configurable в качестве параметра в методе FooLogicBean (например, fooLogicBean.doValidate(myPojo);), соответственно, CGLIB Proxy. В этом случае какая-то нетривиальная магия не позволяет этому POJO быть переплетенным через аспект j (AnnotationBeanConfigurerAspect из spring-aspects). Он даже никогда не вплетается в код, независимо от вызова вышеупомянутого метода doValidate().
Если мы создаем этот POJO внутри FooLogicBean, но не используем его в качестве параметра метода, он снова сплетается из-за @Configurable.
Не зная кода создания Autoproxy, мы предполагаем, что какая-то причудливая процедура маркировки препятствует обнаружению класса с помощью aspectj, если этот класс уже использовался в spring-aop. использование в данном случае означает Доступ.
Кто-нибудь экспериментировал с таким непонятным созвездием и знает решение для этого?
Заранее спасибо!