SSM学习——bean实例化(2)

16 篇文章 1 订阅

如何创建bean

一 构造方法(常用)

bean,其实是容器的对象

我们先在bookdao里面constructor方法一下,看看能不能打印出来,如果打印出来了,那说明调用了这个方法
在这里插入图片描述

然后再把public改成private,看看能不能打印出来
在这里插入图片描述

打印出来的,而我们在构造函数里面加入了参数之后,报错了
在这里插入图片描述

说明:spring在构造bean的时候,调用的是无参构造方法

报错原因

spring的报错,从下往上看,最下面的是核心问题
在这里插入图片描述

无参构造方法如果不存在,将抛出异常BeanCreationException

二 静态工厂(了解即可)

使用工厂进行new对象,说简单点,就是,造对象不要自己new,使用工厂方式来new,可以做到一定的解耦,这种方法是为了兼容一些历史性问题

我们使用getDao方法来在工厂里返回new的对象
在这里插入图片描述

而对于spring怎么管理这个参入了静态工厂的bean,不仅需要传入工厂的地址,还需要告诉spring,工厂里的方法是哪个,因为传入的class是哪个,那么spring就把哪个bean实例化,在工厂里面我们需要实例化的并不是OrderDaoFactory这个类,而是里面的方法getOrderDao

<!--    使用静态工厂实例化bean-->
    <bean id="orderDao" class="cn.calendo.factory.OrderDaoFactory" factory-method="getOrderDao"/>

在这里插入图片描述

三 实例工厂与初始化bean(了解)

在这里插入图片描述

这时我们需要在xml文件中进行如下配置
在这里插入图片描述

factory-bean指向上面的userFactory,所以会有以下问题:
在这里插入图片描述

spring就针对这事情做了如下第四种优化:

四 FactoryBean(重要)

在框架整合时,其它框架大量地和spring采用这种方式进行
在这里插入图片描述

然后在xml里面配置
在这里插入图片描述

可以发现运行照样成功
但是这样其实是单例的,如果要创造出非单例的bean,那就必须在FactoryBean中创建非单例的方法isSingleton()
在这里插入图片描述
在这里插入图片描述

true代表单例,false代表非单例
factoryBean接口造出来的并不是factorybean对象,而是我们在里面重写了的getObject对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值