Acerca del método de aspecto del método @RequestMapping de spring aop para spring mvc, la solución no se ejecuta

1. El fenómeno del problema

1. Usando Spring MVC, cree una clase de controlador y un método @RequestMapping

@Controller
@RequestMapping("/product")
public class ProductController {
    
    
    @Autowired
    ProductServiceImpl productService;

    @RequestMapping("/findAll.do")
    public ModelAndView findAll(@RequestParam(name = "pageNum")Integer pageNum, @RequestParam(name = "pageSize")Integer pageSize) throws MyException {
    
    
        System.out.println("执行findall......");

2. Use el método en la clase de controlador de aspecto Spring AOP

@Component("agentController")
@Aspect
public class AgentController {
    
    
    private Date visitTime;
    private Date endTime;
    private int executionTime;   //执行时长
    private Class clazz;         //执行的类
    private Method method;       //执行的方法
    private SysLog sysLog = new SysLog();

    @Pointcut("execution(* com.mediacomm.controller.*.*(..))")
    public void service(){
    
    }
    @Autowired
    private SysLogService sysLogService;
    @Autowired
    private HttpServletRequest request;

    @Before("service()")
    public void beforeAdvice(JoinPoint pro) throws NoSuchMethodException, ParseException {
    
    

        System.out.println("前置通知......"+sysLog.getId());

3. Confiar en la idea de ver el objetivo del aspecto del método de notificación previa es el éxito del proxy
inserte la descripción de la imagen aquí
4. Sin embargo, la situación real es que la notificación previa no interviene en absoluto y la consola no imprime fuera: notificación previa...

Dos, la solución

Motivos:
1. Configuro aop en función de las anotaciones, por lo que necesito agregar la
declaración de apertura de <aop:aspectj-autoproxy></aop:aspectj-autoproxy> en el archivo de configuración de primavera
2. Pero estoy en la configuración de primavera Se agrega el escaneo de anotaciones de archivos para ignorar

<context:component-scan base-package="com.mediacomm">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

3. Por lo tanto, no hay un bean de clase Controller en el contenedor Spring
4. Por lo tanto, no se puede encontrar ningún método correspondiente para el punto de entrada aop
Solución:
configure <aop:aspectj-autoproxy></aop:aspectj-autoproxy> en el responsable escaneando @ En el archivo de configuración de springmvc anotado por Controller, la salida de la consola después de volver a ejecutar:

前置通知......null

Conclusión:
debe agregar <aop:aspectj-autoproxy></aop:aspectj-autoproxy> de acuerdo con el archivo de configuración de la entidad de bean creada por el objeto de destino de su método de aspecto

Supongo que te gusta

Origin blog.csdn.net/weixin_42717117/article/details/119759182
Recomendado
Clasificación