Spring依赖注入方法

依赖注入
  • 依赖注入Dependency Injection
    • 依赖
      • bean对象的创建依赖于容器
      • bean对象依赖于资源
    • 注入
      • bean对象依赖的资源由容器设置和装配
Spring依赖注入方式
  • 构造器注入
  • 官网API示例

    • java代码

      package x.y;
      
      public class Foo {
      
          public Foo(Bar bar, Baz baz) {
              // ...
          }
      }
    • 配置文件

      <beans>
          <bean id="foo" class="x.y.Foo">
              <constructor-arg ref="bar"/>
              <constructor-arg ref="baz"/>
          </bean>
      
          <bean id="bar" class="x.y.Bar"/>
      
          <bean id="baz" class="x.y.Baz"/>
      </beans>
  • set注入

    • 被注入的属性一定要有set方法,且方法名为set + 属性名(首字母大写)
    • 如果属性是Boolean类型,没有get方法,只有is + 属性名
    • 常量注入

      <bean id="student" class="com.eric.vo.Student">
          <property name="name" value="char"></property>
      </bean>
    • bean注入

      <bean id="addr" class="com.eric.vo.Address"/>
      <bean id="student" class="com.eric.vo.Student">
          <property name="name" value="char"></property>
          <property name="address" ref="addr"></property>
      </bean>
      • 对象包含另一个对象
      • 首先创建对应的bean对象,再通过<property>中的ref引用该对象
    • 数组注入

      <bean id="student" class="com.eric.vo.Student">
          <property name="name" value="char"></property>
          <property name="address" ref="addr"></property>
          <property name="books">
              <array>
                  <value>java</value>
                  <value>servlet/jsp</value>
                  <value>ssh</value>
              </array>
          </property>
      </bean>
      • 通过<array>以及<value>标签来传入数组数据
    • List注入

      <property name="hobbies">
          <list>
              <value>coding</value>
              <value>game</value>
              <value>movie</value>
          </list>
      </property>
      • 通过<list>以及<value>标签来传入数组数据
    • Map注入

      <property name="cards">
          <map>
              <entry key="vip" value="19980321"></entry>
              <entry>
                  <key><value>china bank</value></key>
                  <value>32151305153324523</value>
              </entry>
          </map>
      </property>
    • Set注入

      <property name="games">
          <set>
              <value>lol</value>
              <value>qqt</value>
              <value>dnf</value>
          </set>
      </property>
    • null注入

      <property name="wife"><null/></property>
    • Properties注入

      <property name="info">
          <props>
              <prop key="id">01</prop>
              <prop key="sex">male</prop>
              <prop key="birthday">03.21</prop>
          </props>
      </property>
    • p-namesapce注入

      <bean id="user" class="com.eric.vo.User" p:name="char" p:pwd="1234"/>
      • 需要引用xmlns:p="http://www.springframework.org/schema/p"
      • 在bean中使用p:attr来赋值
      • 需要属性的set方法
    • c:namespace注入

      <bean id="user1" class="com.eric.vo.User" c:name="eric" c:pwd="1111"/>
      • 需要引用xmlns:c="http://www.springframework.org/schema/c"
      • 需要有对应的构造方法
  • bean自动装配

    • 设置<bean>中的autowire属性

      • autowire="byName": 根据属性获取方法名称setFoo(Foo f)查找相应的<bean id="foo" class="x.y"/>

        <bean id="userDao" class="com.eric.impl.UserDaoOracleImpl"/>    
        <bean id="service" class="com.eric.service.impl.UserServiceImpl" autowire="byName"/>
      • autowire="byType": 根据类型进行自动装配setFoo(Foo f)即查找<bean class="x.y.Foo"/>,后者的类可以为前者类的子类

        <bean class="com.eric.impl.UserDaoOracleImpl"/> 
        <bean id="service" class="com.eric.service.impl.UserServiceImpl" autowire="byType"/>
      • autowire="no": 不使用自动装配

      • autowire="constructor": 当通过构造器的方法实例化bean时,按照byType的方式自动装配

猜你喜欢

转载自blog.csdn.net/weixin_40683252/article/details/81122135