Spring中AOP的xml方式的配置
1、什么是AOP?
AOP:Aspect Oriented Programming,面向切面编程。
OOP:Object Oriented Programming,面向对象编程。
AOP是OOP的扩展与延伸,解决OOP开发遇到的问题。
2、AOP的好处
对程序进行增强,不修改源代码的情况下,AOP可以进行权限校验,日志记录,性能监控,事务管理等。
3、Spring中AOP的由来
AOP最早由AOP联盟的组织提出的,制定了一套规范,Spring将AOP思想引入到框架中,必须遵守这套规范。
Spring一开始有自己的AOP的实现,但非常繁琐。直到出现了AspectJ,AspectJ是一个AOP的框架,Spring引入AspectJ作为自身的开发。
4、Spring底层的AOP实现原理
实现原理是动态代理。
JDK动态代理:只能对实现了接口的类产生代理。
Cglib动态代理(类似于Javassist第三方代理技术):可以对没有实现接口的类产生代理对象,生成子类对象。
写的类不要加final修饰,不然动态代理实现不了。
注意:
Spring底层会对代理的类判断是否实现了接口,实现了接口就用JDK动态代理,没有实现接口就会用Cglib动态代理。
5、AOP中的相关术语
Joinpoint:连接点,可以被拦截到的点。 例如:可以被增强的方法。
Pointcut:切入点,真正被拦截到的点。 例如:真正被增强的方法。
Advice:通知,增强。 例如:增强的功能。
Introduction:引介。类层面的增强。
Target:目标对象。被增强的那个对象。
Proxy:代理对象。
Aspect:切面,多个通知和多个切入点的组合。
6、Spring的AOP的入门(AspectJ的xml方式)
(1)引入jar包,编写核心配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
</beans>
(2)编写实体类,接口,实现类
实体类:
public class Product {
private String name;
private Double price;
// .....
}
接口:
package com.pipi.string.demo1;
public interface ProductDao {
void save();
String delete();
void update();
void find();
}
实现类:
package com.pipi.string.demo1;
public class ProductDaoImpl implements ProductDao {
@Override
public void save() {
System.out.println("ProductDaoImpl中的save()方法执行了!");
}
@Override
public String delete() {
System.out.println("ProductDaoImpl中的delete()方法执行了!");
return "张三";
}
@Override
public void update() {
System.out.println(