关于带注释的控制器的Spring AOP建议

我试图在带注释的控制器之后使用AOP进行一些处理。一切都在正常运行,但没有执行建议。

这是控制器代码:

@Controller

public class HomeController {

@RequestMapping("/home.fo")

public String home(ModelMap model) {

model = new ModelMap();

return "home";

}

}

以及在application-config中的设置

<aop:aspectj-autoproxy/>

<bean id="testAdvice" class="com.test.TestAdvice">

</bean>

<bean id="testAdvisor"

class="org.springframework.aop.aspectj.AspectJExpressionPointcutAdvisor">

<property name="advice" ref="testAdvice" />

<property name="expression" value="execution(* *.home(..))" />

</bean>

和实际的建议

public class TestAdvice implements AfterReturningAdvice {

protected final Log logger = LogFactory.getLog(getClass());

public void afterReturning(Object returnValue, Method method, Object[] args,

Object target) throws Throwable {

logger.info("Called after returning advice!");

}

}

甚至可以对带注释的控制器提出建议吗?我正在使用Spring 2.5。

回答:

我假设你想在用注释的类中执行所有方法后提出建议@Controller。

这是一个例子:

import org.aspectj.lang.annotation.AfterReturning;

import org.aspectj.lang.annotation.Aspect;

import org.aspectj.lang.annotation.Pointcut;

@Aspect

public class ControllerAspect {

@Pointcut("within(@org.springframework.stereotype.Controller *)")

public void controllerBean() {}

@Pointcut("execution(* *(..))")

public void methodPointcut() {}

@AfterReturning("controllerBean() && methodPointcut() ")

public void afterMethodInControllerClass() {

System.out.println("after advice..");

}

}

如果你想将Spring AOP与AspectJ语法一起使用,则还需要这样的配置文件:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:aop="http://www.springframework.org/schema/aop"

xsi:schemaLocation="

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop-2.5.xsd

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

<bean id="controllerAspect" class="controller.ControllerAspect" />

<aop:aspectj-autoproxy>

<aop:include name="controllerAspect" />

</aop:aspectj-autoproxy>

</beans>

注意:使用Spring AOP,Spring容器将仅编织Spring bean。如果@Controller对象不是Spring bean,则必须使用AspectJ编织。

以上是 关于带注释的控制器的Spring AOP建议 的全部内容, 来源链接: utcz.com/qa/408226.html

回到顶部