Spring系列第33篇:ProxyFactoryBean创建AOP代理,三年经验月薪50k我是怎么做到的

  1. Spring系列第31篇:Aop概念详解

  2. Spring系列第32篇:AOP核心源码、原理详解

本文继续Aop。

AOP创建代理的方式主要分为2大类


手动方式

也称为手动的方式,需要通过硬编码一个个创建代理。

自动化的方式

也称为批量的方式,批量的方式用在spring环境中,通过bean后置处理器来对符合条件的bean创建代理

手动的方式基本上是采用硬编码的方式,相对来说更灵活一些,可以脱离spring环境使用,而自动化的方式主要用在spring环境中,和spring集成起来更容易一些,更强大一些。

AOP创建代理相关的类

左边的ProxyCreatorSupport下面的都是手动的方式,有3个类。

右边的AbstractAutoProxyCreator下面挂的都是自动创建代理的方式,主要有5个实现类。

手动3种方式


ProxyFactory方式

这种是硬编码的方式,可以脱离spring直接使用,用到的比较多,自动化方式创建代理中都是依靠ProxyFactory来实现的,所以这种方式的原理大家一定要了解,上篇文章中已经有介绍过了,不清楚的可以去看一下:Spring系列第32篇:AOP核心源码、原理详解

AspectJProxyFactory方式

AspectJ是一个面向切面的框架,是目前最好用,最方便的AOP框架,Spring将其集成进来了,通过Aspectj提供的一些功能实现aop代理非常方便,下篇文章将详解。

ProxyFactoryBean方式

Spring环境中给指定的bean创建代理的一种方式,本文主要介绍这个。

ProxyFactoryBean


这个类实现了一个接口FactoryBeanFactoryBean不清楚的可以看一下:Spring系列第5篇:创建bean实例这些方式你们都知道?

ProxyFactoryBean就是通过FactoryBean的方式来给指定的bean创建一个代理对象。

创建代理,有3个信息比较关键:

  1. 需要增强的功能,这个放在通知(Advice)中实现

  2. 目标对象(target):表示你需要给哪个对象进行增强

  3. 代理对象(proxy):将增强的功能和目标对象组合在一起,然后形成的一个代理对象,通过代理对象来访问目标对象,起到对目标对象增强的效果。

使用ProxyFactoryBean也是围绕着3部分来的,ProxyFactoryBean使用的步骤:

1.创建ProxyFactoryBean对象

2.通过ProxyFactoryBean.setTargetName设置目标对象的bean名称,目标对象是spring容器中的一个bean

3.通过ProxyFactoryBean。setInterceptorNames添加需要增强的通知

4.将ProxyFactoryBean注册到Spring容器,假设名称为proxyBean

5.从Spring查找名称为proxyBean的bean,这个bean就是生成好的代理对象

上案例。

来个类Service1

package com.javacode2018.aop.demo8.test1;

public class Service1 {

public void m1() {

System.out.println(“我是 m1 方法”);

}

public void m2() {

System.out.println(“我是 m2 方法”);

}

}

需求

在spring容器中注册上面这个类的bean,名称为service1,通过代理的方式来对这个bean进行增强,来2个通知

一个前置通知:在调用service1中的任意方法之前,输出一条信息:准备调用xxxx方法

一个环绕通知:复制统计所有方法的耗时。

下面是代码的实现

package com.javacode2018.aop.demo8.test1;

import 

  • 26
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值