Spring的注入方式

spring的注入方式

前言:
spring的注入方式常见:

1、set注入
2、构造注入
3、自动注入

下面为大家介绍各种注入方式的使用方式。

【注意:】使用set注入和自动注入时,属性都需要set方法。

  1. set注入【常用方式】
    设置成员变量,提供set方法。

    在EmpServiceImpl中需要注入EmpDao,使用如下方法进行注入:

    private EmpDao empDao;
    public void setEmpDao(EmpDao empDao) {
            this.empDao = empDao;
        }

    xml的配置文件

    <bean id="empDao" class="setdi.EmpDaoImpl"></bean>
    
    <bean id="empService" class="setdi.EmpServiceImpl">
        <!-- property:依赖注入,为哪一个变量注入
            name:"为哪个成员变量赋值" 成员变量的名字
            ref:注入bean的id 
        -->
        <property name="empDao" ref="empDao"/>
    </bean>

    注入之后就可以直接使用该对象,spring会为我们自动创建该对象。

    spring不仅支持这种对象类型的注入,还支持其他类型的方式注入。

    • 基本数据类型
        <!-- 基本数据类型 -->
        <property name="name" value="张三"/>
        <property name="price" value="20.55"/>
        <!-- 日期类型 -->
        <property name="bir" value="2016/7/22 15:13:22"/>
    • 数组类型
        <!-- 数组 -->
        <property name="array">
            <array>
                <value>小红</value>
                <value>小王</value>
                <value>小张</value>
                <value>小李</value>
            </array>
        </property>
    • List集合泛型为基本数据类型
        <!-- list<String>集合 -->
        <property name="list">
            <list>
                <value>你好</value>
                <value>我好</value>
                <value>他好</value>
            </list>
        </property>
    • List集合泛型为对象数据类型
        <!-- List<EmpDao>集合 -->
        <property name="empDaolist">
            <list>
                <ref bean="empDao"/>
                <ref bean="empDao"/>
                <ref bean="empDao"/>
            </list>
        </property>
    • Map类型
        <!-- Map类型 -->
        <property name="maps">
            <map>
                <entry key="123" value="小王"/>
                <entry key="456" value="校长"/>
                <entry key="789" value="教师"/>
            </map>
        </property>
    • Properties类型
        <!-- properties类型  底层也是Map类型-->
        <property name="properties">
            <props>
                <prop key="driver">oracle.jdbc.OracleDriver</prop>
                <prop key="url">jdbc:oracle:thin:@localhost:1521:xe</prop>
                <prop key="username">hr</prop>
                <prop key="password">hr</prop>
            </props>
        </property>
  2. 构造注入
    创建成员变量,提供构造方法

    例如:

        private StudentDAO studentDAO;
        private String name;
        private Integer age;
        private Date bir;
        private List<String> lists;
        //构造方法
        public StudentServiceImpl(StudentDAO studentDAO, String name, Integer age,Date bir, List<String> lists) {
            super();
            this.studentDAO = studentDAO;
            this.name = name;
            this.age = age;
            this.bir = bir;
            this.lists = lists;
        }

    xml配置文件中:

    在构造注入方式中使用的标签为:constructor-arg
    
    <!-- 管理DAO -->
    <bean id="studentDAO" class="cdi.StudentDAOImpl"/>
    <!-- 管理Service -->
    <bean id="studentService" class="cdi.StudentServiceImpl">
        <!--  constructor-arg标签:用来指定使用构造方法进行注入-->
        <constructor-arg name="studentDAO" ref="studentDAO" />
        <constructor-arg name="name" value="张三"/>
        <constructor-arg name="age" value="14"/>
        <constructor-arg name="bir" value="2015/10/10 12:45:34"/>
        <constructor-arg name="lists" >
            <list>
                <value>小三</value>
                <value>小四</value>
                <value>小五</value>
                <value>小六</value>
            </list>
        </constructor-arg>
    </bean>
  3. 自动注入

    自动注入分为两种方式:
     1、autowire=“byName”
             根据注入的属性名与配置文件中bean的id匹配,一致则注入,不一致则报错。
     2、Autowire=“byType”
             根据注入的属性类型,与配置文件中的类型匹配,类型一致则注入(在有多个实现类时,会产生歧义)
    

    配置文件:

    <!-- 管理DAO -->
    <bean id="userDao" class="adi.UserDaoImpl"></bean>
    <!-- 管理Service -->
    <!-- 通过 autowire=“byName”方式注入-->
    <bean id="userService"  class="adi.UserServiceImpl" autowire="byName"/>
    <!-- 通过 autowire=“byType”方式注入-->
    <bean id="userService"  class="adi.UserServiceImpl" autowire="byType"/>

    【注意:】byName和byType不能同时存在一个bean中。

还有一些其他注入方式,移步大神的博客,在此附上大神的博客地址:
spring中你不知道的注入方式


附上源码,仅供参考
源码地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值