[优质例子存档]Spring的两种依赖注入方式:setter方法注入与构造方法注入

来源:互联网 发布:数据定义语言包括哪些 编辑:程序博客网 时间:2024/06/05 00:17

1.setter方法注入

   setter方法注入即是创建一个普通的JavaBean类,为需要注入的属性通过对应的setter方法即可,如:

(1)创建一个Id类:

[java] view plain copy
  1. package com.loster.li;  
  2.   
  3. public class Id {  
  4.     private int id;  
  5.     private String name;  
  6.     public int getId() {  
  7.         return id;  
  8.     }  
  9.     public void setId(int id) {  
  10.         this.id = id;  
  11.     }  
  12.     public String getName() {  
  13.         return name;  
  14.     }  
  15.     public void setName(String name) {  
  16.         this.name = name;  
  17.     }  
  18. }  
(2)创建配置文件Id_Bean.xml
[html] view plain copy
  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"  
  4.        xsi:schemaLocation="http://www.springframework.org/schema/beans  
  5.            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">  
  6.              
  7.     <bean id="id" class="com.loster.li.Id">  
  8.     <property name="id" value="123"></property>  
  9.     <property name="name" value="xiaoli"></property>  
  10.     </bean>  
  11. </beans>  
(3)编写测试类IdTest.java,并运行:
[java] view plain copy
  1. package com.loster.li;  
  2.   
  3. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  4.   
  5. public class IdTest {  
  6.     public static void main(String[] args){  
  7.         ClassPathXmlApplicationContext context = new   
  8.                 ClassPathXmlApplicationContext("com/loster/li/Id_Bean.xml");  
  9.           
  10.         Id id = (Id)context.getBean("id");  
  11.         System.out.println(id.getId());  
  12.         System.out.println(id.getName());  
  13.     }  
  14. }  
   运行结果如下:



2.构造方法注入

(1)将上面的Id.class修改为:

[java] view plain copy
  1. package com.loster.li;  
  2.   
  3. public class Id {  
  4.     private int id;  
  5.     private String name;  
  6.     public Id(int id,String name){  
  7.         this.id = id;  
  8.         this.name = name;  
  9.     }  
  10.     public int getId() {  
  11.         return id;  
  12.     }  
  13.     public void setId(int id) {  
  14.         this.id = id;  
  15.     }  
  16.     public String getName() {  
  17.         return name;  
  18.     }  
  19.     public void setName(String name) {  
  20.         this.name = name;  
  21.     }  
  22. }  
(2)将上面的Id_Bean.xml修改为:

[html] view plain copy
  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"  
  4.        xsi:schemaLocation="http://www.springframework.org/schema/beans  
  5.            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">  
  6.              
  7.     <bean id="id" class="com.loster.li.Id">  
  8.     <constructor-arg index="0" value="456"></constructor-arg>  
  9.     <constructor-arg index="1" value="dawang"></constructor-arg>  
  10.     </bean>  
  11. </beans>  
(3)再次运行IdTest.java,运行结果如下:

                                                                                                                    


第二个帖子的例子

1、构造器注入

       这里以“bean应用”歌手唱歌为例,为singer类添加一歌名属性song,并通过构造器注入将song注入。

修改singer类,添加构造函数,其参数为为song

 

application.xml中用<constructor-arg>注入song

 

注:index表示参数的位置,value表示参数值

Test类中,代码如下

 

此时运行Test类,控制台输出

 

注入成功!!!

这只是值属性的注入,但对象的注入也是类型。比如歌手除了唱歌,他还要弹吉他。

这里建一个tool的包,并在里面接一个工具的接口Tool,接口有一方法perform()

 

建一个Guitar类,实现Tool接口

 

修改singer类,在构造器加一Tool属性

 

application.xml中注入Guitar类(先实例化Guitar再注入)

 

注:用ref引用Guitar对象

此时运行Test,控制台输出

 

构造注入完成

 

2setter注入(以上面的例子)

首先删掉singer类构造方法,并未songguitar生成set方法

 

application.xml中用<property>注入song值和Guitar

 

注:属性值用value,对象用ref

运行Test类,控制台输出

 

【注意】代码应该有错,其中setter方式中的singer方法应该输出“i want to sing”+ song ,忘了+ 变量 song。、


第三个例子,有ref讲解

网页链接:http://blog.csdn.net/sunnyyoona/article/details/50631178

阅读全文
0 0
原创粉丝点击