框架—02:Spring_02

基于AspectJ的AOP开发(XML方式)


AOP(Aspect Oriented Programming):面向切面编程,是OOP的扩展和延伸,是用来解决OOP遇到问题。

AOP的底层实现:

动态代理:代办、方法增强。被代理类、代理类 里使用被代理类

  1. JDK的动态代理:只能对实现了接口的类产生代理。实现InvocationHandler接口,重写invoke( )方法,使用反射生成代理类。
  2. Cglib的动态代理:对没有实现接口的类产生代理对象。创建该类的 子类代理对象。实现MethodInterceptor接口,重写intercept( )方法。

可见Spring的AOP是基于动态代理实现的,谈到动态代理就不得不提下静态代理。

那为什么AOP不使用静态代理呢?

因为静态代理只能代理一个具体的类,如果要代理一个接口的多个实现的话需要定义不同的代理类。解决这个问题就可以用到 JDK 的动态代理。


AOP的相关术语

  1. 连接点:可以被拦截的点。
  2. 切入点:真正被拦截的点。
  3. 通知:增强方法
  4. 引介:类的增强
  5. 目标:被增强的对象
  6. 织入:将增强应用到目标的过程。
  7. 代理:织入增强后产生的对象
  8. 切面:切入点和通知的组合


AOP的入门开发

  1. 编写目标类并配置
  2. 编写切面类并配置
  3. 进行aop的配置
<!-- AOP的配置:完成对目标类产生代理 -->
<aop:config>
	<!-- expression: 表达式配置那些类的那些方法需要进行增强 -->
	<aop:pointcut expression="execution(* com.google.spring.demo1.ProductDaoImpl.save(..))" id="pointcut1"/>
		
	<!-- 配置切面 -->
	<aop:aspect ref="myAspect">
		<aop:before method="checkPri" pointcut-ref="pointcut1"/>
	</aop:aspect>
</aop:config>

通知类型

  1. 前置通知:@Before
  2. 后置通知:@AfterReturning
  3. 环绕通知:@Around
  4. 异常抛出通知:@AfterThrowing
  5. 最终通知:@After


基于AspectJ的AOP开发(注解方式)


AOP的入门开发

  1. 编写目标类并配置
  2. 编写切面类并配置(在切面类上使用注解)
  3. 进行aop的配置
<!-- 在配置文件中开启注解的AOP的开发 -->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
@Aspect
public class MyAspectAnno {

	@Before(value="MyAspectAnno.pointcut1()")
	public void before(){
		System.out.println("前置增强=====================");
	}
	
	//切入点注解
	@Pointcut(value="execution(* com.google.spring.demo1.OrderDao.save(..))")
	private void pointcut1(){}
}

@Aspect:定义切面类的注解

@Pointcut:定义切入点的注解



如有错误,欢迎留言指正  * _ *

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值