- 浏览: 845227 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (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 1864在配置DAO代理的时候 <!-- 定义DAO代理 ... -
Spring依赖注入
2010-05-26 16:48 1027所谓依赖注入,是指在 ... -
spring 事务
2010-05-20 21:16 785声明式事务管理(在配置时,它是通用的,只需要改变 <ao ... -
springframework【13】
2010-05-20 20:34 895spring的事务管理 Spring提供了编程性事务管 ... -
springframework【12】
2010-05-20 20:29 912spring的Dao和JDBC DAO(Data A ... -
springframework【11】
2010-05-20 20:24 809AOP之aop标签的支持 spring2.0提供了基于 ... -
springframework【10】
2010-05-20 20:20 983Spring的Autoproxing (自动代理,注意必须使用 ... -
springframework【9】
2010-05-20 20:18 1067AOP之Pointcut、Advisor 上篇的所 ... -
springframework【7】
2010-05-20 20:13 900AOP的相关术语以及实现方式介绍 先介绍下使用spri ... -
springframe【6】
2010-05-20 20:11 939AOP之动态代理 AOP的原理就是动态代理,上一片介绍 ... -
springframework【5】
2010-05-20 20:08 911spring的AOP是基于代理的。java的事务控制是基于代理 ... -
springframework【4】
2010-05-20 20:05 1058这里说的国际化不是简 ... -
springframework【3】
2010-05-20 20:02 942Bean的依赖设置与集合对象的处理 Bean的依赖设 ... -
springframework【2】
2010-05-20 19:43 923Bean的基本管理 Bean的基本管理 1、Be ... -
springframework【1】
2010-05-20 19:27 941第一个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为我们带来了许多新特性和改进,使得开发者能够更高效、更灵活地构建可维护的、高性能的应用程序。这个...
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....
Spring Framework API文档。Spring是什么呢?首先它是一个开源的项目,而且非常活跃;它是一个基于IOC和AOP的构架多层j2ee系统的框架,但它不强迫你必须在每一层中必须使用Spring,因为它模块化的很好,允许你根据...
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 ...
org\springframework\aop org\springframework\beans org\springframework\cache org\springframework\context org\springframework\core org\springframework\dao org\springframework\ejb org\spring...
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模块...