package com.thereisnospon.spring.demo.course.imp.c004_aop;
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.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
public class T002_Aop02_TargetThis {
public interface IService {
void doService();
}
public static class BookService implements IService {
@Override
public void doService() {
System.out.println("doService");
}
public void doBook() {
System.out.println("doBook");
}
}
@Aspect
public static class BookAspect {
/**
* 判断目标类是否按类型匹配指定类来决定连接点是否匹配
* <p>
* instance of IService 的类的所有方法(包括非接口的方法)
*/
@Pointcut("target(com.thereisnospon.spring.demo.course.imp.c004_aop.T002_Aop02_TargetThis.IService)")
public void service() {
}
@After("service()")
public void afterMethod() {
System.out.println("afterMethod");
}
/**
* 一般情况下,使用this()和target()来匹配定义切点,二者是等效的
*/
@Before("this(com.thereisnospon.spring.demo.course.imp.c004_aop.T002_Aop02_TargetThis.IService)")
public void beforeMethod() {
System.out.println("beforeMethod");
}
}
@Configuration
@EnableAspectJAutoProxy(proxyTargetClass = true)
public static class Config {
@Bean
public BookAspect bookAspect() {
return new BookAspect();
}
@Bean
public BookService bookService() {
return new BookService();
}
}
public static void test1() {
ApplicationContext context = new AnnotationConfigApplicationContext(Config.class);
BookService bookService = (BookService) context.getBean("bookService");
bookService.doService();
bookService.doBook();
/* 输出:
beforeMethod
doService
afterMethod
beforeMethod
doBook
afterMethod
*/
}
public static void main(String[] args) {
test1();
}
}
spring aop 002: target && this
最新推荐文章于 2023-03-12 00:54:22 发布