博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring的xml文件配置方式实现AOP
阅读量:5342 次
发布时间:2019-06-15

本文共 3493 字,大约阅读时间需要 11 分钟。

配置文件与注解方式的有很大不同,多了很多配置项。

beans2.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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/aop 
           http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
     <aop:aspectj-autoproxy />
    <bean id="personService" class="test.spring.service.impl.PersonServiceBean"></bean>
    <bean id="myInterceptor" class="test.spring.aop.MyInterceptor2"></bean>
    <aop:config>
           <aop:aspect id="myAspect" ref="myInterceptor">
                    <aop:pointcut  id="myPointCut"  expression="execution(* test.spring.service.impl.PersonServiceBean.*(..))" />
                    <aop:before pointcut-ref="myPointCut" method="doAccessCheck" />
                    <aop:after-returning pointcut-ref="myPointCut"  method="doAfterReturning" />
                    <aop:after-throwing pointcut-ref="myPointCut"  method="doAfterThrowing" />
                    <aop:around pointcut-ref="myPointCut" method="doAround" />
                    <aop:after pointcut-ref="myPointCut" method="doAfter" />
           </aop:aspect>
    </aop:config>
</beans> 

      切面的切入点语法定义

 

  • 拦截test.spring.service.impl.PersonServiceBean下的所有方法
    expression="execution(* test.spring.service.impl.PersonServiceBean.*(..))"
  • 拦截test.spring.service.impl子包下的所有类的所有方法
    expression="execution(* test.spring.service.impl..*.*(..))"
  • 拦截test.spring.service.impl.PersonServiceBean下的所有返回值为String类型的方法
    expression="execution(java.lang.String test.spring.service.impl.PersonServiceBean.*(..))"
  • 拦截test.spring.service.impl.PersonServiceBean下的所有方法中第一个参数类型为String的方法
    expression="execution(* test.spring.service.impl.PersonServiceBean.*(java.lang.String,..))"

 

 

[java] 
 
 
  1. package test.spring.service.impl;  
  2.   
  3. import test.spring.service.PersonService;  
  4.   
  5. //代理对象实现目标对象所有接口  
  6. public class PersonServiceBean implements PersonService {  
  7.   
  8.     public PersonServiceBean() {  
  9.   
  10.     }  
  11.   
  12.     @Override  
  13.     public void save(String name) {  
  14.         System.out.println("save()->>" + name);  
  15.         throw new RuntimeException(">>----自定义异常----<<");  
  16.     }  
  17.   
  18.     @Override  
  19.     public String getResult() {  
  20.         return "getResult()==>>返回结果";  
  21.     }  
  22.   
  23. }  
[java] 
 
 
  1. package test.spring.aop;  
  2.   
  3. import org.aspectj.lang.ProceedingJoinPoint;  
  4.   
  5. public class MyInterceptor2 {  
  6.   
  7.     public void doAccessCheck() {  
  8.         System.out.println("前置通知-->>");  
  9.     }  
  10.   
  11.     public void doAfterReturning() {  
  12.         System.out.println("后置通知-->>");  
  13.     }  
  14.   
  15.     public void doAfter() {  
  16.         System.out.println("最终通知");  
  17.     }  
  18.   
  19.     public void doAfterThrowing() {  
  20.         System.out.println("异常通知-->");  
  21.     }  
  22.   
  23.     public Object doAround(ProceedingJoinPoint pJoinPoint) throws Throwable {  
  24.         System.out.println("环绕通知");  
  25.         // 这里如果pJoinPoint.proceed()不执行,后面拦截到的方法都不会执行,非常适用于权限管理  
  26.         Object result = pJoinPoint.proceed();  
  27.         System.out.println("退出");  
  28.         return result;  
  29.     }  
  30.   
  31. }  
[java] 
 
 
  1. package test.spring.junit;  
  2.   
  3. import org.junit.Test;  
  4. import org.springframework.context.support.AbstractApplicationContext;  
  5. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  6.   
  7. import test.spring.service.PersonService;  
  8.   
  9. public class AOPTest3 {  
  10.   
  11.     @Test  
  12.     public void test() {  
  13.         AbstractApplicationContext aContext = //  
  14.         new ClassPathXmlApplicationContext("beans2.xml");  
  15.         PersonService pService = (PersonService) aContext  
  16.                 .getBean("personService");  
  17.         pService.save("LinDL");  
  18.         pService.getResult();  
  19.         aContext.close();  
  20.     }  
  21.   
  22. }  

 

 
 

转载于:https://www.cnblogs.com/hoobey/p/6106272.html

你可能感兴趣的文章
常用配置文件
查看>>
Python全栈之路系列之流程控制
查看>>
# 20155209 2016-2017-2 《Java程序设计》第六周学习总结
查看>>
shell 脚本获取数组字符串长度
查看>>
Spark性能优化指南——基础篇
查看>>
Adapter 适配器模式 MD
查看>>
Linux使用fdisk进行磁盘管理
查看>>
Linux设置服务自启动(转载)
查看>>
ASP.Net文件下载-使用流输出
查看>>
限定textbox中只能输入数字的小方法
查看>>
Android 手机app 嵌入网页操作
查看>>
Android:控件布局(表格布局)TableLayout
查看>>
VMWare Workstation虚拟机网卡工作模式及配置方法
查看>>
开始学习Angular Mobile UI
查看>>
浅谈C语言中的联合体
查看>>
Photoshop独立安装包下载页面
查看>>
使用git获取远程分支
查看>>
.Net开发之Request处理
查看>>
看了才知道!伊朗黑客组织原来这么牛
查看>>
杂七杂八的一些板子
查看>>