一、通过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. localStroage的用法

    Cookie 每个域名存储量比较小(各浏览器不同,大致4K) 所有域名的存储量有限制(各浏览器不同,大致4K) 有个数限制(各浏览器不同) 会随请求发送到服务器 LocalStorage 永久存储 单 ...

  2. 安卓版微信内置浏览器,<a href="tel:电话号码"></a> 这个链接失效,不能跳到拨号界面?

    https://segmentfault.com/q/1010000000318831 在URL最后面加“ #mp.weixin.qq.com ”,应该加其他qq.com的二级域名都行,估计是微信的安 ...

  3. Android开发eclipse运行程序时报timeout的解决方法

    eclipse开发Android程序时,忽然莫名其妙报这个错,之前还好好的.忽然就不行了. Failed to install xxx.apk on device~~~: timeout 尝试过手机里 ...

  4. IBatisNet基础组件

    DomSqlMapBuilder DomSqlMapBuilder,其作用是根据配置文件创建SqlMap实例.可以通过这个组件从Stream, Uri, FileInfo, or XmlDocumen ...

  5. 北京联想招聘-java 云服务开发工程师 加入qq 群:220486180 或者直接在此 留言咨询

     Position Title: 云服务开发工程师 Experience Required:  3 - 5 Years 负责联想企业网盘服务端开发  Position Requirements  1. ...

  6. clip to bounds 和mask to bounds的区别

    UIView.clipsToBounds 让子 View 只显示落在父 View 的 Frame 部分:是子视图超出不现实,默认为NO,设置为YES就会把超出的部分裁掉. maskToBounds 是 ...

  7. SpringMVC重定向视图RedirectView小分析

    目录 前言 RedirectView介绍 实例讲解 总结 前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:http://www.cnbl ...

  8. Maven(一)简介和基本安装使用

    简介 如今用于项目管理和自动化构建的东东用的比较多的,比如: eclipse中用到的ant 现今流行的android studio中用到的gradle 这里将介绍另一种工具——maven (也可以用来 ...

  9. android加固签名工具(源码下载)

    背景 每次android加固了都要命令行签名好麻烦,正好之前做了个图标生成工具. 所以改了改,比写批处理还要省事. 原理 其实就是用winform程序调用控制台执行命令,android签名的命令如下 ...

  10. Windows下apache php wordpress配置

    2. Use notepad to open httpd.conf config file. Make use the line "LoadModule rewrite_module mod ...