spring bean的Setter注入(手动、自动)和构造器注入


<!--setter注入: 不关注类是否存在这个属性,只关注是否存在这个setter方法,setter方法名称为set拼上property的name首字母大写,并将后面的值赋给setter方法中的形参-->
    <!--    bean下面property的ID首字母大写,前面拼上set,形成setter方法,在该bean中必须存在。-->
    <!--    value是后面形参变量的值-->

<!--Setter手动赋值,ref引用注入-->
  <bean id="student1" class="com.yq.shoudong.Student">
        <property name="name" value="yq"/>
        <property name="age" value="10"/>
    </bean>

    <bean id="school1" class="com.yq.shoudong.School">
        <property name="name" value="yq"/>
        <property name="address" value="南京"/>
        <!-- 引用类型赋值      ref与赋值bean的id一致 -->
         <property name="student"  ref="student1"/>
    </bean>
    <!--Setter自动注入 byName、byType、constructor-->
    <!--byName自动注入-->
    <!--引用类型的自动注入,spring框架根据某些规则可以给引用类型赋值 -->
    <!-- 使用规则常用的是byName byType
    1、byName (按名称注入):Java类中引用类型的属性名和spring容器中的(配置文件)<bean>的ID名称一样,
    且数据类型一致,spring能赋值引用类型
    语法规则:
    <bean id=xxx  class=xxx autowired=byName/>
    -->
    <bean id="student" class="com.yq.autowired.Student">
        <property name="name" value="yq"/>
        <property name="age" value="10"/>
    </bean>

    <bean id="school" class="com.yq.autowired.School" autowire="byName">
        <property name="name" value="yq"/>
        <property name="address" value="南京"/>
    </bean>

    <!--byType自动注入-->

<!--在使用类型注入,只能有一个类型注入-->
    <!--1、直接按类型注入-->
<!--    <bean id="studentByType1" class="com.yq.autowiredByType.Student">-->
<!--        <property name="name" value="yx"/>-->
<!--        <property name="age" value="10"/>-->
<!--    </bean>-->

    <!--2、按子类型注入-->
<!--        <bean id="Monitor" class="com.yq.autowiredByType.Monitor">-->
<!--            <property name="name" value="子类型注入"/>-->
<!--            <property name="age" value="10"/>-->
<!--        </bean>-->

    <!--3、按实现类注入-->
    <bean id="aClass" class="com.yq.autowiredByType.ClassImp">
        <property name="id" value="实现类注入"/>
    </bean>

    <bean id="schoolByType1" class="com.yq.autowiredByType.School" autowire="byType">
        <property name="name" value="nanda"/>
        <property name="address" value="南京"/>
    </bean>


<!--constructor 自动注入-->
<!--School构造函数包含 ClassImp类型参数-->

    <bean id="aClass" class="com.yq.autowiredByType.ClassImp">
        <property name="id" value="实现类注入"/>
    </bean>

    <bean id="school" class="com.yq.autowiredByType.School" autowire="constructor ">
        <property name="name" value="nanda"/>
        <property name="address" value="南京"/>
    </bean>

//构造器注入
 <!--构造器注入与setter注入有差别,构造器注入时,name必须和构造器中的形参名称保持一致-->
    <!--构造器注入必须使用constructor标签,并且可以使用三种注入方式,name、index(属性在构造器中的顺序)、直接写value,一切标准按照构造器方法中的参数列表为基础-->
    <!--index是指形参的位置-->
    <bean id="school1" class="com.company.pa02.School">
        <constructor-arg name="name" value="东南大学"/>
        <constructor-arg name="address" value="南京"/>
        <constructor-arg name="student" ref="student"/>
    </bean>



//注入是必须有构造器访问和编辑方法即getter和setter
当引用其他对象,进行构造器注入时,注意class类型是接口是实现类或者继承父类的子类,注意此处构造的是无参构造器。
当创建自身构造,注意使用name、value,进行形参赋值

 <bean id="UserService" class="com.nodePower.service.impl.UserServiceImp">
        <constructor-arg ref="userDao"/>
    </bean>
    <bean id="userDao" class="com.nodePower.dao.impl.UserDaoImp"/>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值