Spring AOP 切面没有执行

我想试试aop怎么用,但是写好之后没有调用切面,而IDEA却找到了我的切面和切入点。。


配置类:


@Configuration

@EnableAspectJAutoProxy

@ComponentScan

public class CarConfig {

    public static void main(String[] args) {

        AnnotationConfigApplicationContext context =

                        new AnnotationConfigApplicationContext(CarConfig.class);

        System.out.println("-------------Spring context loaded-------------");

        Ferrari ferrari = context.getBean(Ferrari.class);

        Driver driver = new Driver(new License("s3j3"));

        int time = driver.drive(ferrari, 1000);

        System.out.println("spent " + time + " hours");

        System.out.println("-------------Spring context is going to close-----------");

        context.close();

    }

}

Driver:


public class Driver {


    private License license;


    public Driver(License license) {

        this.license = license;

    }


    public int drive(Car car, int distance) {

        if (license == null) return -1;

        if (distance <= 0) return 0;

        if (car == null || car.getSpeed() <= 0) return -1;

        return distance / car.getSpeed() + 1;

    }

}

Aspect:


@Aspect

@Component

public class Monitor {


    @Pointcut(value = "execution(int cn.gaoyuexiang.spring.demo.test.aop.driver.Driver" +

                    ".drive(cn.gaoyuexiang.spring.demo.test.aop.car.Car, int)) " +

                    "&& args(car, distance)")

    public void drive(Car car, int distance) {}


    @Before("drive(car, distance)")

    public void aboard(Car car, int distance) {

        String carName = car.getClass().getName();

        System.out.println("the driver will drive a " + carName +

                        " to run " + distance + " kilometers");

    }

}

目录结构:


.

├── aop

│   └── Monitor.java

├── car

│   ├── Car.java

│   └── Ferrari.java

├── CarConfig.java

└── driver

    ├── Driver.java

    └── license

        └── License.java

Spring的输出发现Monitor已经被扫描到了,但是切面却没有执行,不知道是为什么



拉莫斯之舞
浏览 1462回答 1
1回答

繁花不似锦

你的Driver类需要声明为一个Spring Bean。而且Driver类是你自己new的,所以Spring没法知道它是什么时候被实例化的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java