zoukankan      html  css  js  c++  java
  • spring的ioc依赖注入的三种方法(xml方式)

    常见的依赖注入方法有三种:构造函数注入set方法注入使用P名称空间注入数据、另外说明下注入集合属性

    先来说下最常用的那个注入方法吧。

    一、set方法注入

    顾名思义,就是在类中提供需要注入成员的 set 方法。具体代码如下:

    public class AccountServiceImpl{
    
        private String name;
        private Date birthday;
    
        public void setName(String name) {
            this.name = name;
        }
    
        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }
    } 
    

    xml中配置

    涉及的标签:
       property 
    属性:    
    	name:找的是类中 set 方法后面的部分    
    	ref:给属性赋值是其他 bean 类型的    
    	value:给属性赋值是基本数据类型和 string 类型的  
    	实际开发中,此种方式用的较多。 
    
    <bean id="accountService" class="com.AccountServiceImpl"> 
    	<property name="name" value="test"></property> 
      	<property name="birthday" ref="now"></property> 
    </bean>
     <bean id="now" class="java.util.Date"></bean> 
    

    二、集合属性注入

    顾名思义,就是给类中的集合成员传值,它用的也是set方法注入的方式,只不过变量的数据类型都是集合。 我们这里介绍注入数组,List,Set,Map,Properties。具体代码如下:

    public class AccountServiceImpl{
    
        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;
        }
        
    } 
    

    xml的配置

    注入集合数据 List 结构的:   array,list,set
                 Map 结构的 map,entry,props,prop
                 在注入集合数据时,只要结构相同,标签可以互换   
                 
    <bean id="accountService" class="com.AccountServiceImpl">
    
    <!--给数组注入数据-->
    <property name="myStrs">
        <set>
            <value>AAA</value>
            <value>BBB</value>
        </set>
    </property>
    <!--注入 list 集合数据-->
    <property name="myList">
        <array>
            <value>AAA</value>
            <value>BBB</value>
        </array>
    </property>
    <!--注入 set 集合数据-->
    <property name="mySet">
        <list>
            <value>AAA</value>
            <value>BBB</value>
        </list>
    </property>
    <!--注入 Map 数据-->
    <property name="myMap">
        <props>
            <prop key="testA">aaa</prop>
            <prop key="testB">bbb</prop>
        </props>
    </property>
    <!--注入 properties 数据-->
    <property name="myProps">
        <map>
            <entry key="testA" value="aaa"></entry>
            <entry key="testB">
                <value>bbb</value>
            </entry>
        </map>
    </property>
    </bean> 
    

    三、构造函数注入

    顾名思义,就是使用类中的构造函数,给成员变量赋值。注意,赋值的操作不是我们自己做的,而是通过配置的方式,让 spring 框架来为我们注入。具体代码如下:

    public class AccountServiceImpl{
    
        private String name;
        private Date birthday;
    
        public void setName(String name) {
            this.name = name;
        }
    
        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }
    } 
    

    xml的配置

     使用构造函数的方式,给 service 中的属性传值
      要求:
         类中需要提供一个对应参数列表的构造函数。  
         涉及的标签:   constructor-arg    
      属性:
         index:指定参数在构造函数参数列表的索引位置
         type:指定参数在构造函数中的数据类型 
         name:指定参数在构造函数中的名称 
                   
        =======上面三个都是找给谁赋值,下面两个指的是赋什么值的==============  
            
        value:它能赋的值是基本数据类型和 String 类型     
        ref:它能赋的值是其他 bean 类型,也就是说,必须得是在配置文件中配置过的 bean  
        
    <bean id="accountService"  class="com.itheima.service.impl.AccountServiceImpl">                                                                                     
    	<constructor-arg name="name" value=" 张三 "></constructor-arg>
    	<constructor-arg name="birthday" ref="now"></constructor-arg>
    </bean>
    
    <bean id="now" class="java.util.Date"></bean> 
    

    四、使用P名称空间注入数据

    此种方式是通过在 xml中导入 p名称空间,使用 p:propertyName 来注入数据,它的本质仍然是调用类中的 set 方法实现注入功能。

    public class AccountServiceImpl{
    
        private String name;
        private Date birthday;
    
        public void setName(String name) {
            this.name = name;
        }
    
        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }
    } 
    

    xml配置

    <bean id="accountService"  class="com.itheima.service.impl.AccountServiceImpl4"
        p:name="test" p:age="21" p:birthday-ref="now"/> 
        
    <bean id="now" class="java.util.Date"></bean> 
    

    set注入数据的方法比较常用
    如果对ioc和依赖注入不明白的,强推一篇知乎好文,读个故事就懂了如何用最简单的方式解释依赖注入?依赖注入是如何实现解耦的?

  • 相关阅读:
    醉上清新年中工作总结汇报模板免费下载_PPTX图片设计素材_包图网888pic.com
    清爽通用工作总结汇报ppt模板免费下载_PPTX图片设计素材_包图网888pic.com
    工作年终总结通用计划规划商务述职年会模板
    清新时尚岗位竞聘个人介绍PPT模板(8598)_竞聘简历PPT_素材在线
    横圆版简约清新通用工作述职报告PPT模板(8456)_其他商务PPT_素材在线
    2016年终总结工作汇报PPT模板
    绿色简约工作汇报计划总结PPT- 模板下载页_变色龙
    工作报告模板下载_免费工作报告图片设计素材_第2页_包图网
    Netflix新放出来的开源工具Chaos Monkey
    微喜帖,微信喜帖,电子喜帖,电子请柬
  • 原文地址:https://www.cnblogs.com/Alitac/p/12578028.html
Copyright © 2011-2022 走看看