spring AOP策略模式使用
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.策略模式组成
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策略模式使用相关推荐
- 如何使用 Spring 实现策略模式+工厂模式
欢迎关注方志朋的博客,回复"666"获面试宝典 一.策略模式 策略模式定义了一组算法,将每个算法都封装起来,并且使它们之间可以互换 1.策略模式主要角色 主要角色如下: 封装角色( ...
- 原来使用 Spring 实现策略模式可以这么简单!
策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法,可以替代代码中大量的 if-else. 比如我们生活中的场景:买东西结账可以使用微信支付.支付宝支付或者银行 ...
- 策略模式及Spring整合策略模式
策略模式 抽象策略类 interface SortService{int[] sort(int arr[]);} 具体策略类 class InsertionSortServiceImpl implem ...
- Spring实现策略模式
通过Spring实现策略模式 当程序中使用太多的if/else/switch来处理不同类型的业务时,会变得极难维护,通过策略模式可以更容易的实现业务扩展和维护. 标准策略模式介绍 比如说对象的某个行为 ...
- Spring 中策略模式的 2 个经典应用
点击蓝色"程序猿DD"关注我哟 加个"星标",不忘签到哦 转自头条号程序汪汪 背景 程序员在项目实战中,策略模式用的非常多. 学习目标 会在Spring项目中运 ...
- Spring 中策略模式的 2 个经典应用,可以用来怼面试官了
一.背景 程序员在项目实战中,策略模式用的非常多. 二.学习目标 会在Spring项目中运用策略模式 三.代码例子 废话不多说,Java的软件开发们注意啦,开车啦! 下面是一个查询业务使用策略模式的案 ...
- Spring中策略模式实现方法
一.定义 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改.这种类型的设计模式属于行为型模式.在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而 ...
- Spring AOP 代理模式
记录几篇关于AOP & 代理模式 的博客,写的非常好,感谢作者分享! Java中的代理模式--静态代理以及分析静态代理的缺点 Java中动态代理的两种方式JDK动态代理和cglib动态代理以及 ...
- java spring 实现策略,Spring 环境下实现策略模式的示例
背景 最近在忙一个需求,大致就是给满足特定条件的用户发营销邮件,但是用户的来源有很多方式:从 ES 查询的.从 csv 导入的.从 MongoDB 查询-.. 需求很简单,但是怎么写的优雅,方便后续扩 ...
最新文章
- Error: Cannot find module 'babel-runtime/regenerator'
- php 自动验证表单类,thinkPHP 表单自动验证功能
- android百度地图开发之自动定位所在位置与固定位置进行驾车,步行,公交路线搜索...
- Python 如何创建多维的list
- python写sql语句_简单的(笨的)用python以及SQL语句书写增删改查
- “练好内功坚持被集成”,阿里云发布SaaS加速器
- 吴恩达机器学习 8.应用机器学习的建议
- 五金件常见问题01——2.普通螺纹与管螺纹
- 苏宁易购开放平台_苏宁易购半年报解读:业态场景与零售服务的“两手抓”
- 在Swift中使用dispatch_once单例模型
- elasticsearch APM功能全解 一
- PHP 微信公众号和html5接入微信支付
- 自动判卷 、答题卡识别、六级答题卡客观题自动判卷系统1.0
- 如何成为Android高手
- python之openpyxl模块(excel管理)
- AS608指纹模块的上位机检测
- oracle有索引的集合,oracle中记录和集合
- 学科实践活动感悟50字_初中学科实践活动记录50字3篇
- dubbo启动不成功 解决
- Maven的本地初始配置三步走
热门文章
- mysql参数优化51cto_超详细MySQL数据库优化
- 如何判断基因组的重复区域_Nat Comm. | 15万人类基因组中多核苷酸变异(MNV)的起源及功能研究...
- python matplotlib animation制作世界人口变动动画
- 用php画一个蓝底红色的圆_php把图片处理成圆形透明的头像
- java安全管理器视频_java安全-安全管理器
- java客户端发送token_基于token的会话保持机制
- oracle 查询各科前3名_2020年山东高校排行榜前3无悬念,山东理工大学省内第17全国250名...
- java中treemap释放_81.Java集合之TreeMap
- python实用小技巧
- Ubuntu terminal路径太深,名字太长