ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SpringIOC的自动注入

2021-01-19 17:03:13  阅读:148  来源: 互联网

标签:SpringIOC 对象 Spring 依赖 自动 规则 ref 注入


问题:

SpringIOC的DI依赖注入后,我们可以根据对象之间的依赖关系的 责任链,让Spring容器对象帮我们创建有一个组装好的对象,比如A中有B,B 中有C,C中有D.将A,B ,C,D都创建为Bean对象,然后使用ref属性告诉Spring 对象之间的依赖关系的组装规则,假如依赖责任链特别长,使用ref注入就会很 麻烦.怎么办?

解决:

不要声明ref属性来指明依赖关系的注入,只需要告诉Spring容器对象依赖关 系的注入规则,Spring容器对象自动根据规则完成依赖关系的注入.

  实现:

①根据bean的ID和属性名一致的规则

②根据bean的类型和属性的类型一致的规则

③根据构造器形参的类型和bean的类型一致的规则

④不能使用自动注入,只能手动声明

⑤使用默认规则

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"
       default-autowire="byName"><!--设置自动注入-->
    <!--
       自动注入:
       在标签上使用autowire属性设置自动注入规则.该属性声明在要注入资源的bean标签上,比如:学生的bean
         autowire属性的值:
           byName:按照属性名和某个bean的id相同的规则自动注入
           byType:按照属性的类型和某个bean的类型相同的规则自动注入.
               注意:同类型的bean只能有一个,否则报错.
           constructor:
               必须声明对应的构造器,根据构造器形参的类型和某个bean的类型相同的规则自动注入.
           no:不使用自动注入,必须使用ref手动注入.
           default:使用默认注入规则.默认值.
           注意:
                可以在beans顶层元标记中使用属性default-autowire声明全局自动注入规则.
   -->
    <bean id="stu" class="com.bjsxt.pojo.Student" autowire="byName">
        <!--用构造器的方法,此处要创建一个只有Teacher一个参数的构造器-->
        <!--<constructor-arg index="0" type="com.Teacher"  ref="tea"></constructor-arg>-->
        <property name="sid" value="1"></property>
        <property name="sname" value="张三"></property>
    </bean>
    <bean id="teacher" class="com.bjsxt.pojo.Teacher">
        <property name="tname" value="liu"></property>
        <property name="tid" value="1"></property>
    </bean>
</beans>

  

标签:SpringIOC,对象,Spring,依赖,自动,规则,ref,注入
来源: https://www.cnblogs.com/vincentmax/p/14298816.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有