4000336031 微信 li1377174255

达内Java培训学校

重庆java培训告诉你如何用反射做简易SpringIOC容器

来源:达内Java培训学校 发布时间:2022/3/28 10:29:37

  重庆java培训告诉你如何用反射做简易Spring IOC容器在学习Spring之后,对其中的工作原理产生了浓厚的兴趣,近些日子了解了一些SpringIOC容器的工作原理,并边打边磨做出了一个非常简易的SpringIOC容器,实现了他的XML文件装配,java代码装配以及自动装配的功能,下面是小编整理的思路以及代码

  模仿XML形式的装配思路

  1.思路

  采用XML装配bean时Spring会解析applicationContext.xml文件,并将各种类型的bean注入IOC容器,容器中的bean可以被无数次重复调用,极大地提高了系统效率而不用多次重复的new对象。

  为了模仿IOC,我们利用Map集合存放需要的bean,并新建一个conf.properties文件存放信息,存放com.wql.dao.userDao=com.wql.daoImpl.userDaoImpl等数据信息

  在获取bean之前解析conf.properties文件中的信息,利用反射技术将conf.properties文件中的内容通过Class.forName的形式解析为Class对象放入集合map中,这样每次获取对象都会从map中进行获取,不必再new

重庆java培训告诉你如何用反射做简易SpringIOC容器

  2.具体代码实现

  conf.properties:

  com.wql.dao.userDao=com.wql.daoImpl.userDaoImpl

  com.wql.service.userService=com.wql.serviceImpl.userServiceImpl

  MyApplicationContext类代码实现:

  package com.wql.application;

  import java.io.InputStream;

  import java.util.HashMap;

  import java.util.Map;

  import java.util.Properties;

  import java.util.Set;

  public class MyApplicationContext<T>{

  //模拟IOC容器

  private Map<Class,Object>map=new HashMap<>();

  private String ResourcePath;

  private String filepath;

  public MyApplicationContext(){

  }

  public MyApplicationContext(String resourcePath){

  ResourcePath=resourcePath;

  }

  //获得一个类型不知的对象(通过map集合)

  public T getBean(Class clazz){

  return(T)map.get(clazz);

  }

  //通过properties中存储的键值对获取Class对象,并注入进map集合

  public void initXMLSpringIOC(){

  try{

  InputStream stream=MyApplicationContext.class.getClassLoader().getResourceAsStream(ResourcePath);

  Properties properties=new Properties();

  properties.load(stream);

  //获取内容

  Set<Object>keys=properties.keySet();

  for(Object key:keys){

  //Class:实例

  map.put(Class.forName(key.toString()),Class.forName(properties.getProperty(key.toString())).newInstance());

  }

  }catch(Exception e){

  e.printStackTrace();

  }

  }

  }

领取试听课
每天限量名额,先到先得
温馨提示:为不影响您的学业,来校区前请先电话或QQ咨询,方便我校安排相关的专业老师为您解答
  • 详情请进入 达内Java培训学校

关于我们 | 招生信息 | 新闻中心 | 学校动态

版权所有:搜学搜课(www.soxsok.com)