Home > Article > Web Front-end > The aop page is not applicable in the controller_html/css_WEB-ITnose
The problem is as follows
Today I found that aop cannot be used in the controller. It can be used if it is replaced with service. It can also be used with junit-test, but it cannot be placed under tomcat. I am confused. Got it! ! !
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 configuration, plus these two
<aop:aspectj-autoproxy proxy-target-class="true"/> <bean id="tutorLoginAop" class="com.tutor.normal.filter.TutorLoginAop" />
Nice, it’s obviously the same as the one on the Internet, what’s going on
After a day of troubleshooting, I finally found the problem. It turns out that the spring configuration should be written in springMVC, not in spring
What does it mean? Look at the configuration of my 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>
It turns out that I wrote the configuration in applicationContext.xml. Of course it won’t work. TVT needs to be written in spring-servlet.xml. . .