builder 模式_Builder模式和Spring框架

builder 模式

介绍

每当对象同时具有强制属性和可选属性时,我都喜欢使用构建器模式 。 但是构建对象通常是Spring框架的责任,因此让我们看看如何同时使用基于Java和XML的Spring配置来使用它。

建造者的例子

让我们从下面的Builder类开始。

public final class Configuration<T extends DataSource> extends ConfigurationProperties<T, Metrics, PoolAdapter<T>> {public static final long DEFAULT_METRIC_LOG_REPORTER_PERIOD = 5;public static class Builder<T extends DataSource> {private final String uniqueName;private final T targetDataSource;private final PoolAdapterBuilder<T> poolAdapterBuilder;private final MetricsBuilder metricsBuilder;private boolean jmxEnabled = true;private long metricLogReporterPeriod = DEFAULT_METRIC_LOG_REPORTER_PERIOD;public Builder(String uniqueName, T targetDataSource, MetricsBuilder metricsBuilder, PoolAdapterBuilder<T> poolAdapterBuilder) {this.uniqueName = uniqueName;this.targetDataSource = targetDataSource;this.metricsBuilder = metricsBuilder;this.poolAdapterBuilder = poolAdapterBuilder;}public Builder setJmxEnabled(boolean enableJmx) {this.jmxEnabled = enableJmx;return this;}public Builder setMetricLogReporterPeriod(long metricLogReporterPeriod) {this.metricLogReporterPeriod = metricLogReporterPeriod;return this;}public Configuration<T> build() {Configuration<T> configuration = new Configuration<T>(uniqueName, targetDataSource);configuration.setJmxEnabled(jmxEnabled);configuration.setMetricLogReporterPeriod(metricLogReporterPeriod);configuration.metrics = metricsBuilder.build(configuration);configuration.poolAdapter = poolAdapterBuilder.build(configuration);return configuration;}}private final T targetDataSource;private Metrics metrics;private PoolAdapter poolAdapter;private Configuration(String uniqueName, T targetDataSource) {super(uniqueName);this.targetDataSource = targetDataSource;}public T getTargetDataSource() {return targetDataSource;}public Metrics getMetrics() {return metrics;}public PoolAdapter<T> getPoolAdapter() {return poolAdapter;}
}

基于Java的配置

如果您使用的是基于 Spring Java的配置,那么您将采用以下方式:

@org.springframework.context.annotation.Configuration
public class FlexyDataSourceConfiguration {@Autowiredprivate PoolingDataSource poolingDataSource;@Beanpublic Configuration configuration() {return new Configuration.Builder(UUID.randomUUID().toString(),poolingDataSource,CodahaleMetrics.BUILDER,BitronixPoolAdapter.BUILDER).build();}@Bean(initMethod = "start", destroyMethod = "stop")public FlexyPoolDataSource dataSource() {Configuration configuration = configuration();return new FlexyPoolDataSource(configuration,new IncrementPoolOnTimeoutConnectionAcquiringStrategy.Builder(5),new RetryConnectionAcquiringStrategy.Builder(2));}
}

基于XML的配置

基于XML的配置比基于Java的配置更为冗长且不直观:

<bean id="configurationBuilder" class="com.vladmihalcea.flexypool.config.Configuration$Builder"><constructor-arg value="uniqueId"/><constructor-arg ref="poolingDataSource"/><constructor-arg value="#{ T(com.vladmihalcea.flexypool.metric.codahale.CodahaleMetrics).BUILDER }"/><constructor-arg value="#{ T(com.vladmihalcea.flexypool.adaptor.BitronixPoolAdapter).BUILDER }"/>
</bean><bean id="configuration" factory-bean="configurationBuilder" factory-method="build"/><bean id="dataSource" class="com.vladmihalcea.flexypool.FlexyPoolDataSource" init-method="start" destroy-method="stop"><constructor-arg ref="configuration"/><constructor-arg><array><bean class="com.vladmihalcea.flexypool.strategy.IncrementPoolOnTimeoutConnectionAcquiringStrategy$Builder"><constructor-arg value="5"/></bean><bean class="com.vladmihalcea.flexypool.strategy.RetryConnectionAcquiringStrategy$Builder"><constructor-arg value="2"/></bean></array></constructor-arg>
</bean>

结论

无论您已经选择了Spring配置模式如何,都可以使用Builder模式。 如果您不确定它的用处,请注意以下三个令人信服的原因 。

翻译自: https://www.javacodegeeks.com/2014/03/the-builder-pattern-and-the-spring-framework.html

builder 模式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/341952.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[渝粤教育] 南阳医学高等专科学校 传染病护理 参考 资料

教育 -传染病护理-章节资料考试资料-南阳医学高等专科学校【】 感染与免疫&#xff08;随堂测验&#xff09; 1、【单选题】传染的含义是&#xff1a; A、病原体侵入人体的结果 B、传染亦称传染过程&#xff0c;是病原体与人体相互作用、相互斗争的过程 C、病原体、人体及环境因…

打造可复制爆款短视频的底层逻辑

大家都在短视频平台上做生意&#xff0c;给短视频平台带来了什么&#xff1f; 谁能满足平台需求&#xff0c;就给谁流量 谁能达成平台指标&#xff0c;就给谁流量 如何达成平台各项指标&#xff0c;做大V? 一、流量算法 曝光流量 Ya.X1 b.X2 c.X3 d.X4 e.X5 ... z.X23…

工业级光纤收发器与光端机各自的作用及区别介绍

工业通信行业的朋友应该都知道&#xff0c;光端机和光纤收发器都是一种可以进行光电转换的通信设备&#xff0c;它们之间有很多类似的功能。既然这样&#xff0c;那它们能否通用呢&#xff1f;接下来&#xff0c;就由飞畅科技的小编来给大家解释说明下光纤收发器和光端机各自的…

[渝粤教育] 厦门理工学院 机械设计 参考 资料

教育 -机械设计-章节资料考试资料-厦门理工学院【】 第三单元测验 1、【单选题】在常用的螺旋传动中&#xff0c;传动效率最高的螺纹是 A、三角形螺纹 B、梯形螺纹 C、锯齿形螺纹 D、矩形螺纹 参考资料【 】 2、【单选题】螺纹连接防松的根本目的是 A、增加螺纹连接的轴向力 B、…

光纤收发器A,B端含义解释

最近有朋友问到&#xff0c;光纤收发器型号或者收发器模块上A,B字母的含义是什么&#xff1f;今天飞畅科技的小编就来为大家介绍一下&#xff0c;收发器中A,B端字母的真正含义。一起来看看吧&#xff01; 首先,光纤收发器按光纤芯数分类有2种&#xff0c;一种是单模双纤光纤收…

[渝粤教育] 商丘师范学院 网球 参考 资料

教育 -网球-章节资料考试资料-商丘师范学院【】 请简述现代网球运动的特点。 单元测验 1、【单选题】网球运动最早起源于哪个国家&#xff1f; A、美国 B、法国 C、英国 D、澳大利亚 参考资料【 】 2、【单选题】国际网球联合会成立于哪一年&#xff1f; A、1913年 B、1900年 C…

光纤收发器按照网管怎么分类

光纤收发器&#xff0c;是一种将短距离的双绞线电信号和长距离的光信号进行互换的以太网传输媒体转换单元&#xff0c;在很多地方也被称之为光电转换器&#xff08;Fiber Converter&#xff09;。光纤收发器按照网管分类可分为网管型以太网光纤收发器和非网管型以太网光纤收发器…

[渝粤教育] 四川农业大学 地理信息系统原理A 参考 资料

教育 -地理信息系统原理A-章节资料考试资料-四川农业大学【】 【理论】第一章 作业 【理论】第一章 测验 1、【单选题】有关信息的论述错误的是&#xff08;&#xff09;。 A、信息具有传输性 B、信息具有共享性 C、信息具有适用性 D、信息具有主观性 参考资料【 】 2、【单选题…

html嵌入war_WAR文件与具有嵌入式服务器的Java应用程序

html嵌入war大多数服务器端Java应用程序&#xff08;例如&#xff0c;面向Web或面向服务的&#xff09;都打算在容器中运行。 打包这些应用程序以进行分发的传统方法是将它们捆绑为WAR文件。 这只不过是具有标准目录布局的ZIP存档&#xff0c;其中包含运行时所需的所有库和应用…

[渝粤教育] 四川大学 传统文化与人生修养 参考 资料

教育 -传统文化与人生修养-章节资料考试资料-四川大学【】 第一章 绪论 测试题 1、【单选题】下列哪项不属于传统的特征&#xff1f; A、传统是历史的 B、传统是革新的 C、传统是延续性的 D、传统是指向未来的 参考资料【 】 2、【单选题】《易经》是由谁翻译之后传到西方的&am…

飞畅科技 光纤收发器的网管型和非网管型介绍

光纤收发器按网管类型来分&#xff0c;可以分为网管型光纤收发器和非网管型光纤收发器。那么&#xff0c;光纤收发器的网管型和非网管型是什么呢&#xff1f;接下来我们就跟随飞畅科技的小编一起来详细了解下吧&#xff01; 一、管理类型分类 非网管型以太网光纤收发器&#x…

[渝粤教育] 四川大学 模拟电子技术基础(Ⅰ) 参考 资料

教育 -模拟电子技术基础&#xff08;Ⅰ&#xff09;-章节资料考试资料-四川大学【】 绪论测验题 1、【单选题】当输入信号频率为fL或fH时&#xff0c;放大电路电压增益的幅值约下降为通带内水平增益的 。 A、0.5倍 B、0.7倍 C、0.9倍 D、1倍 参考资料【 】 2、【单选题】某放大…

[渝粤教育] 四川工程职业技术学院 建筑工程测量 参考 资料

教育 -建筑工程测量-章节资料考试资料-四川工程职业技术学院【】 第一章绪论作业 第一章绪论单元测验 1、【单选题】地球上自由静止的水面&#xff0c;称为&#xff08; &#xff09; A、水平面 B、水准面 C、大地水准面 D、地球椭球面 参考资料【 】 2、【单选题】绝对高程指的…

光纤收发器连接不同端口的注意事项详解

光纤收发器在传输产品类&#xff0c;可以说是使用最多。其作用也是不言而喻。光纤收发器有多种不同的分类&#xff0c;而实际使用中大多注意的是按光纤接头不同而区分的类别&#xff1a;SC接头光纤收发器和FC以及FST接头光纤收发器。今天&#xff0c;飞畅科技的小编就告诉大家在…

[渝粤教育] 天水师范学院 中阿文化精髓 参考 资料

教育 -中阿文化精髓-章节资料考试资料-天水师范学院【】 阿拉伯节日传统与沙漠文化 测试题 1、【判断题】由于民族和地域不同&#xff0c;人们的生产和生活方式也不一样&#xff0c;因此&#xff0c;各民族的节日大多存在差异性。 A、正确 B、错误 参考资料【 】 2、【判断题】…

netbeans6.8_NetBeans IDE 8.0和Java 8的新功能

netbeans6.8NetBeans IDE 8.0已发布&#xff0c;还为Java 8技术提供了新功能。 它具有用于与Java SE 8&#xff0c;Java SE Embedded 8和Java ME Embedded 8一起工作的代码分析器和编辑器。IDE还具有新的增强功能&#xff0c;这些功能进一步改善了其对Primeavenge对Maven和Java…

[渝粤教育] 天水师范学院 移动通信与无线网络 参考 资料

教育 -移动通信与无线网络-章节资料考试资料-天水师范学院【】 问答题 第三章单元测试 1、【单选题】下列关于大区制的说法正确的是 A、一个基站覆盖整个服务区&#xff0c;容量大 B、一个基站覆盖整个服务区的一小部分&#xff0c;容量大 C、一个基站覆盖整个服务区&#xff0…

光纤收发器指示灯的意义图解

光纤收发器有六个LED指示灯&#xff0c;显示收发器的工作状态。根据LED&#xff0c;可以确定收发器是否正常工作并且可能有问题&#xff0c;这有助于识别故障。那么&#xff0c;光纤收发器的每个指示灯分别代表什么意思呢&#xff1f;接下来我们就跟随飞畅科技的小编一起来详细…

[渝粤教育] 天津市大学软件学院 中国茶道 参考 资料

教育 -中国茶道-章节资料考试资料-天津市大学软件学院【】 第1讲 茶道概述 测试题 1、【单选题】茶道起源于哪个国家&#xff1f; A、中国 B、日本 C、韩国 D、印度 参考资料【 】 2、【单选题】“茶道”一词最早出现在何处&#xff1f; A、饮茶歌诮崔石使君 B、封氏见闻记 C、…

[渝粤教育] 天津现代职业技术学院 餐饮服务实务(翁莉) 参考 资料

教育 -餐饮服务实务&#xff08;翁莉&#xff09;-章节资料考试资料-天津现代职业技术学院【】 走近餐饮企业 1、【多选题】餐厅必须具备以下的哪些条件&#xff1f; A、一定的场所 B、提供食品、饮料 C、以盈利为目的 D、提供餐饮服务 参考资料【 】 2、【多选题】按经营特色划…