Spring 使用 AspectJ 进行 AOP 的开发:XML 的方式

 引入相应的 jar 包

 

 引入 Spring 的配置文件 

引入 AOP 约束:

<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>

编写目标类 

创建接口和类:
public interface OrderDao {  
public void save();  
public void update();  
public void delete();  
public void find(); 
} 
 
public class OrderDaoImpl implements OrderDao { 
 
 @Override  
 public void save() { 
  System.out.println("保存订单...");  }

 @Override  
 public void update() { 
  System.out.println("修改订单...");  } 
 
 @Override  
 System.out.println("删除订单...");  } 
 
 @Override  
 public void find() { 
  System.out.println("查询订单...");  } 

 
}

目标类的配置 

<!-- 目标类================ -->  
<bean id="orderDao" class="cn.itcast.spring.demo3.OrderDaoImpl" />    

 整合 Junit 单元测试 

引入 spring-test.jar 
 
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml")
public class SpringDemo3 { 
@Resource(name="orderDao")  
private OrderDao orderDao;    
@Test  public void demo1(){   
    orderDao.save();   
    orderDao.update();   
    orderDao.delete();   
    orderDao.find();  } 
} 


  通知类型 

  1. 前置通知 :在目标方法执行之前执行.
  2. 后置通知 :在目标方法执行之后执行
  3. 环绕通知 :在目标方法执行前和执行后执行
  4. 异常抛出通知:在目标方法执行出现 异常的时候 执行
  5. 最终通知 :无论目标方法是否出现异常 最终通知都会 执行. 

切入点表达式 

  • execution(表达式) 表达式:
  • [方法访问修饰符] 方法返回值 包名.类名.方法名(方法的参数)
  • public * cn.itcast.spring.dao.*.*(..)
  • * cn.itcast.spring.dao.*.*(..)
  • * cn.itcast.spring.dao.UserDao+.*(..)
  • * cn.itcast.spring.dao..*.*(..) 

编写一个切面类 

public class MyAspectXml { 
 // 前置增强  public void before(){ 
  System.out.println("前置增强===========");  } } 

配置完成增强 

<!-- 配置切面类 -->  
<bean id="myAspectXml" class="cn.itcast.spring.demo3.MyAspectXml"></bean>   
 <!-- 进行 aop 的配置 -->  

<aop:config> 
  <!-- 配置切入点表达式:哪些类的哪些方法需要进行增强 -->   
  <aop:pointcut expression="execution(* cn.itcast.spring.demo3.OrderDao.save(..))" id="pointcut1"/> 

  <!-- 配置切面 -->   
  <aop:aspect ref="myAspectXml">    <aop:before method="before" pointcut-ref="pointcut1"/>   
  </aop:aspect>  
</aop:config>

其他的增强的配置: 

<!-- 配置切面类 -->  
<bean id="myAspectXml" class="cn.itcast.spring.demo3.MyAspectXml"></bean>  
 
 <!-- 进行 aop 的配置 -->  
<aop:config> 
  <!-- 配置切入点表达式:哪些类的哪些方法需要进行增强 -->   
<aop:pointcut expression="execution(* 
cn.itcast.spring.demo3.*Dao.save(..))" id="pointcut1"/>   
<aop:pointcut expression="execution(* cn.itcast.spring.demo3.*Dao.delete(..))" id="pointcut2"/>   
<aop:pointcut expression="execution(* cn.itcast.spring.demo3.*Dao.update(..))" id="pointcut3"/>   
<aop:pointcut expression="execution(* cn.itcast.spring.demo3.*Dao.find(..))" id="pointcut4"/> 

  <!-- 配置切面 -->   
<aop:aspect ref="myAspectXml">    
<aop:before method="before" pointcut-ref="pointcut1"/>    
<aop:after-returning method="afterReturing" pointcut-ref="pointcut2"/>    
<aop:around method="around" pointcut-ref="pointcut3"/>    
<aop:after-throwing method="afterThrowing" pointcut-ref="pointcut4"/>    
<aop:after method="after" pointcut-ref="pointcut4"/>   
</aop:aspect>  
</aop:config> 

猜你喜欢

转载自blog.csdn.net/qq_40612528/article/details/85140027