spring и aspectj, метод перехвата непрокси-объекта - PullRequest
3 голосов
/ 18 ноября 2010

Я хочу перехватить метод из объекта без прокси.

У меня есть экземпляр класса MyClass myClassInstance=new MyClass(), и я хочу перехватить вызов myClassInstance методов.

Я знаю всехорошо работает с прокси, но мне нужен аспект на не прокси.

Возможно ли это?

Спасибо.

Ответы [ 3 ]

5 голосов
/ 18 ноября 2010

Возможно, но не желательно.

Вы можете использовать @Configurable, и AspectJ будет перехватывать вызовы. Прочитайте 7.8.1. Использование AspectJ для зависимости добавьте объекты домена с разделом Spring документации об этом.

Короче говоря - AspectJ подключает некоторую «магию» либо времени компиляции, либо времени загрузки (с соответствующим ткачом), который изменяет классы так, что они становятся частью контекста Spring.

Почему я думаю, что это нежелательно - это темная магия, которая происходит, изменяя структуру классов. Это не объектно-ориентированный подход, и я думаю, что его будет сложно поддерживать. Представьте, что через 6 месяцев ваш коллега отлаживает неприятную проблему. Могут пройти дни, прежде чем он поймет, что это волшебство происходит. Это мнение является подчинением, хотя. Функциональность есть, и если она вам нужна - используйте ее.

1 голос
/ 18 ноября 2010

Используя Spring, я не верю в это ( Я, кажется, ошибаюсь ), используя AspectJ. Я считаю, что вы можете, пока вы компилируете весь код с помощью компилятора AspectJ .Однако я никогда не пробовал.

0 голосов
/ 18 ноября 2010

Весной можно включить время загрузки. Затем загрузчик классов вплетает любые аспекты, которые вы определяете, в ваши классы при их загрузке, независимо от того, создаются ли они в Spring.

Вам нужно будет включить LTW, добавив эту строку в ваш контекстный файл:

См: http://static.springsource.org/spring/docs/3.0.0.M4/spring-framework-reference/html/ch07s08.html#aop-aj-ltw

...