上节咱们介绍了整体架构的实现, 现在就一步一步的进行实现
首先看咱们的容器 ,容器的目的是 存放对象 , 之后是 提供服务。看一副图
容器中 原来存放的是颗粒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]
小结:
有了容器的基本概念后,我们可以将一些颗粒可以随时动态的放入容器 ,还可以进行 优化,通过页面效果,形式可视化的动态增加删除业务颗粒的效果,形成一种热部署的方式。后续继续咱们的容器公共服务。