spring依赖注入

(1)依赖关系:在当前类需要其他类的对象,由spring为我们提供,只需要在配置文件中说明依赖关系的维护。

(2)注入数据:

        基本数据类型和string

       其他bean类型(在配置文件中或者注解配置过的bean)

       复杂类型/集合类型

private String[] myStrs;
private List<String> myList;
private Set<String> mySet;
private Map<String,String> myMap;
private Properties myProps;

 public void setMyStrs(String[] myStrs) {
     this.myStrs = myStrs;
 }

 public void setMyList(List<String> myList) {
     this.myList = myList;
 }

 public void setMySet(Set<String> mySet) {
     this.mySet = mySet;
 }

 public void setMyMap(Map<String, String> myMap) {
     this.myMap = myMap;
 }

 public void setMyProps(Properties myProps) {
     this.myProps = myProps;
 }
<bean id="acountService3" class="cn.rzpt.service.impl.AcountServiceImpl3">
    <!--复杂数据类型(集合类型)注入
        用于给List结构集合注入的标签有:list,array,set
        用于给Map结构注入的标签有:map,props
        结构相同,标签可以互换
    -->
    <property name="myStrs">
        <array>
            <value>aaa</value>
            <value>bbb</value>
            <value>ccc</value>
        </array>
    </property>

    <property name="myList">
        <list>
            <value>laaa</value>
            <value>lbbb</value>
            <value>lccc</value>
        </list>
    </property>

    <property name="mySet">
        <set>
            <value>saaa</value>
            <value>sbbb</value>
            <value>sccc</value>
        </set>
    </property>

    <property name="myMap">
        <map>
            <entry key="ka" value="aaa"></entry>
            <entry key="kb">
                <value>bbb</value>
            </entry>
        </map>
    </property>

    <property name="myProps">
        <props>
            <prop key="pka">pkaaa</prop>
            <prop key="pkb">pkbbb</prop>
        </props>
    </property>
</bean>

(3)注入方式:

        使用构造函数:

private String name;
private Integer age;
private Date birthday;

public void AcountServiceImpl(String name,Integer age,Date birthday){
    this.name = name;
    this.age = age;
    this.birthday = birthday;
}
<bean id="accountService" class="cn.rzpt.service.impl.AcountServiceImpl">
    <!--构造方法注入
        type:用于指定要注入的数据的数据类型,该数据类型也是构造方法中某个或某些参数的类型,不能独立实现注入内容
        index:用于指定要注入的数据给构造方法中指定索引位置的参数赋值。从0开始,但是遇到复杂情况,不能识别使用
        name:用于指定给构造方法中指定名称的参数赋值,常用
        value:用于给基本数据类型和String类型赋值
        ref:用于指定其他的bean类型数据赋值,引用的数据
-->
    <constructor-arg name="name" value=""></constructor-arg>
    <constructor-arg name="age" value="18"></constructor-arg>
    <constructor-arg name="birthday" ref="birthday"></constructor-arg>
</bean>
<bean id="birthday" class="java.util.Date">
</bean>

     优势:在获取bean对象时,注入数据是必须的操作,否则对象无法创建成功。

     劣势:改变了bean对象的实例化方式,使我们在创建对象时,如果用不到这个对象或数据,也同样要必须提供。

       使用 setter方法:常用此方法注入数据

private String name;
private Integer age;
private Date birthday;

public void setName(String name) {
    this.name = name;
}

public void setAge(Integer age) {
    this.age = age;
}

public void setBirthday(Date birthday) {
    this.birthday = birthday;
}
<bean id="acountService2" class="cn.rzpt.service.impl.AcountServiceImpl2">
    <!--setter方法注入
        使用的标签:property
    -->
    <property name="name" value="钉钉"></property>
    <property name="age" value="19"></property>
    <property name="birthday" ref="birthday"></property>
</bean>

<bean id="birthday" class="java.util.Date"> </bean>

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

     劣势:如果有某个成员必须有值,则获取对象时有可能set方法没有执行。

 

       使用注解

<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"
        scope=""  init-method="" destroy-method="">
      <property name=""  value="" | ref=""></property>
</bean>

      有四个应用方向:

           用于创建对象的注解:

和在xml配置文件中编写一个<bean>标签实现的作用是一样的

               @Componect:作用:用于把当前类对象存入容器中,属性是value用于指定bean的id。默认值是当前类名,首字母改小写。

           用于注入数据的注解

和在xml配置文件中<bean>标签中的<properity></properity>实现的作用是一样的

           用于改变作用范围的注解

和在xml配置文件中<bean>标签中的<scope></scope>实现的作用是一样的

           和生命周期相关的注解

和在xml配置文件中<bean>标签中的<init-method><destory-method>实现的作用是一样的

(4)经常变化的数据并不适用于注入的方式

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页