其他分享
首页 > 其他分享> > Spring03:注入(Injection)

Spring03:注入(Injection)

作者:互联网

目录

1.注入

1.什么是注入:

通过Spring工厂及配置文件,为所创建对象的成员变量赋值。

2.为什么需要注入

以前我们为对象的成员变量赋值,直接通过编码的方式,这样是存在耦合的
在这里插入图片描述
如果我们以后想为name属性,设置别的值。那么又要改代码,存在耦合性,所以我们将对象属性的设置放到配置文件中(属性注入)。

3.如何进行注入(开发步骤)

4.注入的好处:

解耦合:日后属性需要改动的话,就不需要在代码层面修改了,到配置文件中修改。

2.注入原理分析(简易版)

1.类似前面的工厂原理分析:会根据配置文件,进行反射创建对象(最终调用构造方法)。注入会根据配置文件内容的property标签,调用set方法对属性赋值。

在这里插入图片描述

3.Set注入详解

1.针对不同类型的成员变量,我们在注入时,在<property>标签中,需要嵌套不同的子标签。

2.可能遇到的各种Set注入的类型主要分为两大类

3.1.Set注入JDK内置类型

在这里插入图片描述

1.8种基本类型+String

基本类型:字符类型char,布尔类型boolean以及数值类型byte、short、int、long、float、double。

property标签直接嵌套value标签

<bean id="person" name="p1,p2" class="com.baizhiedu.basic.model.Person">
	<property name="id">
	    <value>10</value>
	</property>
</bean>	

2.数组类型:

property标签嵌套list标签,list标签再嵌套value标签

//Person类数组属性
 private String[] email;

 public String[] getEmail() {
     return email;
 }

 public void setEmail(String[] email) {
     this.email = email;
 }

//applicationContext.xml
<bean id="person" name="p1,p2" class="com.baizhiedu.basic.model.Person"> 
 <property name="email">
     <list>
         <value>sdaS@1.com</value>
         <value>sdaS@2.com</value>
         <value>sdaS@3.com</value>
     </list>
 </property>
</bean>

3.Set集合属性:

//Person类Set属性
 private Set<String> tels;

 public Set<String> getTels() {
     return tels;
 }

 public void setTels(Set<String> tels) {
     this.tels = tels;
 }

//applicationContext.xml
<bean id="person" name="p1,p2" class="com.baizhiedu.basic.model.Person"> 
   <property name="tels">
       <set>
           <value>12312311313</value>
           <value>12666611313</value>
           <value>12789011313</value>
       </set>
   </property>
</bean>
//Person类Set属性
 private Set obj;

 get/set

//applicationContext.xml
<bean id="person" name="p1,p2" class="com.baizhiedu.basic.model.Person"> 
   <property name="tels">
       <set>
           <value>12312311313</value>
           <ref bean="idz值"/>
           <list>
           	<value>12313</value>
           </list>
       </set>
   </property>
</bean>

4.List集合属性

<bean id="person" name="p1,p2" class="com.baizhiedu.basic.model.Person"> 
   <property name="address">
		<list>
		   <value>11111</value>
		   <value>2222</value>
		   <value>2222</value>
		</list>
   </property>
</bean>

5.Map集合属性

<property name="qqs">
    <map>
        <entry>
            <key><value>txl</value></key>
            <value>1309984539</value>
        </entry>
        <entry>
            <key><value>others</value></key>
            <value>9999999</value>
        </entry>
    </map>
</property>

6.Properties集合属性

后面进行Spring与MyBatis的整合,需要大量的使用这个类型。

  private Properties properties;

  public Properties getProperties() {
      return properties;
  }

  public void setProperties(Properties properties) {
      this.properties = properties;
  }
  
  <property name="properties">
      <props>
          <prop key="sss">wwww</prop>
          <prop key="eee">tttt</prop>
      </props>
  </property>

7.复杂的JDK类型(Date)

需要自定义类型转换器来处理。

3.2.Set注入用户自定义类型

在这里插入图片描述
1.第一种方式:

在这里插入图片描述

2.第二种方式:

 <bean id="userDao" class="com.baizhiedu.basic.UserDAOImpl"></bean>
 <bean id="userService" class="com.baizhiedu.basic.UserServiceImpl">
     <property name="userDao">
         <ref bean="userDao"></ref>
     </property>
 </bean>

在这里插入图片描述

3.3.Set注入的简化写法

1.基于属性的简化:

  1. value属性,代替value标签:value属性只能用在JDK的八种基本类型+String类型。
        <property name="id">
            <value>10</value>
        </property>
        //value属性,代替value标签
        <property name="id" value="10"></property>

		
		<property name="userDAO">
		   <ref bean="userDAO"/>
		</property>
		//ref属性代替ref标签
		<property name="userDAO" ref="userDAO"/>

2.基于命名空间p的简化:

在这里插入图片描述
在这里插入图片描述
命名空间p就相当于property标签的作用:
在这里插入图片描述
配置文件写法:

<bean id="person1" class="com.baizhiedu.basic.model.Person" p:name="tttxxxll" p:id="66666"></bean>

//等价于
<bean id="person1" class="com.baizhiedu.basic.model.Person">
   <property name="id" value="66666"></property>
   <property name="name">
       <value>tttxxxll</value>
   </property>
</bean>


<bean id="userDao" class="com.baizhiedu.basic.UserDAOImpl"></bean>
<bean id="userService1" class="com.baizhiedu.basic.UserServiceImpl" p:userDao-ref="userDao"/>
//等价于原写法
<bean id="userService" class="com.baizhiedu.basic.UserServiceImpl">
    <property name="userDao">
        <!--<bean class="com.baizhiedu.basic.UserDAOImpl"></bean>-->
        <ref bean="userDao"></ref>
    </property>
</bean>

标签:Set,String,标签,Spring03,value,Injection,注入,属性
来源: https://blog.csdn.net/tttxxl/article/details/115326403