一、通过Scheme配置实现AOP步骤(Spring AOP环境的环境与上篇博文

Spring接口方式相同)


  
步骤一、编写业务类:

public class AspectBusiness {
   //切入点
   
public String delete(String obj) {
       
System.out.println("==========调用切入点:" + obj +
"说:你敢删除我!===========\n");
       
return obj + ":瞄~";
    }

public
String add(String obj) {
       
System.out.println("================这个方法不能被切。。。==============
\n");
       
return obj + ":瞄~ 嘿嘿!";
    }

public
String modify(String obj) {
       
System.out.println("=================这个也设置加入切吧====================\n");

return obj + ":瞄改瞄啊!";
    }

}

步骤二、编写切面类:切面类中,包含了所有的通知

public class AspectAdvice {

//前置通知
  
public void doBefore(JoinPoint jp) {
       
System.out.println("===========进入before advice============
\n");

System.out.print("准备在" + jp.getTarget().getClass() + "对象上用");
       
System.out.print(jp.getSignature().getName() + "方法进行对 '");
       
System.out.print(jp.getArgs()[0] + "'进行删除!\n\n");

System.out.println("要进入切入点方法了 \n");
    }

// 后置通知
    
// @param jp
    
//
          
连接点
    
// @param result
    
//
        
返回值

public void
doAfter(JoinPoint jp, String result) {
       
System.out.println("==========进入after advice=========== \n");
       
System.out.println("切入点方法执行完了 \n");

System.out.print(jp.getArgs()[0] + "在");
       
System.out.print(jp.getTarget().getClass() + "对象上被");
       
System.out.print(jp.getSignature().getName() + "方法删除了");
       
System.out.print("只留下:" + result + "\n\n");
    }

// 环绕通知
    // @param
pjp
    
//
         
连接点
   
    public
object
doAround(ProceedingJoinPoint pjp) throws Throwable {
       
System.out.println("===========进入around环绕方法!=========== \n");

// 调用目标方法之前执行的动作
       
System.out.println("调用方法之前: 执行!\n");

// 调用方法的参数
       
Object[] args = pjp.getArgs();
       
// 调用的方法名
       
String method = pjp.getSignature().getName();
       
// 获取目标对象
       
Object target = pjp.getTarget();
       
// 执行完方法的返回值:调用proceed()方法,就会触发切入点方法执行
       
Object result = pjp.proceed();

System.out.println("输出:" + args[0] + ";" + method + ";" + target +
";" + result + "\n");
       
System.out.println("调用方法结束:之后执行!\n");
    
return 
result;

    }

//异常通知
  
    public void
doThrow(JoinPoint jp, Throwable e) {
       
System.out.println("删除出错啦");
    }

}

步骤四、配置文件的编写:

<?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:p="http://www.springframework.org/schema/p"
   
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-3.0.xsd  
 
         
http://www.springframework.org/schema/context  
 
         
http://www.springframework.org/schema/context/spring-context-3.0.xsd

http://www.springframework.org/schema/aop  
 
         
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"
   
default->

<!-- ==============================利用spring
利用aspectj来配置AOP================================
-->

<!-- 声明一个业务类 -->
   
<bean id="aspectBusiness"
class="aop.schema.AspectBusiness" />

<!-- 声明通知类 -->
   
<bean id="aspectAdvice"
class="aop.schema.advice.AspectAdvice"
/>

<aop:config>
       
<aop:aspect id="businessAspect"
ref="aspectAdvice">
           
<!-- 配置指定切入的对象 -->
           
<aop:pointcut id="point_cut" expression="execution(*
aop.schema.*.*(..))" />
           
<!-- 只匹配add方法作为切入点
           
<aop:pointcut id="except_add"
expression="execution(* aop.schema.*.add(..))"
/>
            
-->

<!-- 前置通知 -->
           
<aop:before method="doBefore"
pointcut-ref="point_cut" />
           
<!-- 后置通知 returning指定返回参数 -->
           
<aop:after-returning method="doAfter"
               
pointcut-ref="point_cut" returning="result" />
           
<aop:around method="doAround"
pointcut-ref="point_cut"/>
           
<aop:after-throwing method="doThrow"
pointcut-ref="point_cut" throwing="e"/>
       
</aop:aspect>
   
</aop:config>

</beans>

步骤五、测试类:

public class Debug {

public
static void main(String[] args) {
       
ApplicationContext context = new
ClassPathXmlApplicationContext("aop/schema_aop.xml");
       
AspectBusiness business = (AspectBusiness)
context.getBean("aspectBusiness");
       
business.delete("猫");
    }

}

Spring学习4-面向切面(AOP)之schema配置方式的更多相关文章

  1. Spring学习笔记--面向切面编程(AOP)

    什么是AOP AOP(Aspect Oriented Programming),意为面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的 ...

  2. Spring学习笔记-面向切面(AOP)-04

    什么是面向切面编程 先大概了解一下部分术语 横切关注点:软件开发中,散布于多出的功能称为横切关注点(cross-cutting concern),简单的可以描述为可以影响应用多处的功能,比如日志.安全 ...

  3. spring学习 八 面向切面编程(AOP)概述

    注:本文大部分参考   --------------------- 本文来自 -望远- 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/yanquan345/artic ...

  4. Spring框架系列(4) - 深入浅出Spring核心之面向切面编程(AOP)

    在Spring基础 - Spring简单例子引入Spring的核心中向你展示了AOP的基础含义,同时以此发散了一些AOP相关知识点; 本节将在此基础上进一步解读AOP的含义以及AOP的使用方式.@pd ...

  5. Spring学习4-面向切面(AOP)之Spring接口方式

    一.初识AOP    关于AOP的学习可以参看帮助文档:spring-3.2.0.M2\docs\reference\html目录下index.html的相关章节       1.AOP:Aspect ...

  6. spring的面向切面实现的两种方式

    面向切面:主要应用在日志记录方面.实现业务与日志记录分离开发. spring面向切面有两种实现方式:1.注解 2.xml配置. 1.注解实现如下: (1)配置如下: <?xml version= ...

  7. spring aop两种配置方式(1)

    第一种:注解配置AOP注解配置AOP(使用 AspectJ 类库实现的),大致分为三步: 1. 使用注解@Aspect来定义一个切面,在切面中定义切入点(@Pointcut),通知类型(@Before ...

  8. java框架篇---spring aop两种配置方式

    第一种:注解配置AOP 注解配置AOP(使用 AspectJ 类库实现的),大致分为三步: 1. 使用注解@Aspect来定义一个切面,在切面中定义切入点(@Pointcut),通知类型(@Befor ...

  9. 【Spring学习笔记-MVC-3】SpringMVC返回Json数据-方式1

    <Spring学习笔记-MVC>系列文章,讲解返回json数据的文章共有3篇,分别为: [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://www ...

  10. 【Spring学习笔记-MVC-4】SpringMVC返回Json数据-方式2

    <Spring学习笔记-MVC>系列文章,讲解返回json数据的文章共有3篇,分别为: [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://www ...

随机推荐

  1. 第四章 在MVC4.0中对脚本以及样式表的引用变化

    原文:http://www.cnblogs.com/xdotnet/archive/2012/07/21/aspnet40_webpage20.html 一.可以直接使用“~”,而无需使用Href对象 ...

  2. 工作流模式与K2实现--(2)

      结构化过程  这两个模式的共同点在于:模式所涉及流程的执行路径是由运行时决定的,而非设计时确定.包括:Arbitrary cycles(强制循环模式) .Implicit termination( ...

  3. 静态时序分析(static timing analysis) --- 时序路径

    时序分析工具会找到且分析设计中的所有路径.每一个路径有一个起点(startpoint)和一个终点(endpoint).起点是设计中数据被时钟沿载入的那个时间点,而终点则是数据通过了组合逻辑被另一个时间 ...

  4. SpringMVC Controller介绍(转)

    SpringMVC Controller 介绍 一.简介 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理 ...

  5. JS 之BOM

    BOM的核心对象是window,表示浏览器的一个实例. 使用框架时,window.top对象指顶层框架,也就是浏览器窗口.window.parent对象指包含当前窗口的框架,也就是父框架.window ...

  6. SimpleDateFormat非线程安全

    文章列表 1)SimpleDateFormat的线程安全问题与解决方案 2)深入理解Java:SimpleDateFormat安全的时间格式化

  7. IT男的”幸福”生活"续5

    各位哥们姐妹们,好,嗯,好.很多回复还是提到[IT男的”幸福”生活"]是小说来着剧情不真实,我还是免为其难的说一下吧.是真的回忆录,具体的事情都有.人也是真实的.在这里还是谢谢,这几天一直关 ...

  8. WCF入门(7)

    前言 前段时间忙着驾照科目二的考试,都没有机会碰自己的电脑.说起来也是第一次参加这么没信心的考试,不过好在过了. 再打个广告吧,昨天终于把下载的WCF视频全部传到了QQ群共享里面,群号37819043 ...

  9. Bootstrap3.0学习第二十六轮(JavaScript插件——图片轮播)

    详情请查看http://aehyok.com/Blog/Detail/32.html 个人网站地址:aehyok.com QQ 技术群号:206058845,验证码为:aehyok 本文文章链接:ht ...

  10. 使用 ArcGIS中的ArcObjects进行二次开发

    参考网址:https://blogs.esri.com/esri/arcgis/2012/12/07/arcobjects-or-runtime-sdk/ http://resources.arcgi ...