Q:AOP是什么?
A:AOP(Aspect Oriented Programming)面向切面编程,一种编程范式,指导开发者如何组织程序结构
作用:在不惊动原始设计的基础上为其进行功能增强
Spring理念:无入侵式
1.导入依赖:
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>
2.定义接口和实现类:
BookDao接口:
public interface BookDao {
void save();
void update();
}
BookDaoImpl实现类:
@Repository
public class BookDaoImpl implements BookDao {
@Override
public void save() {
//打印系统当前时间
//不用管这个方法,只是为了和update作比较
System.out.println(System.currentTimeMillis());
System.out.println("book dao save...");
}
@Override
public void update() {
System.out.println("book dao update...");
}
}
3.SpringConfig配置类:
@Configuration
@ComponentScan("com.tg")
//开启Spring对AOP注解驱动支持
@EnableAspectJAutoProxy
public class SpringConfig {
}
4.在aop文件夹中创建MyAdvice类:
使用@Component将这个类注册到spring容器中
@Component
//作用是把当前类标识为一个切面供容器读取
@Aspect
public class MyAdvice {
//定义切入点
@Pointcut("execution(void com.tg.dao.BookDao.update())")
private void pt(){
}
//定义要执行的方法以及@Before/@After注解决定前后顺序
@Before("pt()")
public void method(){
System.out.println(System.currentTimeMillis());
}
}
5.测试:
public class App {
public static void main(String[] args) {
ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
BookDao bookDao = ctx.getBean(BookDao.class);
bookDao.update();
}
}
测试结果: