容器+AOP 实现动态部署(二)

来源:互联网 发布:java中什么是方法重载 编辑:程序博客网 时间:2024/06/16 20:45

上节咱们介绍了整体架构的实现,现在就一步一步的进行实现

首先看咱们的容器,容器的目的是存放对象之后是提供服务。看一副图

 

容器中原来存放的是颗粒1,现在放入颗粒23,之后在对颗粒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();}

内部实现中,容器操作的对象是存放在什么地方呢,我们看到实现类中的一个集合mapmap存放着我们所有操作对象,借用集合的基本操作,我们封装容器公共方法。

  

核心代码

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]



小结:


有了容器的基本概念后,我们可以将一些颗粒可以随时动态的放入容器,还可以进行优化,通过页面效果,形式可视化的动态增加删除业务颗粒的效果,形成一种热部署的方式。后续继续咱们的容器公共服务。


2 0