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用于给对象的实行赋值 -->
![](/i/l/?n=22&i=blog/2296460/202210/2296460-20221017143530314-1674502906.png)
通过构造器来配置 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>
通过 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