[SPRING] Spring 3에서 @Aspect와 @Controller를 어떻게 조합 할 수 있습니까?
SPRINGSpring 3에서 @Aspect와 @Controller를 어떻게 조합 할 수 있습니까?
@Controller, 주석 기반 접근 방식을 사용하여 Spring 3 웹 MVC 프로젝트를 설정하려고합니다.
package my.package
@Controller
@RequestMapping("/admin/*")
public class AdminMultiActionController {
@RequestMapping(value = "admin.htm", method = RequestMethod.GET)
public String showAdminSection() {
return "admin";
}
dispatcher-servlet에는 다음 컨트롤러 처리기가 있습니다.
<context:component-scan base-package="my.package" />
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
webapp은 제공된 maven 아티팩트와 함께 잘 실행됩니다.
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.0.2.RELEASE</version>
</dependency>
이제 @AspectJ AOP를 추가하려고합니다. libs있어 :
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.9</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.6.9</version>
</dependency>
내 applicationContext.xml에 추가 :
<aop:aspectj-autoproxy/>
applicationContext.xml에 관련 Bean을 작성했는지 확인하십시오.
<bean id="securityInterceptor" class="my.package.service.SecurityInterceptor"/>
@Aspect를 시작했다.
package my.package.service
@Aspect
public class SecurityInterceptor {
@Pointcut("execution(* showAdminSection(..))")// the pointcut expression
private void foo() {
System.out.println("fooo");
}// the pointcut signature
이제 이것이 작동을 멈췄습니다. "fooo"는 절대로 인쇄되지 않습니다.
Pointcutted (철자?) 객체가 Spring 관리 빈이어야하고 DefaultAnnotationHandlerMapping과 함께 @Controller가 그렇게 인식되지 않기 때문에 가능합니까?
어떤 도움을 주시면 감사하겠습니다. 정보를 잊어 버린 경우, 질문하십시오. 누군가가 나를 도와 줄 수 있기를 바랍니다.
고마워요!
해결법
-
==============================
1.포인트 컷 메소드는 pointcut을 정의하고, 일치에 대해 호출되지 않으며, 실제로 발생할 일을 정의해야합니다. 예를 들어,
포인트 컷 메소드는 pointcut을 정의하고, 일치에 대해 호출되지 않으며, 실제로 발생할 일을 정의해야합니다. 예를 들어,
@Before("foo()") public void beforeFoo(JoinPoint joinPoint) { System.out.println("foooo"); }
-
==============================
2.아 세상 ... 마침내 그게 효과가있어!
아 세상 ... 마침내 그게 효과가있어!
답장을 보내 주셔서 감사합니다.
호기심에 찬 :
-
==============================
3.두 번째 chzbrgla에 대해 나 (나 같은)를 나중에 보게되면, 컨트롤러 구성 요소 스캐닝과 aop 설정을 디스패처 서블릿으로 이동 한 후 다음과 같이 내 문제가 해결됩니다.
두 번째 chzbrgla에 대해 나 (나 같은)를 나중에 보게되면, 컨트롤러 구성 요소 스캐닝과 aop 설정을 디스패처 서블릿으로 이동 한 후 다음과 같이 내 문제가 해결됩니다.
... <context:component-scan base-package="com.mypackage.controller"/> <!-- Configure aspects. --> <bean id="myAspect1" class="com.mypackage.intercept.SiteAccessAspect"/> <aop:aspectj-autoproxy proxy-target-class="true"> <aop:include name="myAspect1" /> </aop:aspectj-autoproxy> ...
보시다시피, 구성 요소 검색은 여전히 내 경우에 효과가있었습니다. Dispatcher 서블릿으로 이동하면 모두 해결됩니다.
apspect (이 경우 myApect1)는 다음과 같이 구성되었습니다.
@Pointcut("within(@org.springframework.stereotype.Controller *)") public void controller() {} @Pointcut("execution(* *(..))") public void method() {} @Before("controller() && method()") public void doAccessCheck(JoinPoint joinPoint) { System.out.println(joinPoint.getSignature()); // For testing purposes. }
from https://stackoverflow.com/questions/3991249/how-can-i-combine-aspect-with-controller-in-spring-3 by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring Security 3- 사용자 이름 / 비밀번호 매개 변수를 커스터마이징하는 방법은 무엇입니까? (0) | 2019.03.22 |
---|---|
[SPRING] REST 컨트롤러에서 일대 다 관계가있는 엔티티의 재귀 적 JSON 뷰 (0) | 2019.03.22 |
[SPRING] 스프링 MVC; URL에서 파일 확장을 피 하시겠습니까? (0) | 2019.03.22 |
[SPRING] spring-mvc-chat github 애플리케이션 컨텍스트에서 Spring MVC의 DeferredResult 클래스 이해하기 (0) | 2019.03.22 |
[SPRING] Spring 4 WebSocket 앱 (0) | 2019.03.22 |