- 浏览: 850535 次
- 性别:
- 来自: 深圳
-
文章分类
- 全部博客 (379)
- struts (5)
- hibernate (16)
- spring (16)
- ssh (20)
- MySQL (16)
- 数据库脚本 (2)
- DownLoad (1)
- GAE (5)
- Java (103)
- LoadRunner (2)
- VF (1)
- 学习资料 (24)
- 软件使用 (21)
- 通信类 (4)
- 生活 (3)
- J2ME (1)
- 心理学 (1)
- Linux (26)
- Android (3)
- Oracle (1)
- 面向对象概念&面试准备 (11)
- ExtJs (2)
- Google Map (1)
- Flex (47)
- 算法研究 (1)
- share (20)
- python (1)
- MongoDB (7)
- centos6 (13)
- C++ (8)
- DB2 (3)
- C# (1)
- 代码片段 (24)
- Lucene (2)
- php (1)
- NodeJS (1)
- Express (1)
最新评论
-
shua1991:
已阅,我表示同意。
Eclipse统计代码行数 -
nakedou:
写的不错,挺详细的
在CentOS中使用 yum 安装MongoDB及服务器端配置 -
sjp524617477:
好方法
Eclipse统计代码行数 -
simpletrc:
<script>ale ...
Java写到.txt文件,如何实现换行 -
csdn_zuoqiang:
Apache Ftp Server,目前是1.0.4,非常好的 ...
Apache FtpServer在64位系统下服务不能启动解决方法
Spring的Advices
Advices实现了Aspect的真正逻辑。由于织入至Targets的实际不同,spring提供了不同的Advices,像Before Advice,After Advice,Around Advice,Throw Advice。
(1)、Before Advice
通过实现MethodBeforeAdvice来定义
(2)、After Advice
通过实现AfterReturningAdvice来定义
(3)、Around Advice
通过实现MethodInterceptor来定义
(4)、Throw Advice
通过实现ThrowsAdvice来定义
我们将使用一个代理的bean aaa,给这个代理的bean加上我们spring的advice,看看他的日志输出表现。我们通过代码示例来说明:
1、定义基本的advice Bean以及要被调用的类
(1)、beforeAdvice的Bean
package com.itcast.advice; import java.lang.reflect.Method; import org.springframework.aop.MethodBeforeAdvice; /** * 调用方法之前 * */ public class LogBeforeAdvice implements MethodBeforeAdvice { public void before(Method method, Object[] args, Object target) throws Throwable { System.out.println("beforeAdvice 调用方法之前被执行!..........."); } }
(2)、afterAdvice的bean
package com.itcast.advice; import java.lang.reflect.Method; import org.springframework.aop.AfterReturningAdvice; public class LogAfterAdvice implements AfterReturningAdvice { public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable { System.out.println("afterAdvice 调用方法之后被执行!..........."); } }
(3)、Around advice的Bean
package com.itcast.advice; import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; /** * 环绕通知 * */ public class LogAroundAdvice implements MethodInterceptor { public Object invoke(MethodInvocation mi) throws Throwable { Object result=null; System.out.println("around 调用方法之前...."); result=mi.proceed(); System.out.println("around 调用方法之后..."); return result; } }
(4)、Throw Advice的Bean
package com.itcast.advice; import java.lang.reflect.Method; import org.springframework.aop.ThrowsAdvice; /**抛出异常时候的通知*/ public class ThrowAdvice implements ThrowsAdvice { public void afterThrowing(Method method,Object[] args,Object target,Throwable subclass) { System.out.println("ThrowAdvice 记录异常..........."); } }
(5)、要被代理的类
package com.itcast.proxy; public class HelloSpeaker1 implements IHello { public void hi() { System.out.println("我在HelloSpeaker1中"); } public void hiAAA(String aaa) { System.out.println("我在HelloSpeaker1中---hiAAA["+aaa+"]"); } public void hiBBB(String bbb) throws Exception { System.out.println("我在HelloSpeaker1中---hiBBB["+bbb+"]"); throw new Exception("aaa"); } } package com.itcast.proxy; /** * 代理接口 * */ public interface IHello { public void hi(); public void hiAAA(String aaa); public void hiBBB(String bbb) throws Exception; }
2、在配置文件中声明我们的bean
<!-- 代理 --> <bean id="helloSpeaker1" class="com.itcast.proxy.HelloSpeaker1"></bean> <!-- 声明四种通知类型,其实就是你想加入到其他被代理程序执行逻辑中的代码 --> <bean id="beforeAdvice" class="com.itcast.advice.LogBeforeAdvice"/> <bean id="afterAdvice" class="com.itcast.advice.LogAfterAdvice"></bean> <bean id="aroundAdvice" class="com.itcast.advice.LogAroundAdvice"></bean> <bean id="throwAdvice" class="com.itcast.advice.ThrowAdvice"></bean> <!-- 基础的通知使用,这里强行给helloSpeaker1加上了advice通知 --> <bean id="aaa" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="target" ref="helloSpeaker1"></property> <property name="interceptorNames"> <list> <value>aroundAdvice</value> <value>beforeAdvice</value> <value>afterAdvice</value> <value>throwAdvice</value> </list> </property> </bean>
3、在main函数中调用
package com.itcast.advice; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.itcast.proxy.IHello; public class AdviceMain { /**对于给基本的spring bean强行指定一批advice方法的调用展示**/ public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("bean-config.xml"); IHello h = (IHello)ctx.getBean("aaa"); h.hiAAA("测试配置aop的adivce"); System.out.println("进行抛出异常的adivce展示-=================="); try { h.hiBBB("测试抛出异常的advice"); } catch (Exception e) { } } }
4、控制台的显示
around 调用方法之前....
beforeAdvice 调用方法之前被执行!...........
我在HelloSpeaker1中---hiAAA[测试配置aop的adivce]
afterAdvice 调用方法之后被执行!...........
around 调用方法之后...
进行抛出异常的adivce展示-==================
15:05:05,671 DEBUG ThrowsAdviceInterceptor:88 - Found exception handler method: public void com.itcast.advice.ThrowAdvice.afterThrowing(java.lang.reflect.Method,java.lang.Object[],java.lang.Object,java.lang.Throwable)
around 调用方法之前....
beforeAdvice 调用方法之前被执行!...........
我在HelloSpeaker1中---hiBBB[测试抛出异常的advice]
15:05:05,687 DEBUG ThrowsAdviceInterceptor:119 - Found handler for exception of type [java.lang.Throwable]: public void com.itcast.advice.ThrowAdvice.afterThrowing(java.lang.reflect.Method,java.lang.Object[],java.lang.Object,java.lang.Throwable)
ThrowAdvice 记录异常...........
发表评论
-
配置DAO代理 一个小错误
2010-09-01 16:24 1885在配置DAO代理的时候 <!-- 定义DAO代理 ... -
Spring依赖注入
2010-05-26 16:48 1030所谓依赖注入,是指在 ... -
spring 事务
2010-05-20 21:16 792声明式事务管理(在配置时,它是通用的,只需要改变 <ao ... -
springframework【13】
2010-05-20 20:34 909spring的事务管理 Spring提供了编程性事务管 ... -
springframework【12】
2010-05-20 20:29 925spring的Dao和JDBC DAO(Data A ... -
springframework【11】
2010-05-20 20:24 819AOP之aop标签的支持 spring2.0提供了基于 ... -
springframework【10】
2010-05-20 20:20 1003Spring的Autoproxing (自动代理,注意必须使用 ... -
springframework【9】
2010-05-20 20:18 1082AOP之Pointcut、Advisor 上篇的所 ... -
springframework【7】
2010-05-20 20:13 909AOP的相关术语以及实现方式介绍 先介绍下使用spri ... -
springframe【6】
2010-05-20 20:11 943AOP之动态代理 AOP的原理就是动态代理,上一片介绍 ... -
springframework【5】
2010-05-20 20:08 917spring的AOP是基于代理的。java的事务控制是基于代理 ... -
springframework【4】
2010-05-20 20:05 1074这里说的国际化不是简 ... -
springframework【3】
2010-05-20 20:02 949Bean的依赖设置与集合对象的处理 Bean的依赖设 ... -
springframework【2】
2010-05-20 19:43 935Bean的基本管理 Bean的基本管理 1、Be ... -
springframework【1】
2010-05-20 19:27 951第一个spring程序 在这里我们使用xmlsche ...
相关推荐
Spring Framework。 官网 Spring Framework API。 Spring Framework 开发文档。
标题中的“maven仓库中org下的springframework”指的是在Maven的本地或远程仓库中,位于`org`组织下的`springframework`项目。Spring Framework是Java开发中的一个核心框架,由Pivotal Software公司维护,它为构建...
"Spring Framework 4 参考文档中文版" 以下是 Spring Framework 4 参考文档中文版的知识点总结: 一、Spring Framework 概览 * Spring Framework 是一个轻量级的解决方案,是一站式构建企业级应用的一种选择。 * ...
《Spring框架核心模块——org.springframework.core.jar深度解析》 在Java世界中,Spring框架以其卓越的灵活性、可扩展性和模块化设计,成为了企业级应用开发的首选。其中,`org.springframework.core.jar`是Spring...
spring framework 中文参考手册
Spring Framework 是一个广泛使用的开源Java应用框架,特别适用于企业级应用程序开发。它的最新版本v6.1.4为我们带来了许多新特性和改进,使得开发者能够更高效、更灵活地构建可维护的、高性能的应用程序。这个...
Spring Framework API文档。Spring是什么呢?首先它是一个开源的项目,而且非常活跃;它是一个基于IOC和AOP的构架多层j2ee系统的框架,但它不强迫你必须在每一层中必须使用Spring,因为它模块化的很好,允许你根据...
org.springframework.flex-1.0.3.RELEASE.jar.zip用于JAR包,org.springframework.flex-1.0.3.RELEASE.jar.zip用于JAR包org.springframework.flex-1.0.3.RELEASE.jar.zip用于JAR包org.springframework.flex-1.0.3....
org.springframework.aop-3.0.4.RELEASE.jar org.springframework.asm-3.0.4.RELEASE.jar org.springframework.aspects-3.0.4.RELEASE.jar org.springframework.beans-3.0.4.RELEASE.jar org.springframework....
### Spring Framework 简介 #### 一、Spring Framework 的独特之处 在众多J2EE框架中,Spring Framework 自2003年发布以来一直备受瞩目。与其他框架相比,Spring Framework 的独特之处在于: 1. **专注于管理业务...
8. **WebSocket支持**:Spring Framework 5引入了对WebSocket协议的支持,提供了与服务器进行全双工通信的能力,适用于实时应用。 9. **反应式编程**:Spring 5引入了对Reactive Streams的支持,通过Project ...
Spring Framework 是Java开发中的核心框架,它以其强大的功能和易用性成为了许多开发者首选的工具。Spring Framework 6.0.8-SNAPSHOT 的中文文档是针对这一最新版本的详尽指南,旨在解决中文互联网上关于Spring框架...
Getting started with Spring Framework (4th Edition) is a hands-on guide to begin developing applications using Spring Framework 5. The examples (consisting of 88 sample projects) that accompany this ...
Spring Framework 5.1.0源码 The Spring Framework provides a comprehensive programming and configuration model for modern Java-based enterprise applications - on any kind of deployment platform. A key ...
Spring Framework 是一个开源的Java/Java EE全功能栈(full-stack)的应用程序...此外,值得注意的是,整个 Spring Framework 5.0 代码库运行于 Java 8 之上。因此 Spring Framework 5.0 对环境的最低要求是 Java 8。
《Spring核心模块详解:org.springframework.core_3.1.1.RELEASE.jar》 在Java开发领域,Spring框架无疑是最重要的框架之一,它以其强大的依赖注入、面向切面编程以及丰富的功能扩展,深受开发者喜爱。其中,`org....
Spring Framework 是一个开源的Java/Java EE全功能栈(full-stack)的应用程序...此外,值得注意的是,整个 Spring Framework 5.0 代码库运行于 Java 8 之上。因此 Spring Framework 5.0 对环境的最低要求是 Java 8。
org.springframework.aop-3.0.5.RELEASE.jar org.springframework.asm-3.0.5.RELEASE.jar org.springframework.aspects-3.0.5.RELEASE.jar org.springframework.beans-3.0.5.RELEASE.jar org.springframework....
在Java的Web开发领域,Spring框架是不可或缺的重要工具,其中`org.springframework.web.jar`文件是Spring框架的核心组成部分,主要用于处理Web应用程序的相关功能。这个JAR(Java Archive)文件包含了Spring Web模块...
Spring Framework 4.x Reference Documentation 中文翻译 Chinese translation of the Spring Framework 4.x Reference Documentation ...