- 浏览: 3432668 次
- 性别:
- 来自: 珠海
文章分类
- 全部博客 (1633)
- Java (250)
- Android&HTML5 (111)
- Struts (10)
- Spring (236)
- Hibernate&MyBatis (115)
- SSH (49)
- jQuery插件收集 (55)
- Javascript (145)
- PHP (77)
- REST&WebService (18)
- BIRT (27)
- .NET (7)
- Database (105)
- 设计模式 (16)
- 自动化和测试 (19)
- Maven&Ant (43)
- 工作流 (36)
- 开源应用 (156)
- 其他 (16)
- 前台&美工 (119)
- 工作积累 (0)
- OS&Docker (83)
- Python&爬虫 (28)
- 工具软件 (157)
- 问题收集 (61)
- OFbiz (6)
- noSQL (12)
最新评论
-
HEZR曾嶸:
你好博主,这个不是很理解,能解释一下嘛//左边+1,上边+1, ...
java 两字符串相似度计算算法 -
天使建站:
写得不错,可以看这里,和这里的这篇文章一起看,有 ...
jquery 遍历对象、数组、集合 -
xue88ming:
很有用,谢谢
@PathVariable映射出现错误: Name for argument type -
jnjeC:
厉害,困扰了我很久
MyBatis排序时使用order by 动态参数时需要注意,用$而不是# -
TopLongMan:
非常好,很实用啊。。
PostgreSQL递归查询实现树状结构查询
参考:
http://www.blogjava.net/liuwentao253/archive/2007/01/23/95494.html
MethodInterceptor --> org.springframework.aop.support.RegexpMethodPointcutAdvisor
ThrowsAdvice --> org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator
接口:
实现类:
ThrowsAdvice类
applicationContext.xml配置:
配置A:
Java测试类:
配置B:
Java测试类:
http://www.blogjava.net/liuwentao253/archive/2007/01/23/95494.html
MethodInterceptor --> org.springframework.aop.support.RegexpMethodPointcutAdvisor
ThrowsAdvice --> org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator
接口:
package com.app.aop; public interface IBizProcessImpl { void doOneThing(); void doAnotherThing(); }
实现类:
package com.app.aop; public class BizProcessImpl implements IBizProcessImpl { public void doOneThing() { System.out.println("doOneThing-->"); } public void doAnotherThing() { System.out.println("doAnotherThing-->"); int i =1/0;//模拟出现异常 //throw new RuntimeException("Boom"); } }
ThrowsAdvice类
package com.app.aop; import java.lang.reflect.Method; import org.springframework.aop.ThrowsAdvice; public class MyThrowsAdvice implements ThrowsAdvice { public void afterThrowing(Method method, Object[] args, Object target, Exception ex){ System.out.println("-----------------afterThrowing message start-----------------"); System.out.println("Method Name="+method.getName()); for(int i=0; i<args.length; i++){ System.out.println(args[i]); } System.out.println("Target Class Name="+target.getClass().getName()); System.out.println("Exception Class Name="+ex.getClass().getName()); System.out.println("Exception Message="+ex.getMessage()); System.out.println("-----------------afterThrowing message end-----------------"); } public void afterThrowing(Exception ex){ System.out.println("-----------------afterThrowing message start-----------------"); System.out.println("Exception Class Name="+ex.getClass().getName()); System.out.println("Exception Message="+ex.getMessage()); System.out.println("-----------------afterThrowing message end-----------------"); } }
applicationContext.xml配置:
配置A:
<bean id="bizOneTarget" class="com.app.aop.BizProcessImpl"></bean> <bean id="throwsAdvice" class="com.app.aop.MyThrowsAdvice"></bean> <bean id="bizOne" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="proxyInterfaces"> <value>com.app.aop.IBizProcessImpl</value> </property> <property name="target"> <ref bean="bizOneTarget" /> </property> <property name="interceptorNames"> <list> <value>throwsAdvice</value> </list> </property> </bean>
Java测试类:
public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); IBizProcessImpl t = ctx.getBean("bizOne",IBizProcessImpl.class); //IBizProcessImpl t = ctx.getBean("bizOneTarget",IBizProcessImpl.class); try { t.doAnotherThing(); } catch (Exception e) { // TODO: handle exception } }
配置B:
<bean id="bizOneTarget" class="com.app.aop.BizProcessImpl"></bean> <bean id="throwsAdvice" class="com.app.aop.MyThrowsAdvice"></bean> <bean id="beanNameAutoProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <property name="beanNames"> <list> <value>*bizOneTarget</value>//可以用通配符 </list> </property> <property name="interceptorNames"> <value>throwsAdvice</value> </property>
Java测试类:
public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); //IBizProcessImpl t = ctx.getBean("bizOne",IBizProcessImpl.class); IBizProcessImpl t = ctx.getBean("bizOneTarget",IBizProcessImpl.class); try { t.doAnotherThing(); } catch (Exception e) { // TODO: handle exception } }
发表评论
-
Spring Boot 属性配置
2016-06-24 11:04 1189Spring Boot 属性配置和使用 http://blog ... -
Spring Boot 集成MyBatis
2016-06-24 10:55 2035Spring Boot 集成MyBatis http://bl ... -
Spring MVC防重复提交
2016-06-17 15:47 1653http://my.oschina.net/zyqjustin ... -
Spring容器加载完之后执行特定任务
2016-06-17 15:36 2294http://my.oschina.net/simpleton ... -
使用spring-session和shiro来代理session的配置
2016-06-16 11:21 12067使用spring-session和redis来代理sessio ... -
JSTL 的 if else : 有 c:if 没有 else 的处理
2016-06-14 09:52 1343http://blog.csdn.net/xiyuan1999 ... -
spring mvc 请求转发和重定向
2016-06-14 09:48 1407http://blog.csdn.net/jackpk/art ... -
mvc:view-controller
2016-05-18 10:26 1089http://blog.csdn.net/lzwglory/a ... -
spring配置事物的方式:注解和aop配置
2016-05-14 00:26 4113参考: Spring AOP中pointcut express ... -
分布式任务调度组件 Uncode-Schedule
2016-05-13 14:47 2293http://www.oschina.net/p/uncode ... -
Mybatis分库分表扩展插件
2016-05-12 15:47 1632http://fangjialong.iteye.com/bl ... -
spring+mybatis+atomikos 实现JTA事务
2016-05-11 22:00 5531sping配置多个数据源 不同用户操作不同数据库 http:/ ... -
Spring中使用注解 @Scheduled执行定时任务
2016-05-10 09:39 1574原文:http://dwf07223.blog.51cto.c ... -
Spring中配置Websocket
2016-05-05 16:55 1285spring+websocket整合(springMVC+sp ... -
redis 集群中Session解决方案之Spring Session
2016-05-04 08:54 1324集群中Session解决方案之Spring Session h ... -
使用Spring-data进行Redis操作
2016-05-04 08:54 4807使用Spring-data进行Redis操作 http://z ... -
Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC
2016-05-03 13:35 1068Spring4新特性——集成Bean Validation 1 ... -
SpringMVC介绍之Validation
2016-05-03 13:10 996SpringMVC介绍之Validation http://h ... -
spring 注解方式下使用commons-validator 验证表单
2016-05-03 11:08 3085原文: http://www.programgo.com/ar ... -
Spring MVC学习详解
2016-04-28 09:13 1012原文 http://blog.csdn.net/alsocod ...
相关推荐
在Java世界中,Spring框架是应用最广泛的轻量级框架之...这个例子展示了如何定义和应用`ThrowsAdvice`,以及如何在Spring的XML配置中启用它。在实践中,结合源码阅读和使用适当的工具,可以更好地理解和利用这一特性。
七、AOP ProxyFactory和自动代理 ProxyFactory用于创建代理对象,而自动代理则是Spring框架自动为满足条件的对象创建代理。 总结,AOP提供了将横切关注点与业务逻辑分离的能力,使得代码更易于维护和扩展。Spring ...
- **自动模式**:指的是Spring AOP的自动代理创建功能,即不需要手动指定代理对象,而是通过配置自动创建。 - **AbstractAutoProxyCreator**:一个抽象类,它实现了自动创建代理对象的逻辑。 - **...
这个代理对象会在方法调用时自动应用Advice,实现对目标对象的增强。 总的来说,Spring AOP提供了一种灵活的方式,使得开发者能够通过定义Advice、Pointcut和Advisor来实现横切关注点的分离,从而提高代码的可维护...
在实际应用中,可以通过 `ProxyFactory` 或者 `AspectJ` 来创建并配置代理对象,定义好切点和增强后,Spring 就会在运行时自动地织入增强代码,从而实现横切逻辑的注入。 创建增强类时,需要实现相应的增强接口,如...
- **ThrowsAdvice**:异常抛出通知,当方法抛出异常时执行。 - **IntroductionInterceptor**:引介通知,向目标类添加新的方法和属性。 6. **Spring半自动AOP** - 这种方式需要手动配置Spring容器,从容器中获取...
4. 异常通知(ThrowsAdvice):在方法抛出异常时自动执行的通知,可以应用于处理异常记录日志等功能。 5. 引介通知(IntroductionInterceptor):在目标类中添加一些新的方法和属性,可以应用于修改旧版本程序(增强...
根据应用场景选择合适的代理方式,然后通过`@EnableAspectJAutoProxy`注解开启AOP自动配置。 4. **注册拦截器**:拦截器需要被Spring容器管理,以便在合适的时候执行。这通常通过将拦截器类声明为Spring Bean来实现...
2. CGLIB代理:可代理接口和非final的类,性能较高,通过生成字节码实现。 四、Spring AOP通知类型 1. BeforeAdvice(前置通知):在方法执行前调用,可以修改参数,抛出异常阻止方法执行。 2. ...
总之,Spring AOP通过代理机制和通知实现横切关注点的管理,使得系统更加模块化,提高了代码的可重用性和可维护性。理解和熟练掌握Spring AOP,对于构建健壮的、模块化的Java企业级应用至关重要。
- `DefaultAdvisorAutoProxyCreator`:自动为符合AOP条件的Bean创建代理对象。 2. **BeanFactoryPostProcessor**:此接口允许在所有Bean实例化之前修改Bean的配置元数据。Spring提供了以下实现: - `...
- **动态代理**:Spring 的 AOP 实现主要基于代理模式和修饰模式,使得可以在不修改原有代码的情况下,向业务逻辑中插入额外的处理行为。 3. **AOP 术语** - **Aspect(方面)**:一个关注点的模块化,如日志记录...
- **Spring AOP 的织入机制**:由 ProxyFactory 或 ProxyFactoryBean 在运行时自动完成。 ##### Target(目标对象) - **定义**:需要应用 Aspect 功能的对象。 - **实例化**:通常是一个具体的 Java 对象。 ####...
**Spring的AOP实现**支持两种代理方式:基于接口的JDK动态代理和基于类的CGLIB代理。如果目标对象实现了接口,Spring会使用JDK动态代理;如果没有,就会使用CGLIB生成目标对象的子类。 **Spring的通知类型**包括: ...
使用 Spring 进行统一日志管理 + 统一异常管理 在软件开发中,日志管理和异常管理...通过使用 Spring 的 ThrowsAdvice 接口和 Log4j 工具,开发者可以轻松地记录程序中的日志信息和异常情况,并将其输出到不同的目标。
基于代理的经典 AOP 更适合于 Spring 早期版本的应用场景,而 Schema-based 的 AOP 和 @AspectJ 注解驱动的 AOP 更符合现代应用的需求,特别是在需要快速开发和维护的情况下。开发者可以根据实际项目需求选择合适的 ...
MethodInterceptor是Spring AOP中最通用的通知类型,它是基于代理的AOP的核心。通过实现`org.aopalliance.intercept.MethodInterceptor`接口,我们可以拦截并自定义任何方法的调用。`invoke`方法是核心,它接收一个...
在Spring框架中,提供了多种AOP实现方式,其中最为常用的是基于代理的方式。在Spring AOP中,有四种主要的通知类型:前置通知、后置通知、异常通知和引介通知。下面将对这四种通知进行详细的介绍。 ### 1. 前置通知...