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

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

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

 

容器中 原来存放的是颗粒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
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值