1.策略模式

The Strategy Pattern defines a family of algorithms,encapsulates each one,and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it

          策略模式UML图

2.策略模式组成

—抽象策略角色: 策略类,通常由一个接口或者抽象类实现。
—具体策略角色:包装了相关的算法和行为。
—环境角色:持有一个策略类的引用,最终给客户端调用。
3.spring AOP策略模式使用
分析角色
—抽象策略角色--AopProxy
—具体策略角色--Cglib2AopProx和JdkDynamicAopProxy
—环境角色--ProxyCreatorSupport
调用方式:ProxyFactoryBean.java
 1     /**
 2      * Return the singleton instance of this class's proxy object,
 3      * lazily creating it if it hasn't been created already.
 4      * @return the shared singleton proxy
 5      */
 6     private synchronized Object getSingletonInstance() {
 7         if (this.singletonInstance == null) {
 8             this.targetSource = freshTargetSource();
 9             if (this.autodetectInterfaces && getProxiedInterfaces().length == 0 && !isProxyTargetClass()) {
10                 // Rely on AOP infrastructure to tell us what interfaces to proxy.
11                 Class targetClass = getTargetClass();
12                 if (targetClass == null) {
13                     throw new FactoryBeanNotInitializedException("Cannot determine target class for proxy");
14                 }
15                 setInterfaces(ClassUtils.getAllInterfacesForClass(targetClass, this.proxyClassLoader));
16             }
17             // Initialize the shared singleton instance.
18             super.setFrozen(this.freezeProxy);
19             this.singletonInstance = getProxy(createAopProxy());
20         }
21         return this.singletonInstance;
22     }

真实代码实现在DefaultAopProxyFactory.java

 1     public AopProxy createAopProxy(AdvisedSupport config) throws AopConfigException {
 2         if (config.isOptimize() || config.isProxyTargetClass() || hasNoUserSuppliedProxyInterfaces(config)) {
 3             Class targetClass = config.getTargetClass();
 4             if (targetClass == null) {
 5                 throw new AopConfigException("TargetSource cannot determine target class: " +
 6                         "Either an interface or a target is required for proxy creation.");
 7             }
 8             if (targetClass.isInterface()) {
 9                 return new JdkDynamicAopProxy(config);
10             }
11             if (!cglibAvailable) {
12                 throw new AopConfigException(
13                         "Cannot proxy target class because CGLIB2 is not available. " +
14                         "Add CGLIB to the class path or specify proxy interfaces.");
15             }
16             return CglibProxyFactory.createCglibProxy(config);
17         }
18         else {
19             return new JdkDynamicAopProxy(config);
20         }
21     }

转载于:https://www.cnblogs.com/davidwang456/archive/2013/03/21/2973853.html

spring AOP策略模式使用相关推荐

  1. 如何使用 Spring 实现策略模式+工厂模式

    欢迎关注方志朋的博客,回复"666"获面试宝典 一.策略模式 策略模式定义了一组算法,将每个算法都封装起来,并且使它们之间可以互换 1.策略模式主要角色 主要角色如下: 封装角色( ...

  2. 原来使用 Spring 实现策略模式可以这么简单!

    策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法,可以替代代码中大量的 if-else. 比如我们生活中的场景:买东西结账可以使用微信支付.支付宝支付或者银行 ...

  3. 策略模式及Spring整合策略模式

    策略模式 抽象策略类 interface SortService{int[] sort(int arr[]);} 具体策略类 class InsertionSortServiceImpl implem ...

  4. Spring实现策略模式

    通过Spring实现策略模式 当程序中使用太多的if/else/switch来处理不同类型的业务时,会变得极难维护,通过策略模式可以更容易的实现业务扩展和维护. 标准策略模式介绍 比如说对象的某个行为 ...

  5. Spring 中策略模式的 2 个经典应用

    点击蓝色"程序猿DD"关注我哟 加个"星标",不忘签到哦 转自头条号程序汪汪 背景 程序员在项目实战中,策略模式用的非常多. 学习目标 会在Spring项目中运 ...

  6. Spring 中策略模式的 2 个经典应用,可以用来怼面试官了

    一.背景 程序员在项目实战中,策略模式用的非常多. 二.学习目标 会在Spring项目中运用策略模式 三.代码例子 废话不多说,Java的软件开发们注意啦,开车啦! 下面是一个查询业务使用策略模式的案 ...

  7. Spring中策略模式实现方法

    一.定义 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改.这种类型的设计模式属于行为型模式.在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而 ...

  8. Spring AOP 代理模式

    记录几篇关于AOP & 代理模式 的博客,写的非常好,感谢作者分享! Java中的代理模式--静态代理以及分析静态代理的缺点 Java中动态代理的两种方式JDK动态代理和cglib动态代理以及 ...

  9. java spring 实现策略,Spring 环境下实现策略模式的示例

    背景 最近在忙一个需求,大致就是给满足特定条件的用户发营销邮件,但是用户的来源有很多方式:从 ES 查询的.从 csv 导入的.从 MongoDB 查询-.. 需求很简单,但是怎么写的优雅,方便后续扩 ...

最新文章

  1. Error: Cannot find module 'babel-runtime/regenerator'
  2. php 自动验证表单类,thinkPHP 表单自动验证功能
  3. android百度地图开发之自动定位所在位置与固定位置进行驾车,步行,公交路线搜索...
  4. Python 如何创建多维的list
  5. python写sql语句_简单的(笨的)用python以及SQL语句书写增删改查
  6. “练好内功坚持被集成”,阿里云发布SaaS加速器
  7. 吴恩达机器学习 8.应用机器学习的建议
  8. 五金件常见问题01——2.普通螺纹与管螺纹
  9. 苏宁易购开放平台_苏宁易购半年报解读:业态场景与零售服务的“两手抓”
  10. 在Swift中使用dispatch_once单例模型
  11. elasticsearch APM功能全解 一
  12. PHP 微信公众号和html5接入微信支付
  13. 自动判卷 、答题卡识别、六级答题卡客观题自动判卷系统1.0
  14. 如何成为Android高手
  15. python之openpyxl模块(excel管理)
  16. AS608指纹模块的上位机检测
  17. oracle有索引的集合,oracle中记录和集合
  18. 学科实践活动感悟50字_初中学科实践活动记录50字3篇
  19. dubbo启动不成功 解决
  20. Maven的本地初始配置三步走

热门文章

  1. mysql参数优化51cto_超详细MySQL数据库优化
  2. 如何判断基因组的重复区域_Nat Comm. | 15万人类基因组中多核苷酸变异(MNV)的起源及功能研究...
  3. python matplotlib animation制作世界人口变动动画
  4. 用php画一个蓝底红色的圆_php把图片处理成圆形透明的头像
  5. java安全管理器视频_java安全-安全管理器
  6. java客户端发送token_基于token的会话保持机制
  7. oracle 查询各科前3名_2020年山东高校排行榜前3无悬念,山东理工大学省内第17全国250名...
  8. java中treemap释放_81.Java集合之TreeMap
  9. python实用小技巧
  10. Ubuntu terminal路径太深,名字太长