推荐先阅读
:Spring全家桶
案例设定:测算接口执行效率.
简化设定:在方法执行前输出当前系统时间。
开发模式:XML or 注解
思路分析:
1.导入坐标(pom.xml)
2.制作连接点(原始操作,Dao接口与实现类)
3.制作共性功能(通知类与通知)
4.定义切入点
5.绑定切入点与通知关系(切面)
实现:
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.10.RELEASE</version> </dependency>
<dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.4</version> </dependency> </dependencies>
|
public interface BookDao { public void save(); public void update(); }
@Repository public class BookDaoImpl implements BookDao { public void save() { System.out.println(System.currentTimeMillis()); System.out.println("book dao save ..."); }
public void update(){ System.out.println("book dao update ..."); } }
|
@Component
@Aspect public class MyAdvice { @Pointcut("execution(void com.zx.dao.BookDao.update())") private void pt(){} @Before("pt()") public void method(){ System.out.println(System.currentTimeMillis()); } }
|
@Configuration @ComponentScan("com.zx")
@EnableAspectJAutoProxy public class SpringConfig { }
|
public class App { public static void main(String[] args) { ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class); BookDao bookDao = ctx.getBean(BookDao.class); bookDao.save(); } }
|
知识点1:@EnableAspectJAutoProxy
名称 |
@EnableAspectJAutoProxy |
类型 |
配置类注解 |
位置 |
配置类定义上方 |
作用 |
开启注解格式AOP功能 |
知识点2:@Aspect
名称 |
@Aspect |
类型 |
类注解 |
位置 |
切面类定义上方 |
作用 |
设置当前类为AOP切面类 |
知识点3:@Pointcut
名称 |
@Pointcut |
类型 |
方法注解 |
位置 |
切入点方法定义上方 |
作用 |
设置切入点方法 |
属性 |
value(默认):切入点表达式 |
知识点4:@Before
名称 |
@Before |
类型 |
方法注解 |
位置 |
通知方法定义上方 |
作用 |
设置当前通知方法与切入点之间的绑定关系,当前通知方法在原始切入点方法前运行 |