AOP配置


一、  XML风格 = 采用声明形式实现Spring AOP 

前置通知:------org.springframework.aop.MethodBeforeAdvice

后置通知:-------org.springframework.aop.AfterReturningAdvice

环绕通知:-------org.aopalliance.intercept.MethodInterceptor

异常通知:-------org.springframework.aop.ThrowsAdvice
底层用的是反射:
说明:四选一
* <pre class="code">public void afterThrowing(Exception ex)</pre>
* <pre class="code">public void afterThrowing(RemoteException)</pre>
* <pre class="code">public void afterThrowing(Method method, Object[] args, Object target, Exception ex)</pre>
* <pre class="code">public void afterThrowing(Method method, Object[] args, Object target, ServletException ex)</pre>

配置方式:
在applicationContext.xml中配置:
<!--配置目标对象  -->
	<bean id="factory" class="com.neuedu.demo.Factory"></bean>
	<!--配置增强对象  -->
	<bean id="before" class="com.neuedu.demo.Before"></bean>
	<bean id="after" class="com.neuedu.demo.After"></bean>
	<bean id="around" class="com.neuedu.demo.Around"></bean>
	<bean id="throws" class="com.neuedu.demo.Throws"></bean>
	<!--配置代理对象  -->
	<bean id="proxyFactory" class="org.springframework.aop.framework.ProxyFactoryBean">
		<!-- 植入目标对象 -->
		<property name="target" ref="factory"></property>
		<!--植入增强对象的名字  -->
		<property name="interceptorNames" value="before,after,around,throws"></property>
		<!-- 如果是面向接口需要配置目标对象的接口 -->
		<property name="proxyInterfaces" value="com.neuedu.demo.Ifactory"></property>
		<!--如果不是面向接口开发需要配置optimize  -->
		<!-- <property name="optimize" value="true"></property> -->
	</bean>

二、 AspectJ风格 = 采用注解形式实现Spring AOP

首先,导入jar包

<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.8.10</version>
</dependency>

1.创建factory实体类

public class Factory implements Ifactory{
	@Override
	public void productA() {
		int k=10/0;
		System.out.println("生产A");
	}
	@Override
	public void procuctB() {
		System.out.println("生产B");
	}
	@Override
	public void procuctC() {
		System.out.println("生产C");
	}
}
2.创建接口类Ifactory

package com.neuedu.demo;

public interface Ifactory {
	public void productA();
	public void procuctB();
	public void procuctC();
}
3.创建代理对象


package com.neuedu.demo;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

@Aspect
public class ProxyFactory {
	@Before("execution(* productA(..))")//*代表所有返回值类型(..)代表所有的参数类型
	public void before() {
		System.out.println("前置通知");
	}
	@AfterReturning("execution(* productA(..))")
	public void after() {
		System.out.println("后置通知");
	}
	@Around("execution(* productA(..))")
	public void around(ProceedingJoinPoint joinPoint) throws Throwable {
		System.out.println("环绕前");
		
			joinPoint.proceed();
				System.out.println("环绕后");
	}
}
注意:

@AfterReturning("execution(* productA(..))"):只有在成功返回之后才会执行后置重置
@After("execution(* productA(..))"):无论是否成功返回都会执行后置通知
4.在applicationContext.xml中配置
<!--配置自动代理 -->
	<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
	<!--配置目标对象  -->
	<bean id="factory" class="com.neuedu.demo.Factory"></bean>
	<!--配置代理对象  -->
	<bean id="proxyFactory" class="com.neuedu.demo.ProxyFactory"></bean>
	




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值