王二hhh 2023-04-22 15:11 采纳率: 100%
浏览 22
已结题

在我对bean实例化时,我只创建了一个bean对象,但spring仍旧创建了其他bean对象

在我对bean实例化时,我只创建了一个bean对象,但spring仍旧创建了其他bean对象,这是为什么
以下是一个我之前创建的一个接口实现类,自己写的无参构造方法

public class BookDaoImpl implements BookDao {

    public BookDaoImpl() {
        System.out.println("book dao constructor is running ...");
    }

    public void save() {
        System.out.println("book dao save...");
    }
}

以下是一个利用静态工厂实例化bean

public class OrderDaoFactory {
    public static OrderDao getOrderDao(){
        return new OrderDaoImpl();
    }
}

applicationContext.xml配置文件

<bean id="bookDao" name="bookDao2" scope="prototype" class="com.Dao.impl.BookDaoImpl"/>
<bean id="orderDao" class="com.factory.OrderDaoFactory" factory-method="getOrderDao"/>

测试类

public class TestInstanceOrder {
    public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

        OrderDao orderDao = (OrderDao) ctx.getBean("orderDao");

        orderDao.save();
    }
}

运行结果

img

我认为没有去调用对应bean就不会创建对应的bean对象,但spring调用了bookDao的构造方法说明多创造了一个bean对象,是否是applicationContext.xml的所有bean不论是否被调用都会创建其对应的对象

  • 写回答

1条回答 默认 最新

  • Huazie 全栈领域优质创作者 2023-04-22 15:17
    关注

    当然不是了,你这样的配置都是被spring 先加载进来的。
    如果你要 Bean 等到 调用时才加载并实例化,你的bean 配置需要设置懒加载

    <bean id="" class="l" lazy-init="true"></bean>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月30日
  • 已采纳回答 4月22日
  • 创建了问题 4月22日

悬赏问题

  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化