我想试试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
已经被扫描到了,但是切面却没有执行,不知道是为什么
繁花不似锦
相关分类