FacilityContainer - 简易的IOC容器
容器是应用程序运行的框架这点似乎不错;容器里可以保存很多对象,当需要使用时根据名字或某种条件来取得单个或多个对象。
那么保存对象的前提就是创建对象。
1.FacilityContainer创建对象的方式 - 在FacilityContainer中把每个需要实例化的对象称为组件.
通过配置文件实例化组件 首先的是通过没有参数的共有的构造函数来创建组件.
public class Entity {
public Entity() {
}
public Entity(String s, String t) {
System.out.println("[s] " + s + " [t] " + t);
}
public Entity(String s, int i) {
System.out.println("[s] " + s + " [i] " + i);
}
}
<1>
<fc:components xmlns:fc = "http://xiaochen-su.iteye.com/fc">
<component id = "demo" class = "sc.demo.Entity"/>
</fc:compoennts>
创建了一个sc.demo.Entity对象以demo作为名称保存在容其中.
<2>
<fc:components xmlns:fc = "http://xiaochen-su.iteye.com/fc">
<component id = "demo" class = "sc.demo.Entity">
<constructor>
<property><string>entity_s</string></property>
<property><string>entity_t</string></property>
</constructor>
</component>
</fc:compoennts>
通过public Entity(String s, String t)以字符串面量 entity_s, entity_t 创建了一个sc.demo.Entity对象
<3>
<fc:components xmlns:fc = "http://xiaochen-su.iteye.com/fc">
<component id = "demo" class = "sc.demo.Entity">
<constructor>
<property><string>entity_s</string></property>
<property><int>213</int></property>
</constructor>
</component>
</fc:compoennts>
通过public Entity(String s, int i)以字符串面量 entity_s 和整型 213 创建了一个sc.demo.Entity对象.
1.2硬性编码创建组件
<1>
ControllableFacilityContainer container = new DefaultFacilityContaienr();
ComponentScarfskin componentScarfskin = new ConstructorComponentScarfskin( Entity.class, new SimpleNaming("demo"), ConstantContext.EMPTY_PARAMETER_ARRAY, true);
container.registerComponent(componentScarfskin);
通过不带参数的共有的构造方法创建组件
<2>
Parameter entity_s = new BasicParameter("entity_s", String.class);
Parameter entity_t = new BasicParameter("entity_t", String.class);
//顺序要与构造函数的顺序一致
Parameter[] params = new Parameter[]{entity_s, entity_t};
ControllableFacilityContainer container = new DefaultFacilityContaienr();
ComponentScarfskin componentScarfskin = new ConstructorComponentScarfskin( Entity.class, new SimpleNaming("demo"), params, true);
container.registerComponent(componentScarfskin);
通过带有参数的共有的构造方法创建组件 (不带有基本类型)
<3>
Parameter entity_s = new BasicParameter("entity_s", String.class);
Parameter entity_i = new BasicParameter(Integer.valueOf(213), int.class);
//顺序要与构造函数的顺序一致
Parameter[] params = new Parameter[]{entity_s, entity_i};
ControllableFacilityContainer container = new DefaultFacilityContaienr();
ComponentScarfskin componentScarfskin = new ConstructorComponentScarfskin( Entity.class, new SimpleNaming("demo"), params, true);
container.registerComponent(componentScarfskin);
通过带有参数的共有的构造方法创建组件 (带有基本类型)
2.FacilityContainer操作对象的方式
上下文 - 获取资源并操作容器的对象.(FacilityContainer接口 也就是说不能通过上下文放入组件).
FacilityContainerContext <<interface>>
AbstractAdapterFacilityContainerContext <<abstract>>
FileSystemAdapterFacilityContainerContext
URLAdapterFacilityContainerContext
AbstractFacilityContainerContext <<abstract>>
ClassPathFacilityContainerContext
FileSystemFacilityContainerContext
URLFacilityContainerContext
资源 - 管理资源源头的对象.
Resource <<interface>>
AbstractResource
ClassPathResource
FileResource
URLResource
FileResourceAdapter
URLResourceAdapter
以上出现了 上下文 -> 资源 的并行层次结构.
===========================================================================================================
例
public class IndexController extends HttpServlet {
private static final long serialVersionUID = 20080602113050L;
//委托名称
private static final String DELEGATE_ID = "index_guide";
//向导委托
private Guide delegate = null;
private FacilityContainerContext fcc = null;
public void init() {
ServletContext servletContext = this.getServletContext();
ServletConfig servletConfig = this.getServletConfig();
try {
URL xmlURL = servletContext.getResource(servletConfig.getInitParameter("component context"));
URL propertiesURL = servletContext.getResource(servletConfig.getInitParameter("container strategy"));
fcc = new URLAdapterFacilityContainerContext(xmlURL, propertiesURL);
//当然这里返回的可以是任何对象 这个向导的委托其实就好是Action对象
delegate = (Guide)fcc.getComponentByKey(DELEGATE_ID);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
delegate.execute(request, response, null, false);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
doGet(request, response);
}
}
=================================================================================================================
3.FacilityContainer 不具备的
1.引用其他上下文的中的组件,体现在xml中如下.
<fc:components xmlns:fc = "http://xiaochen-su.iteye.com/fc">
<import name = "importother" path = "./othercontext.xml"/>
<component id = "demo" class = "sc.demo.Entity">
<constructor>
<property><string>entity_s</string></property>
###################################################
<property><ref>importother:entity_t</ref></property>
###################################################
</constructor>
</component>
</fc:compoennts>
由#符号扩起来的元素
<ref>importother:entity_t</ref>
引用path = "./othercontext.xml"下的id为entity_t的组件
2.删除组件
删除某一个组件的同时要考虑到上下文中是否存在引用他的组件,一旦删除很有可能将导致其他组件的不可用.
但以上情况是在 A -> B 但A没有缓存参数之前就删除了B才会出现.
这种情况下的没有问题是针对上下文引用他的组件而言,对于容器的客户来讲删除一个组件之后,是会带来影响的.
============================================================
容器引用了 sc.utils 包
sc.utils 我的Blog里面有
分享到:
相关推荐
【Infor SCE 11.0.x - WMM - Multi-Facility】是Infor公司提供的仓库管理系统(Warehouse Management Module)的一个多设施版本,适用于2017年V版本。这个用户指南旨在帮助用户理解和操作该系统在处理多个设施时的...
HCIA-Data Center Facility V2.0 培训教材.zip
在提供的压缩包中,`NSGA-II-Cyclic-Facility-Location-master`可能包含以下内容: 1. **MATLAB代码**:实现NSGA-II算法的脚本和函数,可能包括问题定义、参数设置、算法流程、绘图和结果分析等。 2. **数据文件**...
华为认证HCIA-Data Center Facility V1.0考试主要覆盖了数据中心基础设施相关的多个知识点,包括安全基础知识、数据中心基础设施、配电系统、制冷系统、监控管理系统以及数据中心其他相关系统。以下是对这些知识点的...
《华为HCIE-Data Center Facility Design V1.0实验指导和培训教材》是针对华为认证的高级专家级课程——HCIE(Huawei Certified ICT Expert)数据中心设施设计的实践指南。这个压缩包包含了全面的资料,旨在帮助学习...
"H12-411HCIA-Data Center Facility-2019-12" 本文档主要介绍了华为认证数据中心基础设施的知识点,涵盖了数据中心的基础设施、监控系统、制冷系统、UPS、蓄电池、电气系统等多个方面。 监控系统 * 华为监控系统 ...
本培训教材针对HCIP-Data Center Facility Deployment V2.0,主要涵盖了数据中心基础设施的多个关键系统。 首先,数据中心场地基础设施是一个多系统的集成体,它包含有八大系统:供电系统、制冷系统、内部装修、...
"Water-Desalination-Facility"项目旨在深入探讨和实施这一技术。 海水淡化的主要方法有以下几种: 1. **蒸馏法**:这是最古老的方法,通过加热海水使其蒸发,然后冷凝收集纯净水。过程中,盐分被留在原地,从而...
#### 容器类的实现方法 C++容器类可以通过多种方法实现: 1. **即兴(Ad hoc)**:每次从零开始重写,这种方法虽然灵活,但效率低下且容易出错。 2. **预处理器宏(Preprocessor Macros)**:通过宏来实现代码的...
HCIP-Data Center Facility Deployment V2.0 培训教材 HCIP-Data Center Facility Deployment V2.0 实验手册
《HCIA-Data Center Facility V1.0培训教材》是一份深入探讨数据中心设施技术的教程,旨在为初学者和IT从业者提供全面的数据中心基础知识。HCIA(Huawei Certified ICT Associate)是华为认证体系中的入门级认证,...
在这个场景中,"giraph-facility-location" 是一个具体的应用示例,展示了如何在 Giraph 中实现设施定位算法。设施定位问题是一种经典的优化问题,其目标是在给定的地理位置上选择最佳的设施位置,以最小化服务成本...
综上所述,华为认证HCIP-Data Center Facility Deployment V1.0培训教材的核心知识内容包括了数据中心建设面临的挑战、模块化数据中心的概念以及华为如何利用自己的技术优势,提供创新的解决方案以满足现代数据中心...
目录 1.数据中心基础设施咨询规划指导 2.数据中心配电系统规划设计概述 3.数据中心UPS系统规划 4.数据中心低压配电系统规划 5.数据中心柴油发电机系统规划 6.数据中心供配电架构案例分析 7.数据中心供电方案优化实训...
华为认证V2.0 培训教材 HCIA-Data Center Facility V2.0 培训教材.pdf
《华为HCIP-Data Center Facility-Operation 数据中心基础设施》培训教材与实验指导手册是一份针对华为认证ICT专家(HCIP)级别的数据中心设施运营管理的专业资料。该资料深入浅出地介绍了现代数据中心的基础架构、...
华为HCIA-Data Center Facility V2.0数据中心基础设施培训教材和实验手册
《HCIA-Data Center Facility V2.0》是华为认证体系中的一个重要部分,它专注于数据中心设施的管理和运维。这一认证涵盖了数据中心的基础设施、能源管理、环境控制、安全防护以及运维服务等多个方面,旨在培养具备...
网盘文件永久连接 11EHS简介11EHS简介,ip 1.2事故概率及人员资质12事故概率及人员资质,zip 1.3PPE防护简介1.3P防护简介,zip 14工程施工安全14工程施工安全zip 21数据中心发展介绍21数据中心发展介绍,zip ...
总结来说,"jdbc-odbc-with-nevigation-facility.zip"可能包含了一个示例项目,演示如何使用Java的JDBC API通过ODBC桥接器与数据库进行交互,实现数据的导航和操作。这个项目对于学习Java数据库编程和理解JDBC与ODBC...