`

ThrowsAdvice和自动代理的例子

 
阅读更多
参考:
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 ThrowsAdvice使用例子

    在Java世界中,Spring框架是应用最广泛的轻量级框架之...这个例子展示了如何定义和应用`ThrowsAdvice`,以及如何在Spring的XML配置中启用它。在实践中,结合源码阅读和使用适当的工具,可以更好地理解和利用这一特性。

    aop的详细总结(包含例子)

    七、AOP ProxyFactory和自动代理 ProxyFactory用于创建代理对象,而自动代理则是Spring框架自动为满足条件的对象创建代理。 总结,AOP提供了将横切关注点与业务逻辑分离的能力,使得代码更易于维护和扩展。Spring ...

    小马哥讲 Spring AOP 编程思想 - API 线索图.pdf

    - **自动模式**:指的是Spring AOP的自动代理创建功能,即不需要手动指定代理对象,而是通过配置自动创建。 - **AbstractAutoProxyCreator**:一个抽象类,它实现了自动创建代理对象的逻辑。 - **...

    spring-aop源码解读

    这个代理对象会在方法调用时自动应用Advice,实现对目标对象的增强。 总的来说,Spring AOP提供了一种灵活的方式,使得开发者能够通过定义Advice、Pointcut和Advisor来实现横切关注点的分离,从而提高代码的可维护...

    spring3.x的读书笔记-4

    在实际应用中,可以通过 `ProxyFactory` 或者 `AspectJ` 来创建并配置代理对象,定义好切点和增强后,Spring 就会在运行时自动地织入增强代码,从而实现横切逻辑的注入。 创建增强类时,需要实现相应的增强接口,如...

    Spring第02天1

    - **ThrowsAdvice**:异常抛出通知,当方法抛出异常时执行。 - **IntroductionInterceptor**:引介通知,向目标类添加新的方法和属性。 6. **Spring半自动AOP** - 这种方式需要手动配置Spring容器,从容器中获取...

    Spring基于ProxyFactoryBean创建AOP代理

    4. 异常通知(ThrowsAdvice):在方法抛出异常时自动执行的通知,可以应用于处理异常记录日志等功能。 5. 引介通知(IntroductionInterceptor):在目标类中添加一些新的方法和属性,可以应用于修改旧版本程序(增强...

    spring aop 拦截器简单实现

    根据应用场景选择合适的代理方式,然后通过`@EnableAspectJAutoProxy`注解开启AOP自动配置。 4. **注册拦截器**:拦截器需要被Spring容器管理,以便在合适的时候执行。这通常通过将拦截器类声明为Spring Bean来实现...

    Spring_AOP_学习小结 Spring_AOP_学习小结 Spring_AOP_学习小结

    2. CGLIB代理:可代理接口和非final的类,性能较高,通过生成字节码实现。 四、Spring AOP通知类型 1. BeforeAdvice(前置通知):在方法执行前调用,可以修改参数,抛出异常阻止方法执行。 2. ...

    spring_教程_2_AOP

    总之,Spring AOP通过代理机制和通知实现横切关注点的管理,使得系统更加模块化,提高了代码的可重用性和可维护性。理解和熟练掌握Spring AOP,对于构建健壮的、模块化的Java企业级应用至关重要。

    spring学习笔记2

    - `DefaultAdvisorAutoProxyCreator`:自动为符合AOP条件的Bean创建代理对象。 2. **BeanFactoryPostProcessor**:此接口允许在所有Bean实例化之前修改Bean的配置元数据。Spring提供了以下实现: - `...

    spring 要点总结

    - **动态代理**:Spring 的 AOP 实现主要基于代理模式和修饰模式,使得可以在不修改原有代码的情况下,向业务逻辑中插入额外的处理行为。 3. **AOP 术语** - **Aspect(方面)**:一个关注点的模块化,如日志记录...

    spring AOP 概念

    - **Spring AOP 的织入机制**:由 ProxyFactory 或 ProxyFactoryBean 在运行时自动完成。 ##### Target(目标对象) - **定义**:需要应用 Aspect 功能的对象。 - **实例化**:通常是一个具体的 Java 对象。 ####...

    Spring的AOP

    **Spring的AOP实现**支持两种代理方式:基于接口的JDK动态代理和基于类的CGLIB代理。如果目标对象实现了接口,Spring会使用JDK动态代理;如果没有,就会使用CGLIB生成目标对象的子类。 **Spring的通知类型**包括: ...

    使用Spring进行统一日志管理 + 统一异常管理

    使用 Spring 进行统一日志管理 + 统一异常管理 在软件开发中,日志管理和异常管理...通过使用 Spring 的 ThrowsAdvice 接口和 Log4j 工具,开发者可以轻松地记录程序中的日志信息和异常情况,并将其输出到不同的目标。

    spring入门学习-6、AOP几种配置方式详解.pdf

    基于代理的经典 AOP 更适合于 Spring 早期版本的应用场景,而 Schema-based 的 AOP 和 @AspectJ 注解驱动的 AOP 更符合现代应用的需求,特别是在需要快速开发和维护的情况下。开发者可以根据实际项目需求选择合适的 ...

    spring aop 实例

    MethodInterceptor是Spring AOP中最通用的通知类型,它是基于代理的AOP的核心。通过实现`org.aopalliance.intercept.MethodInterceptor`接口,我们可以拦截并自定义任何方法的调用。`invoke`方法是核心,它接收一个...

    面向方面编程的四种通知接口

    在Spring框架中,提供了多种AOP实现方式,其中最为常用的是基于代理的方式。在Spring AOP中,有四种主要的通知类型:前置通知、后置通知、异常通知和引介通知。下面将对这四种通知进行详细的介绍。 ### 1. 前置通知...

Global site tag (gtag.js) - Google Analytics