Java 如何在Spring3中将@Aspect与@Controller结合起来?
我正在尝试使用@Controller、基于注释的方法来设置Spring3WebMVC项目Java 如何在Spring3中将@Aspect与@Controller结合起来?,java,model-view-controller,spring,aop,aspectj,Java,Model View Controller,Spring,Aop,Aspectj,我正在尝试使用@Controller、基于注释的方法来设置Spring3WebMVC项目 package my.package @Controller @RequestMapping("/admin/*") public class AdminMultiActionController { @RequestMapping(value = "admin.htm", method = RequestMethod.GET) public String showAdminSection() {
package my.package
@Controller
@RequestMapping("/admin/*")
public class AdminMultiActionController {
@RequestMapping(value = "admin.htm", method = RequestMethod.GET)
public String showAdminSection() {
return "admin";
}
My 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" />
现在这就是它停止工作的地方。
“fooo”从未打印过
可能是这样的,因为切入点(拼写?)对象必须是spring管理的Bean,而my@Controller与DefaultAnnotationHandlerMapping的组合不会被认为是这样的吗
任何帮助都将不胜感激。如果我忘了提供任何信息,请询问。
希望有人能帮我
非常感谢 切入点方法定义切入点,它不会在匹配时被调用,您需要定义实际发生的事情。e、 g
@Before("foo()")
public void beforeFoo(JoinPoint joinPoint) {
System.out.println("foooo");
}
啊,上帝。。终于成功了 谢谢你的回复 对于好奇的人:
对于第二个chzbrgla,对于稍后查看的人(如我),我的问题在将控制器组件扫描和aop配置移动到dispatcher servlet后得到解决,如下所示:
...
<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>
...
当我尝试使用上面提到的方面时,我得到了以下由以下原因引起的错误:java.lang.IllegalArgumentException:error at::0在org.aspectj.weaver.tools.PointcutParser.parsePointcutExpression(PointcutParser.java:302)找不到引用的切入点控制器位于org.springframework.aop.aspectj.AspectJExpressionPointcut.buildPointcutExpression(AspectJExpressionPointcut.java:207),位于org.springframework.aop.aspectj.AspectJExpressionPointcut.buildPointcutExpression。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。请建议
<aop:aspectj-autoproxy/>
<bean id="securityInterceptor" class="my.package.service.SecurityInterceptor"/>
package my.package.service
@Aspect
public class SecurityInterceptor {
@Pointcut("execution(* showAdminSection(..))")// the pointcut expression
private void foo() {
System.out.println("fooo");
}// the pointcut signature
@Before("foo()")
public void beforeFoo(JoinPoint joinPoint) {
System.out.println("foooo");
}
...
<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>
...
@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.
}