
java
文章平均质量分 87
魔笛Love
这个作者很懒,什么都没留下…
展开
-
Java-LinkedHasSet实现原理
概述LinkedHashSet 是具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现。此实现与HashSet 的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序可为插入顺序或是访问顺序。注意,此实现不是同步的。如果多个线程同时访问链接的哈希 Set,而其中至少一个线程修改了该 Set,则它必须保持外部同步。实现对于 LinkedHashSet 而言,它继承与 HashSet、又基于 LinkedHashMap 来实现的。LinkedHashSet原创 2021-11-19 11:08:19 · 519 阅读 · 0 评论 -
Java-HashSet实现原理
概述HashSet 实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。实现对于 HashSet 而言,它是基于 HashMap 实现的, HashSet 底层使用 HashMap 来保存所有元素,因此 HashSet 的实现比较简单,相关 HashSet 的操作,基本上都是直接调用底层 HashMap 的相关方法来完成, HashSet 的源代码如下:public class HashSe原创 2021-11-19 11:04:05 · 528 阅读 · 0 评论 -
Java8前-LinkedHashMap实现原理
概述LinkedHashMap 是 Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。LinkedHashMap 实现与 HashMap 的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序可以是插入顺序或者是访问顺序。注意,此实现不是同步的。如果多个线程同时访问链接的哈希映射,而其中至少一个线程从结构上修改了该映射,则它必须保原创 2021-11-19 10:21:40 · 884 阅读 · 0 评论 -
Java8前-HashMap实现原理
概述HashMap 是基于哈希表的 Map 接口的非同步实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。数据结构在 java 编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap 也不例外。HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。从上图中可以看出, HashMap 底层就是一个数组结构,数组中的每一项又是原创 2021-11-19 09:49:42 · 391 阅读 · 0 评论 -
Java8前-ArrayList实现原理
概述ArrayList 是 List 接口的可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。每个 ArrayList 实例都有一个容量,该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向 ArrayList 中不断添加元素,其容量也自动增长。自动增长会带来数据向新数组的重新拷贝,因此,如果可预知数据量的多少,可在构造 ArrayList 时指定其容量。在添加大量元素前,应原创 2021-11-19 09:31:39 · 239 阅读 · 0 评论 -
Java-设计模式之访问者模式
访问者模式引子对于系统中一个已经完成的类层次结构,我们已经给它提供了满足需求的接口。但是面对新增加的需求,我们应该怎么做呢?如果这是为数不多的几次变动,而且你不用为了一个需求的调整而将整个类层次结构统统地修改一遍,那么直接在原有类层次结构上修改也许是个不错的主意。但是往往我们遇到的却是:这样的需求变动也许会不停的发生;更重要的是需求的任何变动可能都要让你将整个类层次结构修改个底朝天…。这种类似的操作分布在不同的类里面,不是一个好现象,我们要对这个结构重构一下了。那么,访问者模式也许是你很好的选择。原创 2021-11-18 08:52:45 · 252 阅读 · 0 评论 -
Java-设计模式之模板模式
模板模式引子这是一个很简单的模式,却被非常广泛的使用。之所以简单是因为在这个模式中仅仅使用到了继承关系。继承关系由于自身的缺陷,被专家们扣上了“罪恶”的帽子。“使用委派关系代替继承关系”,“尽量使用接口实现而不是抽象类继承”等等专家警告,让我们这些菜鸟对继承“另眼相看”。其实,继承还是有很多自身的优点所在。只是被大家滥用的似乎缺点更加明显了。合理的利用继承关系,还是能对你的系统设计起到很好的作用的。而模板方法模式就是其中的一个使用范例。定义与结构模板方法(Template Method)模式:定原创 2021-11-18 08:49:43 · 212 阅读 · 0 评论 -
Java-设计模式之状态模式
状态模式引子状态模式自身结构非常简单——前面刚刚介绍了几个结构比较简单的设计模式,和他们一样,状态模式在具体实现上留下了可变换的余地。我前面已经介绍过它的孪生兄妹策略模式了,大家可以两者比较着阅读。本文将会讨论两者的区别。定义与结构GOF《设计模式》中给状态模式下的定义为:允许一个对象在其内部状态改变时改变它的行为。这个对象看起来似乎修改了它的类。看起来,状态模式好像是神通广大——居然能够“修改自身的类”!能够让程序根据不同的外部情况来做出不同的响应,最直接的方法就是在程序中将这些可能发生的外部情原创 2021-11-18 08:49:02 · 1531 阅读 · 0 评论 -
Java-设计模式之策略模式
策略模式引子18 日下午 3 时一刻,沈阳,刚刚下完一场几年罕见的大雪,天气格外的冷,公交车在“车涛汹涌”的公路上举步维艰,我坐在里面不时的看表——回公司的班车就要发车了,我还离等车的地方好远…。都是这可恶的天气打乱了我的计划!看来我要重新盘算下下了公交车的计划了:如果在半点以前能够到达等班车的地方,我就去旁边卖书报的小店里面买份《南方周末》,顺便逼逼严寒;如果可恶的公交到时候还不能拱到的话,我就只好去附近的家乐福里面打发两个小时直到下一趟班车发车!其实在上面提到的就是对两种不同情况所采取的不同的策略原创 2021-11-18 08:48:07 · 300 阅读 · 0 评论 -
Java-设计模式之观察者模式
观察者模式引子还记得警匪片上,匪徒们是怎么配合实施犯罪的吗?一个团伙在进行盗窃的时候,总有一两个人在门口把风——如果有什么风吹草动,则会立即通知里面的同伙紧急撤退。也许放风的人并不一定认识里面的每一个同伙;而在里面也许有新来的小弟不认识这个放风的。但是这没什么,这个影响不了他们之间的通讯,因为他们之间有早已商定好的暗号。上面提到的放风者、偷窃者之间的关系就是观察者模式在现实中的活生生的例子。定义与结构观察者(Observer)模式又名发布-订阅(Publish/Subscribe)模式。GOF 给原创 2021-11-18 08:47:01 · 179 阅读 · 0 评论 -
Java-设计模式之备忘录模式
备忘录模式引子俗话说:世上难买后悔药。所以凡事讲究个“三思而后行”,但总常见有人做“痛心疾首”状:当初我要是…。如果真的有《大话西游》中能时光倒流的“月光宝盒”,那这世上也许会少一些伤感与后悔——当然这只能是痴人说梦了。但是在我们手指下的程序世界里,却有的后悔药买。今天我们要讲的备忘录模式便是程序世界里的“月光宝盒”。定义与结构备忘录(Memento)模式又称标记(Token)模式。GOF 给备忘录模式的定义为**:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以原创 2021-11-18 08:46:10 · 490 阅读 · 0 评论 -
Java-设计模式之调停者模式
调停者模式引子Mediator Pattern 中文译为“中介者模式”、“调停者模式”。其实都不是很好,由于现实生活中的“中介”是要和客户打交道,而省去客户原本繁琐的手续,这一点和门面模式的初衷很相像;而在 Mediator Pattern 中 Mediator 是不可见的。“调停”也不好,因为 Mediator在程序中存在的初衷仅仅是规范信息传递的方式。因此叫做“传递器模式”仿佛更能体贴一些,但是本文还是称其为“调停者模式”。定义与结构GOF 给调停者模式下的定义是:用一个调停对象来封装一系列的原创 2021-11-18 08:45:11 · 308 阅读 · 0 评论 -
Java-设计模式之迭代器模式
迭代器模式引子迭代这个名词对于熟悉 Java 的人来说绝对不陌生。我们常常使用 JDK 提供的迭代接口进行 java collection 的遍历:Iterator it = list.iterator();while(it.hasNext()){ //using “it.next();”do some businesss logic}而这就是关于迭代器模式应用很好的例子。定义与结构迭代器(Iterator)模式,又叫做游标(Cursor)模式。GOF 给出的定义为:提供一种方法访问一个原创 2021-11-17 14:12:31 · 388 阅读 · 0 评论 -
Java-设计模式之解释器模式
解释器模式引子解释器模式描述了如何构成一个简单的语言解释器,主要应用在使用面向对象语言开发编译器中;在实际应用中,我们可能很少碰到去构造一个语言的文法的情况。虽然你几乎用不到这个模式,但是看一看还是能受到一定的启发的。定义与结构解释器模式的定义如下:定义语言的文法,并且建立一个解释器来解释该语言中的句子。它属于类的行为模式。这里的语言意思是使用规定格式和语法的代码。在 GOF 的书中指出:如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可原创 2021-11-17 14:04:20 · 289 阅读 · 0 评论 -
Java-设计模式之命令模式
命令模式引子命令模式是从界面设计中提取出来的一种分离耦合,提高重用的方法。被认为是最优雅而且简单的模式,它的应用范围非常广泛。让我们一起来认识下它吧。先从起源说起。在设计界面时,大家可以注意到这样的一种情况,同样的菜单控件,在不同的应用环境中的功能是完全不同的;而菜单选项的某个功能可能和鼠标右键的某个功能完全一致。按照最差、最原始的设计,这些不同功能的菜单、或者右键弹出菜单是要分开来实现的,你可以想象一下,word 文档上面的一排菜单要实现出多少个“形似神非”的菜单类来?这完全是行不通的。这时,就要运原创 2021-11-17 11:23:58 · 302 阅读 · 0 评论 -
Java-设计模式之责任链模式
责任链模式引子初看责任链模式,心里不禁想起了一个以前听过的相声:看牙。说一个病人看牙的时候,医生不小心把拔下的一个牙掉进了病人嗓子里。各个科室的医生推卸责任,搞得病人因此楼上楼下的跑了不少冤枉路,最后无果而终。责任链模式就是这种“推卸”责任的模式,你的问题在我这里能解决我就解决,不行就把你推给另一个对象。至于到底谁解决了这个问题了呢?我管呢!定义与结构从名字上大概也能猜出这个模式的大概模样——系统中将会存在多个有类似处理能力的对象。当一个请求触发后,请求将在这些对象组成的链条中传递,直到找到最合适原创 2021-11-17 11:07:41 · 116 阅读 · 0 评论 -
Java-设计模式之代理模式
代理模式引子我们去科技市场为自己的机器添加点奢侈的配件,很多 DIYer 都喜欢去找代理商,因为在代理商那里拿到的东西不仅质量有保证,而且价格和售后服务上都会好很多。客户通过代理商得到了自己想要的东西,而且还享受到了代理商额外的服务;而生产厂商通过代理商将自己的产品推广出去,而且可以将一些销售服务的任务交给代理商来完成(当然代理商要和厂商来共同分担风险,分配利润),这样自己就可以花更多的心思在产品的设计和生产上了。在美国,任何企业的产品要想拿到市场上去卖就必须经过代理商这一个环节,否则就是非法的。看来原创 2021-11-17 10:59:55 · 260 阅读 · 0 评论 -
Java-设计模式之享元模式
享元模式引子让我们先来复习下 java 中 String 类型的特性:String 类型的对象一旦被创造就不可改变;当两个 String 对象所包含的内容相同的时候,JVM 只创建一个 String 对象对应这两个不同的对象引用。让我们来证实下着两个特性吧(如果你已经了解,请跳过直接阅读第二部分)。// 先来验证下第二个特性:public class TestPattern { public static void main(String[] args){ String n原创 2021-11-17 10:51:52 · 193 阅读 · 0 评论 -
Java-设计模式之门面模式
门面模式引子门面模式是非常简单的设计模式。定义与结构门面模式(facade)又称外观模式。GOF在《设计模式》一书中给出如下定义:为子系统中的一组接口提供一个一致的界面, Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。定义中提到的子系统是指在设计中为了降低复杂性根据一定的规则(比如业务、功能),对系统进行的划分。子系统中封装有一些类。客户程序在使用子系统的时候,可能会像下图一样零乱。在上面的实现方法中,客户类紧紧地依赖在子系统的实现上。子系统发生的变化,很可能要影响到原创 2021-11-17 10:39:49 · 341 阅读 · 0 评论 -
Java-设计模式之装饰模式
装饰模式引子装饰模式?肯定让你想起又黑又火的家庭装修来。其实两者在道理上还是有很多相像的地方。家庭装修无非就是要掩盖住原来实而不华的墙面,抹上一层华而不实的涂料,让生活多一点色彩。而墙还是那堵墙,他的本质一点都没有变,只是多了一层外衣而已。那设计模式中的装饰模式,是什么样子呢?定义与结构装饰模式(Decorator)也叫包装器模式(Wrapper)。GOF 在《设计模式》一书中给出的定义为:动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator 模式相比生成子类更为灵活。让我们来原创 2021-11-17 10:27:57 · 177 阅读 · 0 评论 -
Java-设计模式之组合模式
组合模式引子在大学的数据结构这门课上,树是最重要的章节之一。还记得树是怎么定义的吗?树(Tree)是 n(n≥0)个结点的有限集 T,T 为空时称为空树,否则它满足如下两个条件:有且仅有一个特定的称为根(Root)的结点;其余的结点可分为 m(m≥0)个互不相交的子集 Tl,T2,…,Tm,其中每个子集本身又是一棵树,并称其为根的子树(SubTree)。上面给出的递归定义刻画了树的固有特性:一棵非空树是由若干棵子树构成的,而子树又可由若干棵更小的子树构成。而这里的子树可以是叶子也可以是原创 2021-11-17 10:03:06 · 228 阅读 · 0 评论 -
Java-设计模式之桥梁模式
桥梁模式引子它是一个功能非常强大而且适用于多种情况的模式。定义与结构GOF 在《设计模式》中给桥梁模式的定义为:将抽象部分与它的实现部分分离,使它们都可以独立地变化。这里的抽象部分和实现部分不是我们通常认为的父类与子类、接口与实现类的关系,而是组合关系。也就是说,实现部分是被抽象部分调用,以用来完成(实现)抽象部分的功能。在《Thinking in Patterns with Java》一书中,作者将抽象部分叫做“front-end”(权且翻译为“前端”),而实现部分叫做“back-end”(后端原创 2021-11-17 09:11:30 · 344 阅读 · 0 评论 -
Java-设计模式之适配器模式
适配器模式引子昨天在给新买的 MP3 充电的时候,发现这款 MP3 播放器只提供了 USB 接口充电的方式,而它所配备的充电器无法直接给 USB 接口充电,聪明的厂商为充电器装上了一个 USB 接口转换器解决了问题。这个 USB 接口转接器正是我们今天要谈到的适配器。而在软件开发中采用类似于上面方式的编码技巧被称为适配器模式。定义和结构《设计模式》一书中是这样给适配器模式定义的**:将一个类的接口转换成客户希望的另外一个接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起原创 2021-11-16 16:13:17 · 130 阅读 · 0 评论 -
Java-设计模式之原型模式
原型模式引子古人云:书非借不能读也。我深谙古人教诲,更何况现在 IT 书籍更新快、价格贵、质量水平更是参差不齐,实在不忍心看到用自己的血汗钱买的书不到半年就要被淘汰,更不想供养使用金山快译、词霸等现代化工具的翻译们。于是我去书店办了张借书卡,这样便没有了后顾之忧了——书不好我可以换嘛!但是,借书也有不爽的地方,就是看到有用或者比较重要的地方,不能在书旁标记下来。一般我会将这页内容复印下来,这样作为我自己的东西就可以对其圈圈画画,保存下来了。在软件设计中,往往也会遇到类似或者相似的问题,GOF 将这种原创 2021-11-16 16:00:07 · 113 阅读 · 0 评论 -
Java-设计模式之单例模式
单例模式引子单例模式是设计模式中使用很频繁的一种模式,在各种开源框架、应用系统中多有应用。这里我们就单例模式进行系统的学习。并对“单例模式是邪恶的”这个观点进行一定的分析。定义与结构单例模式又叫做单态模式或者单件模式。在 GOF 书中给出的定义为:保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式中的“单例”通常用来代表那些本质上具有唯一性的系统组件(或者叫做资源)。比如文件系统、资源管理器等等。单例模式的目的就是要控制特定的类只产生一个对象,当然也允许在一定情况下灵活的改变对象的个数原创 2021-11-16 15:41:00 · 354 阅读 · 0 评论 -
Java-设计模式之工厂模式(静态工厂模式、工厂方法模式、抽象工厂模式)
工厂模式(静态工厂模式、工厂方法模式、抽象工厂模式)引子话说十年前,有一个暴发户,他家有三辆汽车——Benz 奔驰、Bmw 宝马、Audi 奥迪,还雇了司机为他开车。不过,暴发户坐车时总是怪怪的:上 Benz 车后跟司机说“开奔驰车! ”,坐上 Bmw 后他说“开宝马车!”,坐上 Audi 说“开奥迪车!”。你一定说:这人有病!直接说开车不就行了?!而当把这个暴发户的行为放到我们程序设计中来时,会发现这是一个普遍存在的现象。幸运的是,这种有病的现象在 OO(面向对象)语言中可以避免了。下面就以 Jav原创 2021-11-16 15:13:18 · 863 阅读 · 0 评论 -
Java8-LinkedList实现原理
概述源码中的这一段注释,我们先尝试从中提取一些信息:Doubly-linked list implementation of the List and Deque interfaces. Implements all optional list operations, and permits all elements (including null).All of the operations perform as could be expected for a doubly-linked list原创 2021-11-16 11:13:14 · 865 阅读 · 0 评论 -
Java8-LinkedHashMap实现原理
概述先看一下源码里的第一段注释:Hash table and linked list implementation of the Map interface, with predictable iteration order. This implementation differs from HashMap in that it maintains a doubly-linked list running through all of its entries. This linked list defi原创 2021-11-16 10:58:17 · 538 阅读 · 0 评论 -
Java8-Hashtable实现原理
概述Hashtable 可以说已经具有一定的历史了,现在也很少使用到 Hashtable 了,更多的是使用 HashMap 或 ConcurrentHashMap。HashTable 是一个线程安全的哈希表,它通过使用synchronized 关键字来对方法进行加锁,从而保证了线程安全。但这也导致了在单线程环境中效率低下等问题。Hashtable 与 HashMap 不同,它不允许插入 null 值和 null 键。属性Hashtable 并没有像 HashMap 那样定义了很多的常量,而是直接写死在原创 2021-11-16 10:49:01 · 180 阅读 · 0 评论 -
Java8-HashMap实现原理
概述点开源码,发现里面有一段介绍如下:Hash table based implementation of the Map interface. This implementation provides all of the optional map operations, and permits null values and the null key. (The HashMap class is roughly equivalent to Hashtable, except that it is u原创 2021-11-16 10:39:55 · 325 阅读 · 0 评论 -
Java8-ArrayList实现原理
概述先来看看源码中的这一段注释,我们可以从中提取到一些关键信息:Resizable-array implementation of the List interface. Implements all optional list operations, and permits all elements, including null. In addition to implementing the List interface, this class provides methods to manipu原创 2021-11-16 10:08:06 · 472 阅读 · 0 评论 -
15.OSGI企业应用开发-基于Spring、Mybatis、Spring MVC实现一个登录应用
前面文章中,我们已经完成了OSGI应用中Spring、Mybatis、Spring MVC的整合,本篇文章我们就在这个基础上来完成一个简单的登录应用,其中用户名和密码需要从数据库中查询。前面文章中,我们已经搭建好的工作空间如下图所示:本篇文章中,我们只需要在com.csdn.osgi.user.web工程中添加页面及Controller即可。首先新增一个登录界面,文件路径为在WebContent/WEB-INF/jsp/login.jsp,内容如下:<%@ page language="ja转载 2021-02-08 17:10:28 · 196 阅读 · 0 评论 -
14.OSGI企业应用开发-整合Spring、Mybatis、Spring MVC
作为一个企业级的Web应用,MVC框架是必不可少的。Spring MVC目前使用也比较广泛,本文就来介绍一下如何在OSGI应用中实现Spring、Mybatis、Spring MVC框架的整合,其中Spring MVC的整合比较困难,原因是Spring整合到OSGI中后,每个Bundle都拥有一个孤立的ApplicationContext,也就是说不同Bundle中实例化的Bean之间的依赖注入就存在一定的问题,前面文章中提到过,这个问题可以通过Bean的注册和引用机制解决。而实例化Spring MVC框转载 2021-02-08 17:09:34 · 379 阅读 · 0 评论 -
13.OSGI企业应用开发-OSGI Web应用开发(二)
上篇文章介绍了OSGI Web应用的两种开发模式,并把Jetty应用服务器以Bundle的形式整合到Equinox容器中,已这种模式开发Web应用,所有的应用程序资源,例如Servlet、JSP、HTML页面等,都需要使用OSGI规范提供的HttpService服务进行注册,否则无法通过浏览器请求服务器端资源。一、HttpService服务详解接着我们就来了解一些HttpService服务,它实际上就是一个接口,具体的服务类由OSGI框架(例如Felix、Equinox等)实现,HttpService接转载 2021-02-08 17:08:46 · 309 阅读 · 0 评论 -
12.OSGI企业应用开发-OSGI Web应用开发(一)
前面文章中介绍了如何在OSGI应用中整合Spring和Mybatis框架,本篇文章开始介绍如何使用OSGI技术开发Web应用。对于传统的Java EE应用,应用中涉及到的Web元素无非就是Servlet、JSP、静态资源等,其中静态资源包括HTML页面、CSS、图片等等。当然还有Portlet、Filter、Listener等,由于不太常用,本文就不涉及这方面的内容了。一、OSGI Web应用两种开发模式介绍看过OSGI相关书籍的朋友应该都知道,OSGI Web应用开发有两种模式,第一种模式是在MANI转载 2021-02-08 17:07:54 · 317 阅读 · 0 评论 -
11.OSGI企业应用开发-Bundle资源获取途径
使用OSGI模块化标准构建Java EE项目,其中比较繁琐的一个方面就是Bundle资源的获取,因为很多开源框架官方都没有发布Bundle版本的Jar文件,这也是使用OSGI开发企业应用首先要解决的问题。本篇文章中,我们来总结一下Bundle资源的获取途径,包括如下几种方式:一、从SpringSource Enterprise Bundle Repository下载这种方式前面文章中已经提到过,SpringSource Enterprise Bundle Repository是目前最全面的Bundle转载 2021-02-08 17:05:05 · 424 阅读 · 0 评论 -
10.OSGI企业应用开发-整合Spring和Mybatis框架(三)
上篇文章中,我们已经完成了OSGI应用中Spring和Mybatis框架的整合,本文就来介绍一下,如何在其他Bundle中,使用Mybatis框架来操作数据库。为了方便演示,我们新建一个新的Plug-in Project工程,名称为com.csdn.osgi.user,表示用户模块。上篇文章中,我们使用<osgi:service/>标签將用于操作数据库的SqlSessionTemplate实例注册为服务,配置如下:<osgi:service id="sqlMapService" re转载 2021-02-02 10:38:27 · 171 阅读 · 0 评论 -
9.OSGI企业应用开发-整合Spring和Mybatis框架(二)
上篇文章中,我们完成了在OSGI应用中整合Spring和Mybatis框架的准备工作,本节我们继续Spring和Mybatis框架的整合。一、解决OSGI整合Spring中的Placeholder问题使用Spring框架的朋友应该都知道,我们可以在Bean的配置文件中,使用${key}的形式访问properties文件中对应的value值,需要用到Spring中的PropertyPlaceholderConfigurer类,使用方式如下,首先需要配置placeholder,例如:<bean id转载 2021-02-02 10:37:54 · 272 阅读 · 0 评论 -
8.OSGI企业应用开发-整合Spring和Mybatis框架(一)
到目前为止,我们已经学习了如何使用Blueprint將Spring框架整合到OSGI应用中,并学习了Blueprint&Gemini Blueprint的一些使用细节。本篇文章开始,我们將Mybatis框架整合到OSGI应用中。一、获取Mybatis框架BundleMybatis框架的Bundle获取比较简单,因为Mybatis框架在发布Release版本时就考虑到用户可能会在OSGI应用中使用Mybatis,所以从官方地址下载得到的Jar包本身就是一个Bundle,MANIFEST.MF文件中转载 2021-02-02 10:36:13 · 616 阅读 · 1 评论 -
7.OSGI企业应用开发-细说Bluepring&Gemini-Blueprint(二)
上篇文章介绍了标准的Blueprint 规范与 Gemini Blueprint如何自定义Bean配置文件路径,本文接着上篇文章继续介绍Blueprint的使用。一、Bean的配置前面提到过,Gemini Blueprint即实现了Blueprint 规范,又兼容spring DM风格的配置,本节我们再来了解一下Blueprint与Spring DM在Bean的配置上的差异,具体如下表所示:(注意:这两种风格Gemini Blueprint都支持。)如上图所示,Spring DM风格的Bean配置转载 2021-02-02 10:35:38 · 303 阅读 · 0 评论