spring学习中遇到的问题之一

问题:

org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat

原因:

在使用aop的时候,书写execution出现错误

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

package com.example.demo.aopdemo;

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class MyAopTest {

             @Pointcut("execution(public * *(..))")
            public void startaop(){};
            @Before("startaop()")
            private void beforhello()
            {
                 System.out.printf("before ---hello");
             }
             @After("startaop()")
             private void afterHello()
             {
                 System.out.printf("after ---hello");
             }
}

  修改之后就变成了  (按道理我之前使用 execution(public * *(..)) 也应该没得啥问题)

@Pointcut("execution(public * com.example.demo.Controller..*.*(..))")

为此回顾的了一下execution 的用法

   1  模式介绍

Execution(<修饰符模式(public private protected>?<返回类型模式 void string int><方法名模式com.test.Hello.sayhello>(<参数模式>)<异常模式>?) 除了返回类型模式 方法名参数和参数模式 外,其他项都是可以选择的。

    这是匹配所有public 类型的方法

execution(public * *(..))

    匹配所有以set结尾的连接点

execution(* set*(..))

   

   匹配AccountServivce 接口的所有方法

Execution(* com.xyz.service.AccountService.*(..))

匹配service包中所有的方法


Execution(* com.xyz.service..(..))

 匹配service包及其子包中得所有方法

Execution(* com.xyz.service…(..))

匹配joke(String,int)方法且joke方法的第一个入参是String ,第二个入参是int

Execution(* joke(String,int))

匹配目标类中joke方法,该方法第一个参数为String 后面可以有任意个入参且入参类型不限 joke(String s1),joke(String s1,String s2)  joke(String s1,String s2,String s3)

Execution(* joke(String,..))

 

 

2  使用aop,这里使用javaconfig来实现

   Controller


import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UseController {

    @RequestMapping("/esProduct")
    public void aopbefor()
    {
        System.out.println("11111111111111");
    }
}

  切面java

package com.example.demo.aopdemo;

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class MyAopTest {

            @Pointcut("execution(public * com.example.demo.Controller..*.*(..))")
            public void startaop(){};
            @Before("startaop()")
            private void beforhello()
            {
                 System.out.printf("before ---hello");
             }
             @After("startaop()")
             private void afterHello()
             {
                 System.out.printf("after ---hello");
             }
}

    pom.xml文件



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.4.2
         
    
    com.example
    demo
    0.0.1-SNAPSHOT
    demo
    Demo project for Spring Boot
    
        11
    
    
        
            org.springframework.boot
            spring-boot-starter
        
        
            org.springframework.boot
            spring-boot-starter-aop
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    


 spring学习中遇到的问题之一_第1张图片

实现效果:

spring学习中遇到的问题之一_第2张图片

 

 

注意:在之前的spring mvc 使用的时候,需要使用@EnableAutoProxy 注解开启aspectj自动注解 ,同时需要将aspect java类添加到容器中(@Bean,而Springboot使用的是@Component注解)

        如果springmvc使用的xml的话需要  

     

     

你可能感兴趣的:(java,aop)