设为首页 加入收藏

TOP

day04-Spring管理Bean-IOC-02(五)
2023-07-25 21:42:13 】 浏览:74
Tags:day04-Spring 管理 Bean-IOC-02
;monster10", Monster.class); Monster monster11 = ioc.getBean("monster11", Monster.class); System.out.println("monster10=" + monster10); System.out.println("monster11=" + monster11); } image-20230117191040435

注意:

  1. 如果bean指定了abstract="true" 表示该bean对象是只用于被继承的

  2. 那么这个bean就不能被获取/实例化

image-20230117191747693

此时如果输出monster10,就会显示错误:

image-20230117191930295

2.13bean创建顺序

在spring的ioc容器,默认是按照配置的顺序创建bean对象。比如:

<bean id="student01" class="com.hspedu.bean.Student" />
<bean id="department01" class="com.hspedu.bean.Department" />

会先创建 student01 这个 bean 对象,然后创建 department01 这个 bean 对象

但如果这样配置:

<bean id="student01" class="com.hspedu.bean.Student" depends-on="department01"/>
<bean id="department01" class="com.hspedu.bean.Department" />

会先创建 department01 对象,再创建 student01 对象.

例子

Student:

package com.li.bean;

/**
 * @author 李
 * @version 1.0
 */
public class Student {
    public Student() {
        System.out.println("Student 构造器被执行...");
    }
}

Department:

package com.li.bean;

/**
 * @author 李
 * @version 1.0
 */
public class Department {
    public Department() {
        System.out.println("Department 构造器被执行...");
    }
}

beans.xml:

<!--测试 bean对象的创建顺序-->
<bean id="student01" class="com.li.bean.Student"/>
<bean id="department01" class="com.li.bean.Department"/>

测试类:

//测试 Bean的创建顺序
@Test
public void testBeanByCreate() {
    ApplicationContext ioc = new ClassPathXmlApplicationContext("beans.xml");
    System.out.println("ok~");
}
image-20230117193239357

如果我们在配置student01对象时,加上depends-on="department01",spring就会认为你的student01对象时依赖于department01对象,会先创建department01对象。

<bean id="student01" class="com.hspedu.bean.Student" depends-on="department01"/>
<bean id="department01" class="com.hspedu.bean.Department" />
image-20230117193617135

总结:在默认情况下,bean创建的顺序是按照默认配置顺序来的。但是如果我们在对象配置中指定了依赖对象,就会先创建被依赖的对象。

一个问题?

1.先看下面的配置,请问两个bean创建的顺序是什么?并分析执行流程

<!--配置MemberDAOImpl对象-->
<bean class="com.li.dao.MemberDAOImpl" id="memberDAOImpl"/>

<bean class="com.li.service.MemberServiceImpl" id="memberServiceImpl">
    <property name="memberDAO" ref="memberDAOImpl"/>
</bean>

(1)先创建 id=memberDaoImpl 的对象

(2)再创建 id=memberServiceImpl 的对象

(3)调用 memberServiceImpl.setMemberDAO() 方法,完成引用

image-20230117202221363

2.先看下面的配置,请问两个bean创建的顺序是什么?并分析执行流程

<bean class="com.li.service.MemberServiceImpl" id="memberServiceImpl">
    <property name="memberDAO" ref="memberDAOImpl"/>
</bean>

<!--配置MemberDAOImpl对象-->
<bean class="com.li.dao.MemberDAOImpl" id="memberDAOImpl"/>

(1)先创建 id=memberServiceImpl 的对象

(2)再创建 id=memberDaoImpl 的对象

(3)调用 memberServiceImpl.setMemberDAO() 方法,完成引用

image-20230117202404030

总结:ioc容器会把整个bean的创建当做一个整体来对待,会把配置文件中所有对象bean先创建好,然后才完成对象间的引用。

见2.4

2.14bean对象的单例和多例

在spring的ioc容器中,默认是按照单例创建的,即配置一个bean对象后,ioc容器只会创建一个bean实例。

如果希望ioc容器配置的某个bean对象,是以多个实例形式创建的,可以通过配置scope="prototype"来指定。

例子1-单例对

首页 上一页 2 3 4 5 下一页 尾页 5/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇使用 Elasticsearch 搭建自己的搜.. 下一篇gRPC之初体验

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目