1 约束
<?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>
2 编写接口方法和配置
编写接口
public interface ProductDao {
public void save();
public void update();
public void find();
public void delete();
}
编写目标类
public class ProductDaoImpl implements ProductDao {
@Override
public void save() {
// TODO Auto-generated method stub
System.out.println("执行了save方法");
}
@Override
public void update() {
// TODO Auto-generated method stub
System.out.println("执行了update方法");
}
@Override
public void find() {
// TODO Auto-generated method stub
System.out.println("执行了find方法");
}
@Override
public void delete() {
// TODO Auto-generated method stub
System.out.println("执行了delete方法");
}
}
spring中的配置
<bean name="productDao" class="com/spring/demo1/ProductDaoImpl.java"></bean>
编写测试类
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;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:ApplicationContext.xml")
public class SpringDemo1 {
@Resource(name="productDao")
private ProductDao productDao;
@Test
public void Demo1(){
productDao.save();
productDao.update();
productDao.find();
productDao.delete();
}
}
编写切面类
public class MyAspectXML {
public void checkPri(){
System.out.println("权限校验============");
}
}
配置
<!-- 将切面类交给spring管理 -->
<bean id="myAspectXML" class="com.ithei.xu.spring.demo1.MyAspectXML"></bean>
通过AOP的配置对目标类产生代理
<!-- 通过AOP的配置对目标类产生代理 -->
<aop:config>
<!-- 表达式来配置哪些类的哪些方法需要进行增强 -->
<aop:pointcut expression="execution(* com.xu.spring.demo1.productDaoImpl.save(..))" id="pointcut1"/>
<!-- 配置切面 -->
<aop:aspect ref="myAspectXML">
<aop:before method="checkPri" pointcut-ref="pointcut1"/>
</aop:aspect>
</aop:config>
3 spring中的通知类型
3.1前置通知
- 在目标方法执行之前进行操作
- 获得切入点的信息
- <aop:before method="" pointcut-ref=""/>
3.2后置通知
- 在目标方法执行之后进行操作
- 获取切入点信息,还可以获得方法返回值
- <aop:after-returning method="" pointcut-ref="" returning=""/>
3.3环绕通知
- 在目标方法执行之前和之后进行操作
- 可以阻止目标方法的执行
- <aop:around method="" pointcut-ref=""/>
3.4异常抛出通知
在目程序出现异常的时候进行操作
- <aop:after-throwing method="" pointcut-ref="" throwing/>
3.4最终通知
在目程序无论是否出现异常,都进行操作
- <aop:after method="" pointcut-ref=""/>
4、spring中切入点表达式
- 语法
- 基于execution的函数完成
- [访问修饰符] 方法返回值 包名.类名.方法名(参数)
- 基于execution的函数完成