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

前端之家收集整理的这篇文章主要介绍了xml多种方法注入java(学习记录)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

//这是一个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的注入方法

下面的我转的,觉得很好

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

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

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

完全的或无法使用的bean

MemberBean定义四个变量,

privateStringname;

privateDoublesalary;

privateDeptdept;

privateStringsex;

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

Dept

privateStringdname;

privateStringdeptno;

使用set方法注入

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

<bean

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

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

<constructor-argindex="1"value="3500"/>

<constructor-argindex="2"ref="dept"/>

<constructor-argindex="3"value="男"/>

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

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

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

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

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

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

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

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

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

<constructor-argname="salary"value="3500"/>

<constructor-argname="dept"ref="dept"/>

<constructor-argname="sex"value="男"/>

第四种方法:直接传值

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

<constructor-argvalue="刘晓刚"/>

<constructor-argvalue="3500"/>

<constructor-argref="dept"/>

<constructor-argvalue="男"/>

</bean>

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

<propertyname="dname"value="北航"/>

<propertyname="deptno"value="00001"/>

</bean>S

原文链接:/xml/296150.html

猜你在找的XML相关文章