问题如下
今天发现aop不能在controller里面不能用,换成service能用,用junit-test也行,就是放到tomcat下面不行,我就纳闷了!!!
package com.tutor.normal.filter;import javax.annotation.Resource;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.After;import org.aspectj.lang.annotation.AfterReturning;import org.aspectj.lang.annotation.AfterThrowing;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.aspectj.lang.annotation.Pointcut;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import com.tutor.normal.service.ITutorUserService;/** * * @author jinghao.liang * */@Aspectpublic class TutorLoginAop { private static Logger log = LoggerFactory.getLogger(TutorLoginAop.class); @Resource(name = "tutorUserService") private ITutorUserService tutorUserService; @Pointcut("execution(* com.tutor.normal.controller..*.*(..))") private void anyMethod() { }// 定义一个切入点 @Before("anyMethod() && args(name)") public void doAccessCheck(String name) { System.out.println(name); System.out.println("前置通知"); } @AfterReturning("anyMethod()") public void doAfter() { System.out.println("后置通知"); } @After("anyMethod()") public void after() { System.out.println("最终通知"); } @AfterThrowing("anyMethod()") public void doAfterThrow() { System.out.println("例外通知"); } @Around("anyMethod()") public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable { System.out.println("进入环绕通知"); Object object = pjp.proceed();// 执行该方法 System.out.println("退出方法"); return object; }}
spring配置,加上这两个
<aop:aspectj-autoproxy proxy-target-class="true"/> <bean id="tutorLoginAop" class="com.tutor.normal.filter.TutorLoginAop" />
尼玛吖,明明和网上的一样吖,到底什么情况
经过一天的排查终于找到问题了,原来是spring的配置应该写到springMVC里,而不是spring里面
什么意思呢?看我web.xml的配置
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:spring/applicationContext.xml</param-value> </context-param> <!-- Spring MVC --> <servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/spring-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
原来我把配置写到了applicationContext.xml里面当然不行啦TVT,要写到spring-servlet.xml这个里面。。。