1. 程式人生 > >Spring的AOP的基於AspectJXML開發

Spring的AOP的基於AspectJXML開發

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的函式完成
      • [訪問修飾符] 方法返回值 包名.類名.方法名(引數)