Как мне получить управление уже существующей пружиной объекта? Я бы хотел подключить его к Springs AoP
возможностям, используя aspectj
.Я знаю, что это проблема, поскольку Spring AoP
использует динамические прокси, которые, вероятно, создаются вместе с объектом.
Зачем мне это нужно?
У меня есть сторонний класс, который принимает аргумент конструктора, который известен только в runtime , следовательнокажется, я не могу добавить его в свой applicationContext
или использовать интерфейс springs FactoryBean
для строительства. Есть ли другой способ?
Я уже попробовал следующее без особого успеха:
Obj obj = new ThirdPartyObj("runtime constructor arg");
appContext.getAutowireCapableBeanFactory().initializeBean(obj, "Obj");
Это может быть подпружиненным, но я до сих пор не могу использовать его для запуска аспектов.
[EDIT] axtavt указал, что проблема в том, что я не использую объект, возвращенный из initializeBean(..)
.Оба упомянутых подхода работают, но только если:
Используя интерфейс ObjInterface obj = (ObjInterface) ac.getBean("obj", args);
или мы получим:
java.lang.ClassCastException: $Proxy28 cannot be cast to com.company.Obj
Не использовать интерфейс, но включить CGLIB
.Для этого требуется не приватный конструктор по умолчанию, или мы получим:
java.lang.IllegalArgumentException: Superclass has no null constructors but no arguments were given