1 AOP 的简介
AOP思想最早由AOP联盟组织提出,Spring是使用这种思想比较好的框架。AspectJ是一个AOP框架,Spring引入AspectJ作为滋生AOP的开发。这个AspectJ在Spring是使用非常广泛的,Spring自己也有自己的的AOP实现方法,由于太繁琐,基本弃用了。
2 AOP开发中的的相关术语
Joinpoint:连接点可以被拦截到的点
Pointcut:切入点,正真被拦截到的点
Advice:通知,增强(方法层面的增强)(个人理解:就是要附加的方法,在原方法执行时要附加的方法)
Introduction:引介质*(类层面的增强)
Target:被增强的对象(就是被增强的方法所在类)
Weaving:将通知(Advice)应用到目标(Target)的过程
Proxy:一个类被植入增强后,产生的一个结果代理类
Aspect:切面,多个通知和多个切入点的组合
3 创建web项目,引入jar包
3.1 aop的相关包
3.2 spring的核心包
六个核心包不做解释了
4 Spring 的配置文件
4.1 引入aop的约束
在src下建立applicationContext.xml写入上边的粘贴上边的代码
<?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"> <!-- bean definitions here -->
</beans>
5 编写目标类完成配置
5.1 测试接口
package com.spring.heshihua.demo2;
public interface ProductDao {
public void save();
public void update();
public void find();
public void delete();
}
5.2 接口实现类
package com.spring.heshihua.demo2;
public class ProductDaoImpl implements ProductDao{
public void save() {
System.out.println("保存商品。。。。");
}
public void update() {
System.out.println("修改商品。。。。");
}
public void find() {
System.out.println("查询商品。。。。");
}
public void delete() {
System.out.println("删除商品。。。。");
}
}
5.3 bean配置
<bean id = "productDao" class = "com.spring.heshihua.demo2.ProductDaoImpl"></bean>
5.4 编写测试类同时使用了SpringJUnit
package com.spring.heshihua.demo2;
import javax.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/*
* AOP的入门
* 这里使用SpringJUit
* */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class SpringDemo2 {
@Resource(name = "productDao")
private ProductDao productDao ;
@Test
public void demo1() {
productDao.save();
productDao.find();
productDao.update();
productDao.delete();
}
}
6 编写切面类
package com.spring.heshihua.demo2;
/*
* 切面类
* */
public class MyAspectXml {
public void checkPri() {
System.out.println("权限校验===========");
}
}
7 将切面类交给Spring
<!-- 将切面类交给Spring管理 -->
<bean id = "myAspect" class = "com.spring.heshihua.demo2.MyAspectXml"></bean>
8 aop配置生成代理
<!-- 通过aop的配置完成对目标类产生代理 -->
<aop:config>
<!-- 表达式的哪些类的那些方法需要进行增强 -->
<aop:pointcut expression="execution(* com.spring.heshihua.demo2.ProductDaoImpl.save(..))" id="pointcut1"/>
<!-- 配置切面 -->
<aop:aspect ref = "myAspect">
<aop:before method="checkPri" pointcut-ref="pointcut1"/>
</aop:aspect>
</aop:config>
运行测试类