星空网 > 软件开发 > Java

自定义模拟一个Spring IOC容器

一、模拟一个IOC容器:

  介绍:现在,我们准备使用一个java project来模拟一个spring的IOC容器创建对象的方法,也就是不使用spring的jar自动帮助我们创建对象,而是通过自己手动书写代码创建对象。 

二、具体步骤: 

  1、创建一个java project,不导入任何的spring相关的jar包(除了dom4j需要使用的相关jar包),并且导入dom4j相关的jar包,如下。

         自定义模拟一个Spring IOC容器

      其中,这两个jar包是用来解析 applicationContext.

 

  2、在src源文件夹中创建相关的类和接口如下:

     自定义模拟一个Spring IOC容器

      ①、首先,新建一个Demo.java实体类,代码如下:

package iocDemo;public class Demo {  public void test(){    System.out.println("this is the first test!");  }  }

       ②、其次,新建一个ApplicationContext接口,代码如下:在ApplicationContext这个接口中定义一个getBean的方法,在springIOC容器中也有这个方法,本例就是模拟IOC容器中的这个方法,这个方法传入一个参数,就是applicationContext.

package iocDemo;public interface ApplicationContext {    public Object getBean(String beanId);}

 

       ③、之后,新建一个ClassPath在这个类中具体实现getBean的方法,是核心部分,也就是模拟IOC容器中的getBean的方法。具体请看代码中的注释部分。

 

package iocDemo;import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class ClassPathimplements ApplicationContext {
  //定义一个成员属性,并且使用这个属性作为构造方法,用接收 new ClassPathprivate String fileName; public ClassPaththis.fileName=fileName; }

  //重写是实现接口中的getBean()方法。 @Override public Object getBean(String beanId) {
     //获取当前对象(ClassPathString currentPath = this.getClass().getResource("").getPath();

     //获取到ApplicationContext. String xPath = currentPath+fileName;
     //创建一个SAXReader对象,用来读取配置文件 SAXReader reader = new SAXReader();

     //创建一个Document对象,SAXReader读取配置文件之后的返回值即Document对象  Document document =null;

     //创建一个Object对象用来返回创建的对象 Object obj =null; try{
       //SAXReader读取配置文件  document = reader.read(xPath);
       
       //使用Document对象找到配置文件中的bean节点,并且强转为Element对象   Element bean = (Element)document.selectSingleNode("beans/bean[@id='"+beanId+"']");
        
       //在bean节点中找到class属性,并且获取到这个属性的值 String beanClass = bean.attributeValue("class");

       //通过反射把这个属性的值转化为指定的对象 obj = Class.forName(beanClass).newInstance(); }catch(Exception e){ System.out.println("文件读取错误!"+e.getMessage()); }
    //返回这个对象 return obj; }}

 

      ④、新建一个配置文件applicationContext.

<?class="iocDemo.Demo" scope="prototype"></bean>  </beans>

 

       ⑤、创建一个Test测试类,代码如下:

package iocDemo;/* 本例是模拟一个spring的ioc容器。就是不使用spring的jar包来帮我们创建一个对象,而是自己手动书写代码来实现创建对象的目的*/public class Test {  public static void main(String[] args) {
     //创建一个ApplicationContext实现类的对象,这步模拟IOC容器创建。  ApplicationContext ac = new ClassPath);

     //使用这个对象获取Demo对象,这步模拟IOC容器在applicationContext.= (Demo)ac.getBean("test");
     //获取到这个对象调用这个对象的方法  d.test(); } }

 

       ⑥、测试结果如下:

                自定义模拟一个Spring IOC容器

 

          

 示例结束、谢谢浏览!


 




原标题:自定义模拟一个Spring IOC容器

关键词:Spring

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

亚马逊新政策生效,这类卖家旺季listing将被移除!:https://www.ikjzd.com/articles/132914
移动购物成2020年大热,Wish如何护航商家赢得海外购物季?:https://www.ikjzd.com/articles/132915
Wish助力旺季:EPC项目和A+物流计划承诺运费不上调:https://www.ikjzd.com/articles/132916
2021年,亚马逊创业还能不能做?:https://www.ikjzd.com/articles/132917
泰国电商价格战愈演愈烈 头部平台亏损进一步扩大:https://www.ikjzd.com/articles/132918
2020年获得亚马逊产品评论的13+1种方法(上):https://www.ikjzd.com/articles/132919
南京到普陀风景区 南京到普陀风景区怎么走:https://www.vstour.cn/a/404228.html
十堰有哪些官方网站:https://www.vstour.cn/a/404229.html
相关文章
我的浏览记录
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流