spring依赖注入

Posted zhouyeqin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring依赖注入相关的知识,希望对你有一定的参考价值。

1、  依赖注入—dependency injection

bean对象依赖于spring容器创建,bean对象依赖的资源由容器来设置和装配

  • l  谁依赖于谁:应用程序依赖于IoC容器;
  • l  为什么需要依赖:应用程序需要IoC容器来提供对象需要的外部资源;
  • l  谁注入谁: IoC容器注入应用程序某个对象,应用程序依赖的对象;
  • l  注入了什么:注入某个对象所需要的外部资源(包括对象、资源、常量数据)。

 

2、  spring注入方式—--构造器注入

见spring ioc创建对象

3、  spring注入方式----setter注入

要求被注入的属性必须有set方法。Set方法的方法名由set+属性首字母大写。如果属性是boolean没有get方法,是is

a)         常量注入

<bean name="student" class="com.silvan.pojo.Student">
    <property name="name" value="zhangsan"></property>
</bean>
//student类
public class Student {
    private String name;
    public void setName(String name) {
       this.name = name;
    }
    public void show(){
       System.out.println("name="+name+"  addr="+addr.getAddress());
    }
}
//测试
public static void main(String[] args) {
    ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
    Student stu = (Student) ac.getBean("student");
    stu.show();
}


b)         Bean注入

//bean配置文件
<bean name="addr" class="com.silvan.pojo.Address">
    <property name="address" value="shandong"></property>
</bean>
<bean name="student" class="com.silvan.pojo.Student">
    <property name="name" value="zhangsan"></property>
    <property name="addr" ref="addr"></property>
</bean>
//student类
public class Student {
    private String name;
    private Address addr;
    public void setAddr(Address addr) {
       this.addr = addr;
    }
    public void setName(String name) {
       this.name = name;
    }
    public void show(){
       System.out.println("name="+name+"  addr="+addr.getAddress());
    }
}
//address类
public class Address {
    private String address;
    public String getAddress() {
       return address;
    }
    public void setAddress(String address) {
       this.address = address;
    }
}
//测试
public static void main(String[] args) {
    ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
    Student stu = (Student) ac.getBean("student");
    stu.show();
}

c)         数组注入

<bean name="student" class="com.silvan.pojo.Student">
      <property name="name" value="zhangsan"></property>
      <property name="addr" ref="addr"></property>
      <property name="books">
         <array>
            <value>山居笔记</value>
            <value>撒哈拉的故事</value>
            <value>基督山伯爵</value>
            <value></value>
         </array>
      </property>
   </bean>

 d)         List注入

<property name="hobbies">
         <list>
            <value>看书</value>
            <value>听歌</value>
            <value>看电视</value>
            <value>运动</value>
         </list>
      </property>

e)         Map注入

<property name="cards">
    <map>
       <entry key="bank of china" value="1324325325"></entry>
       <entry>
           <key><value>工商银行</value></key>
           <value>75784758748784</value>
       </entry>
    </map>
</property>


f)          Set注入

<property name="games">
         <set>
            <value>三国</value>
            <value>lol</value>
            <value>王者荣耀</value>
         </set>
      </property>


g)         Null注入

<property name="wife"><null/></property>

h)         Properties注入 

<property name="info">
         <props>
            <prop key="学号">21203</prop>
            <prop key="sex">boy</prop>
            <prop key="name">小强</prop>
         </props>
      </property>

i)           P命名空间注入

//配置文件头部加入p声明
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd">
//p命名空间注入
<!-- p命名空间注入 属性依然要设置set方法 -->
    <bean name="user" class="com.silvan.pojo.User" p:name="杨幂" p:age="29"></bean>

j)           C命名空间注入

//头部配置
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
     xmlns:c="http://www.springframework.org/schema/c" 
xsi:schemaLocation
="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- c命名空间注入要求有对应参数的构造方法 --> <bean name="user1" class="com.silvan.pojo.User" c:name="赵丽颖" c:age="26"></bean>

 

  

 





以上是关于spring依赖注入的主要内容,如果未能解决你的问题,请参考以下文章

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

Android 片段和依赖注入

Android片段和依赖注入

Spring依赖注入的方式

spring依赖注入,和控制反转。用自己的话说是怎么说的。最好能够用代码来解释

Spring设置注入和构造注入的区别