`
沙舟狼客
  • 浏览: 161288 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring的通知(advice)

阅读更多

spring的通知(advice)分为方法通知和异常通知;方法通知又有方法调用前(MethodBeforeAdvice),调用中(MethodInterceptor),调用后(AfterReturningAdvice)三种,这三种实现其接口即可;但异常通知在实现ThrowsAdvice后还需手动加入代码,这一点我就不知道为什吗了,哪位高手可以解释一下;下面是我的实现代码;

 

通知代码:

package login.aop;

import java.lang.reflect.AccessibleObject;
import java.lang.reflect.Method;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.springframework.aop.AfterReturningAdvice;
import org.springframework.aop.MethodBeforeAdvice;
import org.springframework.aop.ThrowsAdvice;

public class AdviceTest implements MethodBeforeAdvice,AfterReturningAdvice,MethodInterceptor,ThrowsAdvice {

	//方法前通知
	public void before(Method arg0, Object[] arg1, Object arg2)
			throws Throwable {
		// TODO Auto-generated method stub
		System.out.println("before");
	}

	//方法后通知
	
	public void afterReturning(Object arg0, Method arg1, Object[] arg2,
			Object arg3) throws Throwable {
		// TODO Auto-generated method stub
		System.out.println("after");
		
	}
	
	//方法调用过程中
	public Object invoke(MethodInvocation arg0) throws Throwable {
		// TODO Auto-generated method stub
		System.out.println(arg0.getMethod().getName()+" invoking.....");
		
		return arg0.proceed();
	}
	
	//异常通知
	public void afterThrowing(NullPointerException exception){
		System.out.println("exception.....");
		
	}
	public void afterThrowing(Method method,Object[] objects,Object target,Throwable throwable){
		
	}


}

 beans.xml文件配置:

<!-- 定义目标对象 -->
	<bean id="userServiceTarget" class="login.service.impl.UserServiceImpl">
		<property name="dao" ref="userDao"></property>		
	</bean>
	<!-- 定义通知 -->
	<bean id="userAdvice" class="login.aop.AdviceTest">
	</bean>
	<!--  定义代理对象,这里用的spring的代理工厂bean-->
	<bean id="userService" class="org.springframework.aop.framework.ProxyFactoryBean">
		<property name="targetName" >
			<value>userServiceTarget</value>
		</property>
		<property name="proxyInterfaces">
			<value>login.service.UserService</value>
		</property>
		<property name="interceptorNames">
			<list>
				<value>userAdvice</value>
			</list>
		</property>
	</bean>

 测试代码:

package login.test;

import login.service.UserService;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MyAdvice {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
		UserService service = (UserService) context.getBean("userService");
		service.list();
		service.login("ligson", "admin");
		service.login("ligson", null);
	}

}

 解释:

在userDao中定义用户登录,如果用户名或密码为空则抛出空指针异常;而这个异常必须以异常通知中的 afterThrowing方法参数异常一致;

 

分享到:
评论

相关推荐

    spring通知例子

    本例"spring通知例子"着重展示了如何利用Spring AOP实现操作日志的拦截,这涉及到前置通知(Before Advice)和后置通知(After Advice)的概念。 首先,我们需要理解什么是Spring AOP。AOP的核心是切面(Aspect),...

    Spring通知的配置

    在深入探讨Spring通知的配置之前,我们先简要回顾一下Spring框架的核心概念。Spring是一个开源的、轻量级的Java应用框架,旨在简化企业级应用的开发。它提供了丰富的功能,包括依赖注入(Dependency Injection,DI)...

    Spring中的5种通知和3种加载通知的方式

    在Spring框架中,通知(Advice)是AOP(面向切面编程)的核心概念之一,它定义了在特定连接点(Join Point)上执行的行为。本文将深入探讨Spring中的五种不同类型的的通知以及三种加载通知的方法。 一、五种通知...

    Spring 使用注解来实现通知

    1. **什么是通知(Advice)** 通知是切面实际执行的操作,它定义了切面在特定连接点(Join Point)的行为。在Spring AOP中,通知主要有五种类型:前置通知(Before)、后置通知(After)、返回后通知(After ...

    Spring.net通知类型,以及通知链

    在Spring.NET中,通知(Advice)是AOP的核心概念,它定义了在特定连接点(JoinPoint)执行的增强操作。本文将深入探讨Spring.NET中的通知类型以及通知链。 1. **通知类型**: - **前置通知(Before Advice)**: 在...

    spring通知

    在Spring框架中,通知(Advice)是AOP(面向切面编程)的核心概念之一,它定义了在方法执行前后或异常发生时进行拦截处理的逻辑。AOP允许程序员定义“切面”(Aspect),这些切面可以封装横切关注点,如日志、事务...

    Spring 环绕通知

    环绕通知(Around Advice)是在方法执行前后都可插入自定义代码的通知类型。它允许我们完全控制目标方法的调用,包括是否执行目标方法、执行前后的操作以及根据需要改变返回值。 2. **如何定义环绕通知**: 在...

    Spring-AOP(前置/后置/环绕)通知的例子

    除了上述基本的通知类型,Spring AOP还支持最终通知(After Returning Advice)和异常通知(After Throwing Advice)。前者在方法正常执行后触发,后者在方法抛出异常后触发。它们分别使用`@AfterReturning`和`@...

    SpringAop xml方式配置通知

    **Spring AOP XML方式配置通知** 在Java世界中,Spring框架是广泛应用的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)容器。AOP允许开发者定义“方面”,这些方面可以封装关注点,如日志、事务...

    Spring之AOP注解之引入通知

    首先,我们要理解什么是“引入通知”(Introduction Advice)。引入通知是Spring AOP的一种特殊类型的通知,它可以在目标对象上添加新的接口或方法,而无需修改原始类的源代码。这种特性非常实用,尤其是在处理遗留...

    Spring 使用AspectJ 实现 AOP之前置通知小例子

    标题提到的"Spring 使用AspectJ 实现 AOP之前置通知小例子",指的是利用AspectJ在Spring中实现AOP的一种特定类型的通知——前置通知(Before advice)。前置通知在目标方法执行之前运行,但不会阻止方法的执行。这种...

    spring AOP注解的应用1

    3. **编写通知(Advice)**:使用`@Before`、`@After`、`@AfterReturning`、`@AfterThrowing`注解定义不同的通知类型。 4. **配置AOP**:在Spring配置文件中启用AOP支持,并将切面类注册为bean。 通过以上步骤,...

    spring的Aop中的前置通知,后置通知以及环绕通知简单代码

    在Spring AOP中,有三种主要的通知类型:前置通知、后置通知和环绕通知。下面将详细解释这三种通知,并通过简单的代码示例进行演示。 **1. 前置通知(Before Advice)** 前置通知在目标方法被调用之前执行,但无法...

    spring-aop实例

    在Spring AOP中,切面由两个主要部分组成:通知(advice)和切点(pointcut)。 2. **通知(Advice)**:通知是在特定的连接点(join point)执行的代码,它可以是前置通知(before advice)、后置通知(after ...

    第十章 Spring AOP之通知

    在本章中,我们将深入探讨Spring AOP(面向切面编程)中的通知(Advice)。Spring AOP是Spring框架的重要组成部分,它允许我们实现横切关注点,如日志记录、事务管理、性能监控等,而无需侵入核心业务逻辑。通过AOP...

    spring aop jar 包

    在Spring AOP中,切面由通知(Advice)和切点(Pointcut)定义。 2. **通知(Advice)**:通知是在特定连接点(Join Point)执行的代码,例如方法调用前、后或者异常发生时。Spring AOP支持五种类型的通知:前置...

    Spring AOP 16道面试题及答案.docx

    Spring AOP中有五种不同类型的的通知(Advice): 1. 前置通知(Before Advice):在方法执行前执行,使用`@Before`注解。 2. 返回后通知(After Returning Advice):在方法正常返回后执行,使用`@AfterReturning`...

    Spring-Reference_zh_CN(Spring中文参考手册)

    7.3.2. Spring里的通知类型 7.3.2.1. 拦截around通知 7.3.2.2. 前置通知 7.3.2.3. 异常通知 7.3.2.4. 后置通知 7.3.2.5. 引入通知 7.4. Spring里的advisor(Advisor) API 7.5. 使用ProxyFactoryBean创建AOP代理 ...

    Spring实现AOP的四种方式

    1. **通知(Advice)**:通知定义了切面在何时执行,Spring支持Before、After-returning、After-throwing、Around和Introduction五种类型的Advice。 2. **连接点(Joinpoint)**:连接点是应用通知的时机,如方法调用、...

    spring aop依赖jar包

    2. **通知(Advice)**:通知是在特定切点执行的代码,它可以是前置通知(Before)、后置通知(After)、返回后通知(After Returning)、异常后通知(After Throwing)和环绕通知(Around)。这些通知可以在方法...

Global site tag (gtag.js) - Google Analytics