Чтобы поместить аспект в HandlerMethod в класс, помеченный @Controller
в Spring 3.1, необходимо иметь атрибут proxy-target-class="true"
в элементе aspectj-autoproxy
.Вам также необходимо иметь библиотеки CGLIB и ASM в качестве зависимости в вашем файле WAR / EAR.Вы можете либо указать свой аннотированный класс аспектов в виде компонента и использовать aop:include
, как указано выше, либо вы можете опустить aop:include
и добавить фильтр, подобный этому, в элементе сканирования компонента:
<context:component-scan>
<context:include-filter type="aspectj"
expression="com.your.aspect.class.Here"/>
</context:component-scan>
Я не знаю, является ли это требованием только в результате Spring 3.1, но я знаю, что без этого вы не сможете поместить аспект в свой контроллер HandlerMethod.Вы получите сообщение об ошибке, похожее на:
Caused by: java.lang.IllegalArgumentException: object is not an instance of declaring class
HandlerMethod details:
Controller [$Proxy82]
Method [public void com.test.TestController.testMethod(java.security.Principal,javax.servlet.http.HttpServletResponse) throws javax.servlet.ServletException]
Resolved arguments:
[0] [null]
[1] [type=com.ibm.ws.webcontainer.srt.SRTServletResponse] [value=com.ibm.ws.webcontainer.srt.SRTServletResponse@dcd0dcd]
Это не требуется, если ваш аспект относится к методу в классе, который не является контроллером