SSM搭建-Spring之bean的属性值XML注入方式(4)

来源:互联网 发布:淘宝淘金币兑换区 编辑:程序博客网 时间:2024/05/17 21:49

   林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka

本文主要讲解了spring中constructor注入的4种不同写法和sette的3种不同写法

一、constructor注入4种不同写法  

通过构造方法注入,就相当于给构造方法的参数传值set注入的缺点是无法清晰表达哪些属性是必须的,哪些是可选的,构造注入的优势是通过构造强制依赖关系,不可能实例化不完全的或无法使用的bean。

第1种方法:直接传值

[html] view plain copy

print?在CODE上查看代码片派生到我的代码片
  1. <!-- constructor方式注入写法1,直接传值 -->  
  2. <bean id="student1" class="com.mucfc.beanfactory.Student">  
  3.     <constructor-arg value="小明" />  
  4.     <constructor-arg value="2001" />  
  5. </bean>  
 直接给参数赋值,这种方法也是根据顺序排的,所以一旦调换位置的话,就会出现bug,这种方法已经很原始了

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

[html] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. <!-- constructor方式注入写法2,根据索引赋值 -->  
  2.     <bean id="student2" class="com.mucfc.beanfactory.Student">  
  3.         <constructor-arg index="0" value="阿狗" />  
  4.         <constructor-arg index="1" value="2002" />  
  5.     </bean>  

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

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

[html] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. <!-- constructor方式注入写法3,根据所属类型传值 -->  
  2.     <bean id="student3" class="com.mucfc.beanfactory.Student">  
  3.         <constructor-arg type="String" value="大白" />  
  4.         <constructor-arg type="int" value="2003" />  
  5. <strong>    </bean></strong>  
第4种方法:根据参数的名字传值:(推荐用法)
[html] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. <!-- constructor方式注入写法4,根据参数的名字传值:记得传入名是构造器的参数名(推荐用法) -->  
  2.    <bean id="student4" class="com.mucfc.beanfactory.Student">  
  3.     <constructor-arg name="name" value="大地" />  
  4.     <constructor-arg name="id" value="4503" />  
  5. </bean>  

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

二、setter注入3种不同写法  

1、

[html] view plain copy print?在CODE上查看代码片派生到我的代码片

  1. <!-- setter方式注入写法1,记得要有无参构造函数 -->  
  2. <bean id="student5" class="com.mucfc.beanfactory.Student">  
  3.     <property name="std_name">  
  4.         <value>天天</value>  
  5.     </property>  
  6.     <property name="std_id">  
  7.         <value>2005</value>  
  8.     </property>  
  9. </bean>  


2、
[html] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. <!-- setter方式注入写法2,记得要有无参构造函数 -->  
  2.     <bean id="student6" class="com.mucfc.beanfactory.Student">  
  3.         <property name="std_name" value="水水" />  
  4.         <property name="std_id" value="3009" />  
  5.     </bean>  
3、

[html] view plain copy print?在CODE上查看代码片派生到我的代码片

  1. <!-- setter方式注入写法7,记得要有无参构造函数  -->  
  2.     <bean id="student7" class="com.mucfc.beanfactory.Student"  
  3.         p:std_name="针地" p:std_id="3445" />  
推荐用第2种或第3种,第1种要写的代码比较多,看直来也没那么顺。

三、使用范例

新建一个Javaproject工程,名字自已取吧,然后把Spring的jar文件 和commons-logging的jar文件加载进来就行

不懂看这里【Spring】Spring配置及第个Spring HelloWorld

新建一个包,添加一个Student.Java,代码如下:

[java] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. /**  
  2. *功能 测试constructor和setter注入的不同写法 
  3. *作者 林炳文(ling20081005@126.com 博客:http://blog.csdn.net/evankaka)  
  4. *时间 2015.4.4  
  5. */   
  6. package com.mucfc.beanfactory;  
  7. public class Student {  
  8.     private String std_name;  
  9.     private int std_id;  
  10.     
  11.     public Student(){  
  12.           
  13.     }  
  14.     public Student(String name,int id) {  
  15.      std_name=name;  
  16.      std_id=id;  
  17.     }  
  18.   
  19.     public String getStd_name() {  
  20.         return std_name;  
  21.     }  
  22.   
  23.     public void setStd_name(String std_name) {  
  24.         this.std_name = std_name;  
  25.     }  
  26.   
  27.     public int getStd_id() {  
  28.         return std_id;  
  29.     }  
  30.   
  31.     public void setStd_id(int std_id) {  
  32.         this.std_id = std_id;  
  33.     }  
  34.     public String toString(){  
  35.         return "学生姓名:"+std_name+" 学生学号:"+std_id;  
  36.     }  
  37.   
  38. }  
在当前工程的src文件夹下添加文件ApplicationContext.xml,就是工程-》右键-》new->other->xml.......

代码如下:

[html] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans    
  5.          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">  
  6.     <!-- constructor方式注入写法1,直接传值 -->  
  7.     <bean id="student1" class="com.mucfc.beanfactory.Student">  
  8.         <constructor-arg value="小明" />  
  9.         <constructor-arg value="2001" />  
  10.     </bean>  
  11.     <!-- constructor方式注入写法2,根据索引赋值 -->  
  12.     <bean id="student2" class="com.mucfc.beanfactory.Student">  
  13.         <constructor-arg index="0" value="阿狗" />  
  14.         <constructor-arg index="1" value="2002" />  
  15.     </bean>  
  16.     <!-- constructor方式注入写法3,根据所属类型传值 -->  
  17.     <bean id="student3" class="com.mucfc.beanfactory.Student">  
  18.         <constructor-arg type="String" value="大白" />  
  19.         <constructor-arg type="int" value="2003" />  
  20.     </bean>  
  21.     <!-- constructor方式注入写法4,根据参数的名字传值:记得传入名是构造器的参数名(推荐用法) -->  
  22.     <bean id="student4" class="com.mucfc.beanfactory.Student">  
  23.         <constructor-arg name="name" value="大地" />  
  24.         <constructor-arg name="id" value="4503" />  
  25.     </bean>  
  26.       
  27.     <!-- setter方式注入写法1,记得要有无参构造函数 -->  
  28.     <bean id="student5" class="com.mucfc.beanfactory.Student">  
  29.         <property name="std_name">  
  30.             <value>天天</value>  
  31.         </property>  
  32.         <property name="std_id">  
  33.             <value>2005</value>  
  34.         </property>  
  35.     </bean>  
  36.     <!-- setter方式注入写法2,记得要有无参构造函数 -->  
  37.     <bean id="student6" class="com.mucfc.beanfactory.Student">  
  38.         <property name="std_name" value="水水" />  
  39.         <property name="std_id" value="3009" />  
  40.     </bean>  
  41.   
  42.     <!-- setter方式注入写法7,记得要有无参构造函数  -->  
  43.     <bean id="student7" class="com.mucfc.beanfactory.Student"  
  44.         p:std_name="针地" p:std_id="3445" />  
  45. </beans>  
好了,Ioc容器都配置好了。下面就是来使用了啦,直接看代码:
[java] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. /**  
  2. *功能 测试constructor和setter注入的不同写法 
  3. *作者 林炳文(ling20081005@126.com 博客:http://blog.csdn.net/evankaka)  
  4. *时间 2015.4.4  
  5. */   
  6. package com.mucfc.beanfactory;  
  7. import org.springframework.beans.factory.xml.XmlBeanFactory;  
  8. import org.springframework.core.io.ClassPathResource;  
  9. public class Test {  
  10.   
  11.     public static void main(String[] args) {  
  12.         XmlBeanFactory bFactory = new XmlBeanFactory(new ClassPathResource("ApplicationContext.xml"));  
  13.           
  14.         Student stu1 = (Student) bFactory.getBean("student1");  
  15.         Student stu2 = (Student) bFactory.getBean("student2");  
  16.         Student stu3 = (Student) bFactory.getBean("student3");  
  17.         Student stu4 = (Student) bFactory.getBean("student4");  
  18.         Student stu5 = (Student) bFactory.getBean("student5");  
  19.         Student stu6 = (Student) bFactory.getBean("student6");  
  20.         Student stu7 = (Student) bFactory.getBean("student7");  
  21.           
  22.         System.out.println("-------------constructor方式注入写法-------------");  
  23.         System.out.println(stu1);  
  24.         System.out.println(stu2);  
  25.         System.out.println(stu3);  
  26.         System.out.println(stu4);  
  27.           
  28.         System.out.println("-------------setter方式注入写法,记得要有无参构造函数-------------");  
  29.         System.out.println(stu5);  
  30.         System.out.println(stu6);  
  31.         System.out.println(stu7);  
  32.     }  
  33.   
  34. }  
输出结果:


这就是最后的结果,是不是很简单?


   林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka

0 0
原创粉丝点击