Jmin IOCWord文档下载推荐.docx
《Jmin IOCWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《Jmin IOCWord文档下载推荐.docx(25页珍藏版)》请在冰豆网上搜索。
![Jmin IOCWord文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2022-11/23/63c316e2-216a-4766-b57e-fef55b7bad06/63c316e2-216a-4766-b57e-fef55b7bad061.gif)
*@authorChrisLiao
*@version1.0
publicinterfaceBeanElementextendsSerializable{
}
下面简单介绍一些POJO描述元素
Singleton:
被描述的POJO实例是否为单实例,可以取值:
true或false
InitializationMethod:
初始化方法的描述元素,当容器完成构造后,将调用初始化方法
DestroyMethod:
销毁方法,当应用结束时,容器自动调用POJO的销毁方法
Construction:
POJO的构造方式描述元素。
目前支持三种构造方式:
1:
普通反射构造,容器将直接在类的构造器上构造实例.
2:
工厂方法构造,通过类的Static方法构造实例
3:
工厂Bean构造,容器通过调用另一个POJO的实例的指定方法来构造
Property:
POJO的属性描述对象,会携带参数。
关联属性注入
Invocation:
POJO的方法调用描述对象,会携带参数。
关联方法调用注入
Interception:
POJO方法调用拦截描述对象,属于Around类别
3:
参数
容器有一个很好的优点:
依赖注入。
当容器在构造一个POJO实例时,可以对它实施注入:
将一些有用的参数值放进对象内部,以完成对象准备动作,使其一旦被外部获取即可使用。
那么这参数值是从哪里来的呢?
很容易让人想到注册,没错,它们是从外部导入容器内部的。
当使用容器注册POJO描述元素时,并不是简单的动作,某些元素是可以携带一些有用的参数值,从而可以被容器用到。
由于IOC环境因素,导致这些参数值是有别于普通方法参数。
如何表达这些参数值,且能让容器理解呢?
描述在该容器中发挥积极重要的作用,其实对象性语言本身就是利用描述的特性。
在该framework中,定义了一个用来被容器所能理解的参数值对象:
IocValue,它是一个接口,在容器下已经存在一些实现子类,很多情况下它们可以作为参数而存在的,由于值的类别不同,导致参数也是不一样的。
同样为了方便,框架提供一个辅类:
ParameterFactory,被用来创建拥有不同类别值的参数对象。
20
21
22
23
24
25
26
27
*IOCvaluetypeobject.
*
publicinterfaceIocValueextendsSerializable{
/**
*Returndescriptionobjectforiocvalue
publicObjectgetDescription();
*Returnobjectvalueforthisiocvalue.
publicObjecttoObjectValue();
下面简单介绍一些参数值类别。
BooleanValue
ByteValue
CharValue
ShortValue
IntValue
LongValue
FloatValue
DoubleValue
ClassValue
ReferenceValue
InstanceValue
4:
API介绍
容器方法API
元素工厂API
参数工厂API
拦截器
5:
元素详解
在直接使用方式下,开发者需要亲自创建容器和注册元素,如属性,构造等,当然准备好这些基本动作后,并不意味开发的完成.在获取对象的实例前,应该需要将对POJO描述的相关元素注册到容器中,相关的元素已经在前面所讲述,为了更好理解该框架下的描述元素,下面逐一讲述它们.
5.1对象构造
在前面已经提到构造描述元素(Construction),它将引导容器如何去创建一个POJO实例。
在该框架中提供了三种方式:
普通构造;
工厂方法构造;
工厂Bean构造,下面分别讲述它们。
A:
普通构造
容器将直接使用Class来构造一个对象实例,通常在工程应用时候,我们可以使用这样的代码去创建我们期盼的实例:
Objectinstance=Class.newInstance();
当然容器构造一个Class的对象时,不是一个如此简单的动作。
很多时候我们在编写一个新的Class时候,会编写Class的构造方法,它们被用来在构造对象时候携带一些有用的参数信息。
携带参数值的构造方式是比比皆是。
在该Framework中,只要合理描述这些参数既可,容器将在构造的时候,它们被自动注入对象实例。
那么如果注册这种构造方式呢?
框架是允许显式与隐式两种方式去注册构造方式。
通过构造描述对象
Constructionconstruction=BeanElementFactory.createConstruction(newParameter[]{parameter1,parameter2......});
//再通过如下类似的方式注册
IocContainer.register(ClassbeanClass,Constructionconstructor);
直接调用容器方法注册构造参数
IocContainer.register(ClassbeanClass,Parameter[]constructParameters);
B:
工厂方法构造
在该种构造方式下,容器将调用当前POJOClass的自身一个静态方法去完成对象的构造,当然这个方法可以是带有参数的,而这些参数同上被称为构造参数。
在描述方法参数时,请注意参数的类别,构造的参数值应该与之相匹配。
创建该方式的构造元素时,可使用如下类似代码进行该元素对象的创建
Constructionconstruction=BeanElementFactory.createConstruction(StringfactoryMethodName,Parameter[]parameters);
//注册如普通构造
...........
C:
工厂Bean
在该构造方式下,容器将调用另一个已经存在的POJO的方法来完成构造动作,这个被容器调用的POJO被称为工厂Bean.既然是方法调用,那么是有可能使用一些参数值。
使用如下代码去构造该方式下的元素。
Constructionconstruction=BeanElementFactory.createConstruction(StringfactoryBeanRefID,StringfactoryMethodName,Parameter[]parameters);
5.2对象单态
在一些应用的时候,针对某个Class,可能只需要它的一个实例,又某些情况下却只需要多个不同的实例,框架提供了一个是否为单态描述元素:
Singleton
Singletonsingleton=BeanElementFactory.CreateSingleton(booleansingleton);
5.3初始化方法
传统的开发时,当完成一个对象的创建后,还有可能在该对象上执行一些初始化动作,同样该容器框架可以帮我们完成对实例的初始化
InitializationMethodmethod=BeanElementFactory.createInitMethodName(Stringmethodname);
5.4销毁方法
当我们不在使用某个对象时,希望存在某种自动机制来完成某些结束动作,比如进行资源回收
DestroyMethodmethod=BeanElementFactory.createDestroyMethodName(Stringmethodname);
5.5对象属性
从静态角度描述一个对象,我们通常可以会使用类似语句:
它有某某特性等,在对象语言中,我们可以称这些某某特性为对象属性(个人理解:
对象语言本身就是利用抽象原理对对象进行描述,我们框架也是如此哦^-^)。
为了对象描述的完整性,在IOC环境下,属性的描述同样是允许的,只不过该描述方式与直接的对象属性描述是有差异的。
为了容器的理解性,框架中定义了应用于IOC下的属性对象:
Property.在对象世界里,通常会使用属性值来描述属性。
为了描述统一性,在框架中,我们称这个属性值为参数值,事实上参数不只是应用在属性上,后面将会陆续谈到。
如果要构造一个属性元素,那么同时也应该构造一个合理的参数,如例:
//通过调用框架的工厂方法创建一个参数对象
ParameterageParmeter=ParameterFactory.createIntType(28);
//通过调用框架的工厂方法创建一个属性描述对象
PropertyageProperty=BeanElementFactory.createProperty("
age"
ageParmeter);
5.6对象方法
上面的讲述,我们从静态角度使用了属性描述对象。
既然有静态,那么相对就有动态描述。
我们通常会这样描述我们自己的对象:
这个对象可以做某某事情,这个”做”体现了对象”动”的一面及类的职责。
在对象中,使用了方法来反映动态一面,当调用一个对象方法时,可能使用一些有意义的参数值,这个参数就是上面已经提到的那个参数。
该容器框架中,定义了一个方法调用描述元素.下面例子可参考!
ParameternameParmeter=ParameterFactory.createStringType("
China"
);
//通过调用框架的工厂方法创建一个方法调用描述元素对象
Invocationinvocation=
BeanElementFactory.createInvocation("
sayHello"
newParameter[]{nameParmeter});
5.7方法拦截
该框架提供了方法调用级拦截,同样它作为一个元素对象被工厂方法所创建
InterceptionmethodInterception=BeanElementFactory.createInterception(StringmethodName,String[]parameterTypes);
以上代码替我们创建了一个方法拦截元素对象,很明显我们创建拦截元素,自然要提到拦截器,与该描述元素有什么关系呢?
我们可以调用该元素下的一些方法来添加方法拦截器。
//添加一个拦截器实例
publicvoidaddInterceptorByInstance(Interceptorinterceptor);
//添加一个拦截器实现类
publicvoidaddInterceptorByClass(ClassinterceptorClass);
//添加一个拦截器实现类名
publicvoidaddInterceptorByClassName(StringinterceptorClassName);
//添加一个拦截器引用
publicvoidaddInterceptorByReference(Objectreference);
5.8元素注册
通过前面基本讲述,我们知道元素对象是需要注册到容器中,才能发挥作用IOC容器提供了一些有用的元素注册方法,该容器允许多步添加所需要的元素,因此才容器具有一定的动态性,下面公开该容器的API
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
*Copyright(c)jminOrganization.Allrightsreserved.
importjava.util.Map;
importorg.jmin.j2ee.ioc.element.Autowire;
importorg.jmin.j2ee.ioc.element.BeanElement;
importorg.jmin.j2ee.ioc.element.Construction;
importorg.jmin.j2ee.ioc.element.DestroyMethod;
importorg.jmin.j2ee.ioc.element.InitializationMethod;
importorg.jmin.j2ee.ioc.element.Interception;
importorg.jmin.j2ee.ioc.element.Invocation;
importorg.jmin.j2ee.ioc.element.PoolSize;
importorg.jmin.j2ee.ioc.element.Property;
importorg.jmin.j2ee.ioc.element.ProxyInterfaces;
importorg.jmin.j2ee.ioc.element.Singleton;
*Amicro-containerregisteresobjectpartdefinition,andwhichiscalledaselements,
*thecontainerwillcontrolobjectinstanceslifecyclebytheirelementsdefinition.
*Afterelementsregisteration,objectinstancescanbegottenwithregisteredkeysfrom
*thecontainer.Someregisterationmethodsaresuppliedtoimportelementstocontainer.
publicinterfaceIocContainer{
*containsbeanID
publicbooleancontainsBeanID(ObjectbeanID);
*FindabeaninstancefromcontainerbyabeanID.
*Ifnotfound,thenreturnnull.
publicObjectgetBean(ObjectbeanID);
*Findabeaninstancewithaclass.Ifnotfound,thenreturnnull.
publicObjectgetBeanByClass(Classcls);
*Findallbeaninstancemap
publicMapgetBeansByClass(Classcls);
*registeraobjectinstanceincontainer
publicvoidregisterInstance(Objectinstance);
*registeraobjectinstancewithabeanID
publicvoidregisterInstance(ObjectbeanID,Objectinstance);
*registeraclasses
publicvoidregisterClass(ClassbeanClass);
publicvoidregisterClass(ClassbeanClass,Property[]properties);
publicvoidregisterClass(ClassbeanClass,Invocation[]invocation);
publicvoidregisterClass(ClassbeanClass,