xml多种方法注入java(学习记录)

来源:互联网 发布:安卓app源码如何修改 编辑:程序博客网 时间:2024/06/05 12:43

//这是一个xml文件,是我项目中的一个文件,我对它进行了分析

<beans.....>

 <bean id="" class="">                  //id就是一个标识,可以被当做另一个节点里的ref,class是一个类,下面的在本类中执行
  <constructor-arg name="" value="" />    //构造,有几个constructor-arg就有几个构造参数
  <constructor-arg name="" >
   <map>
    <entry key="getDataWriteParam">
     <bean class="com.ls.athena.message.redis.proxy.RedisProxyProcessor">
      <property name="queueName" value="Q_C_METER_TASK" />     初始化变量的值
      <property name="factory" ref="redisFactory" />      属性注入初始化类对象,并new出来,注入此类中
     </bean>
    </entry>
    
    <entry key="getDataWriteParam2">
    .......................
    <entry key="getDataWriteParam3">
    .......................
    <entry key="getDataWriteParam4">
    .......................
   </map>
 </constructor-arg>

 </bean>

</beans>

 

 

实现呢

 //* 将XML文件输出到指定的路径 
 public static void outputXml(Document doc, String fileName)
 throws Exception {
   TransformerFactory tf = TransformerFactory.newInstance();
   Transformer transformer = tf.newTransformer();
   DOMSource source = new DOMSource(doc);
   transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
   transformer.setOutputProperty(OutputKeys.INDENT, "yes");// 设置文档的换行与缩进
   PrintWriter pw = new PrintWriter(new FileOutputStream(fileName));
   StreamResult result = new StreamResult(pw);
   transformer.transform(source, result);
   System.out.println("生成XML文件成功!");
 }
 
 //////创建生成xml
 
  public static void createXml(String fileName) {
         Element root = document.createElement("listProtocolDataItemConfig");
         document.appendChild(root); //填充 根
        
         int i =0;//0000FF00
        do{
          StringBuilder thr = null;
       String codede = "";
  
       thr = new StringBuilder();
       thr.append("0000");
       String hex = Integer.toHexString(i);
       if (hex.length() < 2) {
        hex = "0" + hex;
       }
       if(i == 64)
        hex = "FF";
       thr.append(hex).append("00");
       codede = thr.toString().toUpperCase();//数据表示
              
       String namee =String.format("(当前)组合有功费率 "+Integer.toString(i)+"电能");
        
       Element employee = document.createElement("ProtocolDataItemConfig"); //节点
        
       Element DI = document.createElement("code"); //成员1
       DI.appendChild(document.createTextNode(codede));
       employee.appendChild(DI); //填充节点的成员1
        
       Element Cformat = document.createElement("code_format"); //成员2
       if(i == 64)
        Cformat.appendChild(document.createTextNode("**"));
       else
        Cformat.appendChild(document.createTextNode("SG11"));
       employee.appendChild(Cformat); //填充节点的成员2
        
       Element name = document.createElement("REMARK");
       if(i == 0)
        name.appendChild(document.createTextNode("(当前)组合有功总电能")); //成员3
       else if(i == 64)
        name.appendChild(document.createTextNode("(当前)组合有功电能数据块")); //成员3
       else
        name.appendChild(document.createTextNode(namee)); //成员3
       employee.appendChild(name); //填充节点的成员3
        
       root.appendChild(employee);//填充 节点
       i++;
         }while(i<65);
 

 
         TransformerFactory tf = TransformerFactory.newInstance();
         try {
             Transformer transformer = tf.newTransformer();
             DOMSource source = new DOMSource(document);
             transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
             transformer.setOutputProperty(OutputKeys.INDENT, "yes");
             PrintWriter pw = new PrintWriter(new FileOutputStream(fileName));
             StreamResult result = new StreamResult(pw);
             transformer.transform(source, result);
             System.out.println("生成XML文件成功!");
         } catch (TransformerConfigurationException e) {
             System.out.println(e.getMessage());
         } catch (IllegalArgumentException e) {
             System.out.println(e.getMessage());
         } catch (FileNotFoundException e) {
             System.out.println(e.getMessage());
         } catch (TransformerException e) {
             System.out.println(e.getMessage());
         }
     }


  public static void main(String args[]){
          A0xml dd=new A0xml();
          String str="./SG645.xml"; 
          dd.init();
          A0xml.createXml(str);    //创建xml
  }

 

 

这就是我的实现了,具体实现可以自行查看Spring的注入方法

下面的我转的,觉得很好

Applicationspring

通过构造方法注入,就相当于给构造方法的参数传值

  set注入的缺点是无法清晰表达哪些属性是必须的,哪些是可选

    的,构造注入的优势是通过构造强制依赖关系,不可能实例化不

    完全的或无法使用的bean

MemberBean定义四个变量,

   private String name;

private Double salary;

private Dept dept;

private String sex;

加上构造方法和toString方法:方便测试

Dept

   private String dname;

private String deptno;

使用set方法注入

第一种方法:根据索引赋值,索引都是以0开头的:

 <bean           

id="memberBean" class="www.csdn.spring01.constructor.MemberBean">

         <constructor-arg index="0" value="刘晓刚" />

         <constructor-arg index="1" value="3500" />

         <constructor-arg index="2" ref="dept"/>

         <constructor-arg index="3" value="男" />

 第二种方法是根据所属类型传值

 这种方法基本上不怎么适用,因为一个类里可以有好几个相同基本类型的变量,很容易就混淆值传给哪一个参数了所以做好不要使用这种方法:

         <constructor-arg type="java.lang.String" value="刘晓刚" 

         <constructor-arg type="java.lang.Double" value="3500" />

         <constructor-arg type="www.csdn.spring01.constructor.Dept" ref="dept"/>

         <constructor-arg type="java.lang.String" value="男" /> 

第三种方法:根据参数的名字传值:(推荐用法)

在这几种方法里我感觉这种方法是最实用的,他是根据名字来传值的,所以基本上只要名字对了,这个值就可以获取到  

         <constructor-arg name="name" value="刘晓刚" />

         <constructor-arg name="salary" value="3500" />

         <constructor-arg name="dept" ref="dept"/>

         <constructor-arg name="sex" value="男" />

第四种方法:直接传值

 直接给参数赋值,这种方法也是根据顺序排的,所以一旦调换位置的话,就会出现bug,这种方法已经很原始了

         <constructor-arg  value="刘晓刚" />

         <constructor-arg  value="3500" />

         <constructor-arg  ref="dept"/>

         <constructor-arg  value="男" />

    </bean>

<bean id="dept" class="www.csdn.spring01.constructor.Dept" >

 

  <property name="dname" value="北航"/>

  <property name="deptno" value="00001"/>

</bean>S

 

 

 

 

 

 

0 0
原创粉丝点击