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 AOP实现操作日志的拦截,这涉及到前置通知(Before Advice)和后置通知(After Advice)的概念。 首先,我们需要理解什么是Spring AOP。AOP的核心是切面(Aspect),...
在深入探讨Spring通知的配置之前,我们先简要回顾一下Spring框架的核心概念。Spring是一个开源的、轻量级的Java应用框架,旨在简化企业级应用的开发。它提供了丰富的功能,包括依赖注入(Dependency Injection,DI)...
在Spring框架中,通知(Advice)是AOP(面向切面编程)的核心概念之一,它定义了在特定连接点(Join Point)上执行的行为。本文将深入探讨Spring中的五种不同类型的的通知以及三种加载通知的方法。 一、五种通知...
1. **什么是通知(Advice)** 通知是切面实际执行的操作,它定义了切面在特定连接点(Join Point)的行为。在Spring AOP中,通知主要有五种类型:前置通知(Before)、后置通知(After)、返回后通知(After ...
在Spring.NET中,通知(Advice)是AOP的核心概念,它定义了在特定连接点(JoinPoint)执行的增强操作。本文将深入探讨Spring.NET中的通知类型以及通知链。 1. **通知类型**: - **前置通知(Before Advice)**: 在...
在Spring框架中,通知(Advice)是AOP(面向切面编程)的核心概念之一,它定义了在方法执行前后或异常发生时进行拦截处理的逻辑。AOP允许程序员定义“切面”(Aspect),这些切面可以封装横切关注点,如日志、事务...
环绕通知(Around Advice)是在方法执行前后都可插入自定义代码的通知类型。它允许我们完全控制目标方法的调用,包括是否执行目标方法、执行前后的操作以及根据需要改变返回值。 2. **如何定义环绕通知**: 在...
除了上述基本的通知类型,Spring AOP还支持最终通知(After Returning Advice)和异常通知(After Throwing Advice)。前者在方法正常执行后触发,后者在方法抛出异常后触发。它们分别使用`@AfterReturning`和`@...
**Spring AOP XML方式配置通知** 在Java世界中,Spring框架是广泛应用的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)容器。AOP允许开发者定义“方面”,这些方面可以封装关注点,如日志、事务...
首先,我们要理解什么是“引入通知”(Introduction Advice)。引入通知是Spring AOP的一种特殊类型的通知,它可以在目标对象上添加新的接口或方法,而无需修改原始类的源代码。这种特性非常实用,尤其是在处理遗留...
标题提到的"Spring 使用AspectJ 实现 AOP之前置通知小例子",指的是利用AspectJ在Spring中实现AOP的一种特定类型的通知——前置通知(Before advice)。前置通知在目标方法执行之前运行,但不会阻止方法的执行。这种...
3. **编写通知(Advice)**:使用`@Before`、`@After`、`@AfterReturning`、`@AfterThrowing`注解定义不同的通知类型。 4. **配置AOP**:在Spring配置文件中启用AOP支持,并将切面类注册为bean。 通过以上步骤,...
在Spring AOP中,有三种主要的通知类型:前置通知、后置通知和环绕通知。下面将详细解释这三种通知,并通过简单的代码示例进行演示。 **1. 前置通知(Before Advice)** 前置通知在目标方法被调用之前执行,但无法...
在Spring AOP中,切面由两个主要部分组成:通知(advice)和切点(pointcut)。 2. **通知(Advice)**:通知是在特定的连接点(join point)执行的代码,它可以是前置通知(before advice)、后置通知(after ...
在本章中,我们将深入探讨Spring AOP(面向切面编程)中的通知(Advice)。Spring AOP是Spring框架的重要组成部分,它允许我们实现横切关注点,如日志记录、事务管理、性能监控等,而无需侵入核心业务逻辑。通过AOP...
在Spring AOP中,切面由通知(Advice)和切点(Pointcut)定义。 2. **通知(Advice)**:通知是在特定连接点(Join Point)执行的代码,例如方法调用前、后或者异常发生时。Spring AOP支持五种类型的通知:前置...
Spring AOP中有五种不同类型的的通知(Advice): 1. 前置通知(Before Advice):在方法执行前执行,使用`@Before`注解。 2. 返回后通知(After Returning Advice):在方法正常返回后执行,使用`@AfterReturning`...
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代理 ...
1. **通知(Advice)**:通知定义了切面在何时执行,Spring支持Before、After-returning、After-throwing、Around和Introduction五种类型的Advice。 2. **连接点(Joinpoint)**:连接点是应用通知的时机,如方法调用、...
2. **通知(Advice)**:通知是在特定切点执行的代码,它可以是前置通知(Before)、后置通知(After)、返回后通知(After Returning)、异常后通知(After Throwing)和环绕通知(Around)。这些通知可以在方法...