首页 > 其他分享 >spring配置和管理bean

spring配置和管理bean

时间:2022-10-17 15:44:28浏览次数:47  
标签:容器 对象 spring 配置 bean id 属性

Spring 管理 Bean-IOC

在 beans.xml 中,我们注入 2 个 Monster 对象, 但是不指定 id
<bean class="com.hspedu.spring.beans.Monster" >
<property name="monsterId" value="1010"/>
<property name="name" value="张三~"/>
<property name="skill" value="呼呼~"/>
</bean>
<bean class="com.hspedu.spring.beans.Monster">
<property name="monsterId" value="666"/>
<property name="name" value="里斯~~!!"/>
<property name="skill" value="giao~~"/>
</bean>
问题 1:运行会不会报错 答:不会报错,会正常运行 问题 2:如果不报错, 你能否找到分配的 id, 并获得到该对象. 答:系统会默认分配 id ,分配 id 的规则是 全类名#0 , 全类名#1 这样的规则来分配 id, 我们可以通过 debug 方式来查看   Bean 管理包括两方面——创建 bean 对象 和 给 bean 注入属性 Bean 配置方式包括两方面 —— 基于 xml 文件配置方式 和 基于注解方式

基于 XML 配置 bean

通过类型来获取 bean

细节说明: 1. 按类型来获取 bean, 要求 ioc 容器中的同一个类的 bean 只能有一个, 否则会抛出异常NoUniqueBeanDefinitionException 2. 这种方式的应用场景:比如 XxxAction/Servlet/Controller, 或 XxxService 在一个线程中只需要一个对象实例(单例)的情况 3. 在容器配置文件(比如 beans.xml)中给属性赋值, 底层是通过setter 方法完成的, 这也是为什么我们需要提供 setter 方法
<!--解读:
    1.beans.xml中可以配置多个bean(一个bean标签表示一个Java对象),这里配置一个hero对象的JavaBean
    2.class属性写类的全路径 => 用于spring底层反射创建对象
    3.<bean class="com.recorder.spring.bean.Hero" id="hero01">
    id表示该bean对象在spring容器中的id,可以通过id获取容器中的对象
    4.<property name="id" value="1"></property> value用于给对象的实行赋值
    -->

通过构造器来配置 bean

因为类不可能有完全相同类型和顺序的构造器,所以可以通过type来指定

<!-- 在 spring 的 ioc 容器, 可以通过构造器来配置 bean 对象 -->
    <bean class="com.recorder.spring.bean.Hero" id="hero03">
        <!--1.下标方式-->
        <!--这里的index表示构造器的第几个参数,从0开始计算
        除了index还可以通过name和type来配置-->
        <constructor-arg value="3" index="0"></constructor-arg>
        <constructor-arg value="刘备" index="1"></constructor-arg>
        <constructor-arg value="仁德" index="2"></constructor-arg>

    </bean>
    <bean class="com.recorder.spring.bean.Hero" id="hero04">
        <!--2.数据类型方式-->
        <constructor-arg value="诸葛亮" type="java.lang.String"/>

    </bean>
    <bean class="com.recorder.spring.bean.Hero" id="hero004">
        <!--2.name类型方式-->
        <constructor-arg value="3" name="id"/>
        <constructor-arg value="神诸葛亮" name="name"/>
        <constructor-arg value="七星" name="skill"/>

    </bean>

 

使用细节 1. 通过 index 属性来区分是第几个参数 2. 通过 type 属性来区分是什么类型(按照顺序)  

通过 p 名称空间配置 bean

<!--通过p命名空间来创建-->
    <!--将光标放在p , 输入alt+enter , 就会自动的添加xmlnamesapce-->
    <bean class="com.recorder.spring.bean.Hero" id="hero05"
          p:id="5"
          p:name="吕布"
          p:skill="无双"
    />

 

通过 ref 来实现 bean 对象的相互引用(体现依赖注入——一个属性依赖于另一个属性)

<!--通过 ref 来实现 bean 对象的相互引用-->
    <!-- bean 对象的相互引用
    1. 其它含义和前面一样
    2. ref 表示 memberDAO 这个属性将引用/指向 id = memberDAOImpl 对象 
    3.注意在spring容器中,是作为一个整体来执行的,引用bean对象时对配置的顺序没有要求(所以这里将vmemberDAO放到MemberServiceImpl后面配置也没有问题,但建议按照顺序写来保证阅读方便)-->
    
    <bean class="com.recorder.spring.dao.MemberDAOImpl" id="memberDAO"/>
    <bean class="com.recorder.spring.service.MemberServiceImpl" id="memberService">
        <property name="memberDAO" ref="memberDAO"/>
    </bean>

 

通过观察容器结构也可以确定

       

引用/注入内部 bean 对象

 <!--也可以通过内部bean的方式-->
    <bean class="com.recorder.spring.service.MemberServiceImpl" id="memberService2">
        <property name="memberDAO">
            <bean class="com.recorder.spring.dao.MemberDAOImpl" id="memberDAO"/>
        </property>
    </bean>

 

 

 

标签:容器,对象,spring,配置,bean,id,属性
From: https://www.cnblogs.com/recorderM/p/16799412.html

相关文章