SpringDI(Dependency Injection)

DI作用:因为IOC解除了程序间的依赖关系,所以DI就是weil维护程序间的依赖关系,称:依赖注入


能注入的三类数据类型:

  • 基本类型和String
  • 其他bean类型(在配置文件中或者注解配置过的bean)
  • 复杂类型/集合类型

注入的三种方式:


使用构造函数注入

优势: 可以实现,在获取某对象时,注入数据时必须的操作,否则对象无法创建成功

弊端: 改变了bean对象的实例化方式,导致我们在创建对象时,如果用不到这些属性,也必须提供

<bean id="userService" class="com.xp.service.impl.UserServiceImpl">
        <constructor-arg name="name" value="哈哈哈"></constructor-arg>
        <constructor-arg name="age" value="18"></constructor-arg>
        <constructor-arg name="date" ref="now"></constructor-arg>
</bean>
<bean id="now" class="java.util.Date"></bean>
  • 参数说明:
    • 一个constructor-arg标签代表一个依赖

    • constructor-arg属性:

      • type 用于指定要注入的数据类型,该数据类型也是构造函数中某个或某些参数的类型
      • index 用于指定要注入的数据,给构造函数中指定索引位置的参数辅助,索引从0开始
      • name 用于指定给构造函数中指定名称的函数辅助(常用)
      • 以上三个都是用于指定给构造函数中哪个参数赋值
      • value 用于提供基本类型和String类型的数据
  • ref 用于指定其他bean类型数据,即在spring的IOC核心容器中配置的bean对象

  • 使用set方法注入(常用)

    优势: 创建对象时没有明确限制,可以直接使用默认构造函数

    弊端: 无法实现让某个属性必须有值,则获取对象是有可能set方法没有执行

    <bean id="userService" class="com.xp.service.impl.UserServiceImpl">
    	<property name="name" value="hhh"></property>
    	<property name="age" value="17"></property>
    	<property name="date" ref="now"></property>
    </bean>
    <bean id="now" class="java.util.Date"></bean>
    
    • 参数说明:
      • 一个property标签代表一个依赖
      • property属性:
        • name 用于指定给构造函数中指定名称的函数辅助(常用)
        • value 用于提供基本类型和String类型的数据x
        • ref 用于指定其他bean类型数据,即在spring的IOC核心容器中配置的bean对象
  • 使用注解注入

复杂类型注入

  • 常用:List,Array,Set,Map,Propertise

  • list,set,array标签可以混用,map和props标签可以混用,即结构相同,标签可以互换,所以,只需要记住两个标签即可

<bean id="userDao" class="com.xp.dao.impl.UserDaoImpl">
    <property name="myList">
        <list>
            <value>213</value>
            <value>2513</value>
            <value>43</value>
            <value>2613</value>
        </list>
    </property>
    <property name="myStrs">
        <array>
            <value>324</value>
            <value>324534</value>
            <value>25654</value>
        </array>
    </property>
	<property name="mySet">
		<set>
			<value>23</value>
			<value>234</value>
			<value>235</value>
			<value>236</value>
		</set>
	</property>
    <property name="myMap">
        <map>
            <entry key="3424" value="543534">
            </entry>
            <entry key="3453">
            	<value>3453</value>
            </entry>
        </map>
    </property>
    <property name="myProps">
        <props>
            <prop key="32243">fsdf</prop>
            <prop key="45">fsd</prop>
            <prop key="32543243">fsd</prop>
        </props>
    </property>
</bean>

版权声明:本文为Climb-Xu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/Climb-Xu/p/12650397.html