`
yant
  • 浏览: 18734 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

spring 的工作原理

阅读更多
1.读取配置文件.xml

  ① 全局变量:
       * List<BeanDefinition > beanDefins = new ArrayList<BeanDefinition > ();//其中BeanDefinition是自定义的类,它有两个String属性:id、className;和一个有参构造函数
        * Map<String,Object> sigltons = new HashMap<String,Object>();
………………
  ② List<Element> beans = xpath.selectNodes(document);//获取文档下的所有bean节点
  ③ for(Element element : beans){
       String id = element.attributeValue("id");//获取id属性值
        String class = element.attributeValue("class");//获取class属性值
        BeanDefinition beanDefin = new BeanDefinition(id,class);生成自定义类对象;(使用的是构造方法)
       beanDefins.add(beanDefin);
     }

2.实例化Bean对象
   * for(BeanDefinition beanDefinition : beanDefins){
     sigltons.put(beanDefinition.getId(),Class.forName(beanDefinition .getClassName()).newInstance());//实例化类并放在Map中
     }


3.自定义getBean()方法:
    Public Object getBean(String className){
      return this.sigltons.get(className);
   }
  
   说明:
       * Class.forName(beanDefinition .getClassName()).newInstance();通过反射进行类的实例化:先把beanDefinition .getClassName()转变成class对象,然后实例化对象;


4.对bean的属性注入值:     ………………

     * Method setter = properdesc.getWriterMethod();//获取属性的setter方法
     if(setter != unll){
Object value = null;
if(propertyDenfinition.getRef()!=null&&"".equals(propertyDenfinition.getRef().trim())){
  value = sigltons.get(propertyDenfinition.getRef());//ref时
}else{
  value = ConvertUtils.convert(propertyDenfinition.getValue(),properdesc.getPropertyType());//不是ref时,即value时的类型转换
}
setter.setAccessiable(true);//如果在类中定义的setter方法是私有时,设置其可访问性
setter.invoke(bean,value);//把value的值注入到bean中
}

说明:propertyDenfinition是xml配置文件中的bean下的property的值(其中把所有的xml配置文件中的bean下的property的值都放在了集合中,propertyDenfinition是循环得到)
properdesc 是所定义的类(如实体类)中的属性(其中把所有所定义的类的属性都放在了集合中,properdesc是循环得到)
自定义BeanDefinition和PropertyDefinition类以配合存放xml中的信息
PropertyDefinition类专门用来存放xml中的节点中的属性名:如ref,name,其中propertyDenfinitions就是这类中定义的List<PropertyDefinition>属性:专门用了存放<property>的属性值
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics