"Ручное" плетение бобов с использованием @EnableAspectJAutoProxy найденных аспектов

Я использую полностью не-XML Spring установку, и я успешно использую @EnableAspectJAutoProxy со мной @Configuration класс и найти мои аспекты классов с комбинацией @Aspect а также @Component,

Но я дошел до того, что мне нужно по требованию переплетать / улучшать экземпляры, которые не были созданы в контексте Spring, но все, что я могу найти, - это как это сделать с помощью ProxyFactory, Но тогда мне нужно вручную добавить советы с ProxyFactory.addAdvice(..)с которым я уже писал однажды (например) @Before,

Я не хочу переписывать их снова.

Есть ли способ получить ссылку на фабрику, которая (я полагаю?) Создана внутри, используя @EnableAspectJAutoProxy аннотаций? Чтобы я мог сделать что-то вроде:

@Autowired
private AspectJAutoProxyInstanceFactory f; // made up class, of course
[...]
Object bean = f.weave(obj);

Или создайте экземпляр фабрики, которая может выяснить, какие советы уже есть в моем приложении:

// Also a made up class, of course.
ApplicationContextAwareProxyFactory f = new ApplicationContextAwareProxyFactory(applicationContext);
Object bean = f.weave(obj);

Я пытался осмотреться, но не могу найти ответ. Может быть, я просто недостаточно хорош в поиске. Спасибо заранее, если вы можете мне помочь!

1 ответ

Решение

Надеюсь, я правильно понял вопрос.

Для этого вы можете использовать время компиляции без тиснения. Он гораздо более мощный, чем подход Spring, основанный на прокси, и вам не нужно менять аспекты, потому что Spring уже позаимствовал аннотацию @Aspect у AspectJ.

Вы можете легко добиться этого с помощью maven и http://mojo.codehaus.org/aspectj-maven-plugin/

Вот пример конфигурации:

<plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>aspectj-maven-plugin</artifactId>
        <version>1.4</version>
        <executions>
          <execution>
            <goals>
              <goal>compile</goal>       <!-- use this goal to weave all your main classes -->
              <goal>test-compile</goal>  <!-- use this goal to weave all your test classes -->
            </goals>
          </execution>
        </executions>
      </plugin>

Если вы хотите создать код из стороннего jar-файла, настройте его следующим образом:

<plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>aspectj-maven-plugin</artifactId>
        <version>1.4</version>
        <configuration>
          <weaveDependencies>
            <weaveDependency>
              <groupId>org.agroup</groupId>
              <artifactId>to-weave</artifactId>
            </weaveDependency>
            <weaveDependency>
              <groupId>org.anothergroup</groupId>
              <artifactId>gen</artifactId>
            </weaveDependency>
          </weaveDependencies>
        </configuration>
        <executions>
          <execution>
            <goals>
              <goal>compile</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
Другие вопросы по тегам