上节咱们介绍了整体架构的实现, 现在就一步一步的进行实现
首先看咱们的容器 ,容器的目的是 存放对象 , 之后是 提供服务。看一副图
容器中 原来存放的是颗粒1,现在放入颗粒2,3,之后在对颗粒3进行删除,这就是我们容器中最基本方式。
package com.tgb.configra; import java.util.Map; public interface ContainerBeans { /** * 获取容器中指定对象 * * @param id * 对象名称如: getBean("user") * @return */ public Object getBean(String id); /** * 容器中放入对象 * * @param k * @param v * @return */ public Object put(String k, Object v); /** * 打印容器中所有对象类型 */ public void printTypeName(); /** * 获取容器中所有对象 返回类型 Map<string(对象类型),Object(对象)> * * @return Map<string(对象类型),Object(对象)> */ public Map<String, Object> getAllBean(); /** * 获取容器所有bean */ public void printAllbeanId(); public void remove(String id); /** * 容器中对象的数量 * @return */ public int size(); }
内部实现 中,容器操作的对象是存放在什么地方呢, 我们看到实现类中的一个集合 map,map存放着我们所有操作对象, 借用集合的基本操作,我们封装容器公共方法。
核心代码
public void putAllBeans(List list, Map<String, Object> allBeans){ for (int i = 0; i < list.size(); i++) { Element element = (Element) list.get(i); String id = element.getAttributeValue("id"); String clazz = element.getAttributeValue("class"); Object o = Class.forName(clazz).newInstance(); allBeans.put(id, o); }
客户端的测试
public static void main(String[] args) throws Exception { ContainerBeans containerBeans = new ClassPathXmlApplicationContext();// new 为 装配容器过程 User user = new User(); user.setUarename("hanyankun"); //参数设置 containerBeans.printAllbeanId(); System.out.println("\n"); StudentDao studentrDao = new StudentDaoImpl(); containerBeans.put("studentDao", studentrDao); System.out.println("----放入对象-studentDao---"); containerBeans.printAllbeanId(); System.out.println("\n"); System.out.println("-----拿出来的studentDao-执行方法--syaName-"); StudentDao studentrDaoBean= (StudentDao)containerBeans.getBean("studentDao"); studentrDaoBean.syaName(); System.out.println("\n"); System.out.println("-----删除对象TeacherDao 和 UserDao--"); containerBeans.remove("TeacherDao"); containerBeans.remove("UserDao"); containerBeans.printAllbeanId(); }
容器默认颗粒初始化配置文件
<beans> <bean id="UserDao" class="com.tgb.daoImpl.UserDaoImpl" /> <bean id="TeacherDao" class="com.tgb.daoImpl.TeacherDaoImpl" /> <bean id="userService" class="com.tgb.service.UserService"> <property name="userDao" ref="UserDao" /> </bean>
测试 容器中默认有三个颗粒,之后 在添加一个颗粒,取出该颗粒,执行颗粒中方法, 最后在删除容器中的两个颗粒后,分别打印容器中的对象。
打印效果图
容器中含有对象是3个,分别是:
[TeacherDao,UserDao, userService]
----放入对象-studentDao---
容器中含有对象是4个,分别是:
[TeacherDao,UserDao, studentDao, userService]
-----拿出来的studentDao-执行方法--syaName-
----my name ishanyk--
-----删除对象TeacherDao 和 UserDao--
容器中含有对象是2个,分别是:
[studentDao,userService]
有了容器的基本概念后,我们可以将一些颗粒可以随时动态的放入容器 ,还可以进行 优化,通过页面效果,形式可视化的动态增加删除业务颗粒的效果,形成一种热部署的方式。后续继续咱们的容器公共服务。
原文地址:http://blog.csdn.net/han_yankun2009/article/details/46288505