Spring------AOP

Spring AOP

  • Advice
  • Aspectj

Advice 通知

  • MethodBeforeAdvice 前置通知

  • AfterReturingAdvice 后置通知

  • MethodInterceptor 环绕通知

  • ThrowAdvice 异常抛出通知

  • AfterAdvice 最终通知

MethodBeforeAdvice 前置通知

public interface MethodBeforeAdvice extends BeforeAdvice {

	/**
		method : 代理的 目标方法
		args :   代理的 目标方法需要的参数 
		target : 目标对象
	*/
	void before(Method method, Object[] args, @Nullable Object target) throws Throwable ;

}

MethodInterceptor 环绕通知

public interface MethodInterceptor extends Interceptor {
	
	// invoke 返回的结果 代表 目标方法 返回的结果,结果可以被切面修改 
	Object invoke(MethodInvocation invocation) throws Throwable;
}

MethodInvocation 中常见的方法

  • getMethod : 获取 目标方法

  • getArguments : 获取 目标方法需要的参数列表

  • getThis() : 获取代理的目标对象

  • proceed() : 调用目标对象的方法,返回方法的结果, 在 proceed() 方法前 执行的的代码是 前置通知
    在 proceed() 方法后执行的代码 是后置通知,所以 MethodInterceptor 被称为 环绕通知

AfterReturingAdvice

public interface AfterReturningAdvice extends AfterAdvice {

	/**
		returnValue : 代表 目标方法 返回的 结果 
	*/
	void afterReturning(Object returnValue, Method method, Object[] args, 
			Object target) throws Throwable;
}

ThrowsAdvice 异常抛出通知

该接口 是一个 空接口,里面没有任何的方法, 但是如果希望在目标方法抛出异常的时候,进行处理,则需要提供对应的处理方法

public void afterThrowing(Exception ex)

public void afterThrowing(RemoteException)

public void afterThrowing(Method method, Object[] args, Object target, Exception ex)

public void afterThrowing(Method method, Object[] args, Object target, ServletException ex)

方法中需要提供一个 返回 void 且 方法名为 afterThrowing的方法
在方法中 至少提供一个Exception类型的参数,但该参数最为方法的最后一个参数
可以在方法中,添加 method, args, target 三个参数

ProxyFactoryBean

<bean id="userDaoProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
	<!-- 注入 target 目标对象  -->
	<property name="target" ref="userDao" />

	<!--  配置 目标类 需要的 切面类   -->
	<property name="interceptorNames">
		<array>
			<value>timeAdvice</value>
		</array>
	</property>
</bean>

BeanNameAutoProxyCreator

<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
	<!-- 代理bean的名字以 Dao结尾的 bean -->
	<property name="beanNames" value="*Dao" />
	<property name="interceptorNames">
		<list>
			<value>logAdvice</value>
			<value>timeAdvice</value>
		</list>
	</property>
</bean>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值