Spring的AOP的基於AspectJXML開發
阿新 • • 發佈:2018-12-09
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的函式完成