天天看點

bboss 元件容器的使用方法淺析

本文重點介紹bboss 中的4大元件容器的特點及使用方法

4大元件容器

[1] ApplicationContext

org.frameworkset.spi.ApplicationContext

包括基本的aop/ioc功能,業務元件、dao元件管理,遠端服務,全局屬性管理,攔截器,包含聲明式事務管理

[2] WebApplicationContextorg.frameworkset.web.servlet.context.WebApplicationContext

管理所有mvc架構中的控制器,包括基本的aop/ioc功能,業務元件、dao元件管理,不提供遠端服務(和遠端服務協定包無關聯)

[3] DefaultApplicationContextorg.frameworkset.spi.DefaultApplicationContext

包括基本的aop/ioc功能,業務元件、dao元件管理,不提供遠端服務(和遠端服務協定包無關聯)

[4] SOAApplicationContext/SOAFileApplicationContext

org.frameworkset.spi.SOAApplicationContext

org.frameworkset.spi.SOAFileApplicationContext

兩個輕量級的ioc容器,包含aop/ioc功能、全局屬性管理,業務元件、dao元件管理,不包含遠端服務、攔截器、不包含聲明式事務管理,是DefaultApplicationContext的子類,二者主要用來實作對象xml序列化功能,前者從xml串中反序列化元件,後者從xml檔案中反序列化元件

4大元件容器相對于相同的配置檔案都是單執行個體的,也就是說在應用程式中的任何地方通過以下方法擷取到的ioc容器執行個體都是同一個執行個體(除了在第一次會加載配置檔案并初始化檔案中包含的元件外,之後都不會進行初始化加載),而且這些方法是多線程安全的:

WebApplicationContext context = org.frameworkset.web.servlet.support.WebApplicationContextUtils.getWebApplicationContext();//擷取mvc容器執行個體

BaseApplicationContext context = DefaultApplicationContext.getApplicationContext("org/frameworkset/spi/beans/testapplicationcontext.xml");//擷取普通ioc容器執行個體      

4大元件容器的初始化和操作示例

本文涉及的元件配置檔案如下:

org/frameworkset/spi/beans/testapplicationcontext.xml org/frameworkset/soa/datasource-sql.xml

[1] ApplicationContext初始化和使用示例

初始化:

ApplicationContext context = ApplicationContext.getApplicationContext("org/frameworkset/spi/beans/testapplicationcontext.xml");      

使用示例:

本地服務元件執行個體擷取方法

RestfulServiceConvertor convertor = context.getTBeanObject("rpc.restful.convertor",RestfulServiceConvertor.class);      

遠端服務元件執行個體擷取方法(以rmi協定為例,其他協定類似,更多資訊參考部落格其他文章):

RestfulServiceConvertor convertor = (RestfulServiceConvertor)context.getBeanObject("(rmi::172.16.17.216:1099)/rpc.restful.convertor");      

[2] WebApplicationContext

org.frameworkset.web.servlet.context.WebApplicationContext

WebApplicationContext的初始化是在bboss mvc架構啟動過程中自動初始化的,你、隻需要在web.xml檔案中做如下配置即可:

<servlet>
		<servlet-name>mvcdispather</servlet-name>
		<servlet-class>org.frameworkset.web.servlet.DispatchServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/bboss-*.xml,
						/WEB-INF/conf/bboss-*.xml</param-value>
		</init-param>
		<load-on-startup>0</load-on-startup>
	</servlet>
		
	<servlet-mapping>
		<servlet-name>mvcdispather</servlet-name>
		<url-pattern>*.page</url-pattern>
	</servlet-mapping>	
      

WebApplicationContext容器将會加載contextConfigLocation屬性中配置的所有配置檔案,形成一個的mvc 架構元件容器。

我們可以在程式這樣擷取WebApplicationContext容器的執行個體:

WebApplicationContext context = org.frameworkset.web.servlet.support.WebApplicationContextUtils.getWebApplicationContext();//擷取執行個體

//通過以下方式擷取mvc容器中的元件執行個體方法
DeskTopMenuShorcutManager m = context.getTBeanObject("deskTopMenuShorcutManager", DeskTopMenuShorcutManager.class);
      

[3] DefaultApplicationContext

org.frameworkset.spi.DefaultApplicationContext

DefaultApplicationContext的執行個體定義和擷取元件執行個體方法為:

BaseApplicationContext context = DefaultApplicationContext.getApplicationContext("org/frameworkset/spi/beans/testapplicationcontext.xml");
	    RestfulServiceConvertor convertor = context.getTBeanObject("rpc.restful.convertor",RestfulServiceConvertor.class);
      

SOAApplicationContext的執行個體化和擷取元件執行個體示例代碼:

String content = "<?xml version=\"1.0\" encoding=\"gbk\"?>" +
			"<esb>"+
				"<call>"+
				
				"<!-- 排程中心需要的資料開始 -->"+
					
					"<property name=\"soamethodcall\" " +
						"class=\"org.frameworkset.soa.SOAMethodCall\" "+
						"f:requestor=\"requestor\" "+
						"f:requestid=\"1000000\" "+
						"f:password=\"requestpassword\" "+
						"f:encypt=\"encrypt\" "+
						"f:encyptalgorithem=\"algorithm\" "+
						"f:serviceid=\"hilaryserviceid\" "+
						"f:issynchronized=\"true\" >"+
						"<!-- 排程中心需要的資料結束 -->"+
						"<!-- 排程中心送出給服務提供方的服務方法資訊 -->"+
						"<property name=\"soamethodinfo\" class=\"org.frameworkset.soa.SOAMethodInfo\" " +
														"f:methodName=\"methodname\">"+
							"<property name=\"paramTypes\">"+
								"<array componentType=\"Class\">"+
									"<property >String</property>"+
									"<property >String</property>"+
									"<property >String[]</property>"+
								"</array>"+
							"</property>" +
							"<property name=\"params\">"+
								"<array componentType=\"object\">"+
									"<property name=\"condition\">1=1</property>"+
									"<property name=\"orderby\">order by ${A}</property>"+
									"<property>"+
									"	<array componentType=\"String\">"+
										"<property>A</property>"+
										"<property>B</property>"+
										"</array>"+
									"</property>"+
								"</array>"+
							"</property>" +
						"</property>" +
					"</property>"+
				"</call>"+
			"</esb>";
//從xml字元串執行個體化SOAApplicationContext對象 
		SOAApplicationContext context  = new SOAApplicationContext(content);
//擷取xml串中包含的元件對象執行個體	
		SOAMethodCall object = context.getTBeanObject("soamethodcall",SOAMethodCall.class);      

SOAFileApplicationContext的執行個體化和擷取元件執行個體示例代碼:

SOAFileApplicationContext context = new SOAFileApplicationContext("org/frameworkset/soa/datasource-sql.xml");
//擷取xml串中包含的元件對象執行個體	
		SOAMethodCall object = context.getTBeanObject("soamethodcall",SOAMethodCall.class);      

繼續閱讀