IOC创建对象的方式

看看spring到底是怎么创建对象的!

思考一下:为什么spring管理的bean,我们可以直接get到,它肯定得new出来之后才能get到吧。得想一下,spring是在什么时候new的!

答案:在配置文件被加载的时候,我们的spring容器中管理的bean就已经被初始化了

演示:

创建一个实体类,默认会有一个无参构造,我们把它写出来,在里面再加上句话

我们知道在Java中,java对象要能够使用,那么他就必须得new出来,那么现在创建对象都交由spring来创建对象,可是我们利用spring的上下文对象去get对象的时候,从头到尾都没有看到new这个对象,那么要分析一下spring是在何时帮我们new了对象

那么先演示下spring确实是帮助创建了对象:

首先我们将上述的类,注册到bean里面,

注册完了之后,再回到类中,是不是发现旁边有叶子啊,说明该类已经被spring托管了,注意我们的构造器旁边也有叶子,这是在HelloSpring中没看到的,因为当时我们没有写出默认的无参构造方法,所以没看到

现在来测试,spring确实是帮助创建了类的对象:

可以看到我们创建了,spring容器,也就是上下文对象,现在来get这个对象,并利用该对象调用它的方法,

 

 

 

说明:在getBean的时候,这个类的对象就已经被创建了,使用的就是无参构造方法创建对象的

所以IOC创建对象的方式就是:默认无参构造方法创建对象 

验证:把无参构造器干掉,那么就是写一个有参构造器,就可以把无参构造器干掉了,再跑一下刚才的测试,发现报错了,说默认初始化失败,所以就确定了springIOC创建对象的方式就是默认无参构造方法创建对象 

 

 

IOC也可以用有参构造器来创建对象:使用有参构造器创建对象又可以分为几个小类

1.用下标的方式来通过有参构造器创建对象:

注意:这个下标的方式是从0开始的

 可以看到上述下标为0的参数,是不是就只有一个啊,就是有参构造中的name参数

2.用参数的类型的方式来通过有参构造器创建对象:

 但是如果有参构造器的两个参数都是string怎么办?是不是就不行了,所以这种创建对象的方式不建议去使用

 3.直接通过参数的名称的方式来通过有参构造器创建对象:

 以上就是spring容器的IOC理念,创建对象的所有方式,一种默认的无参构造器创建,3种有参构造器的创建方式

再来说一个细节:就是我们再在spring容器里注册一个bean,但是在获取时,我们只获取其中一个bean,但是发现,我们在获取bean的时候,只要注册在spring容器里的bean,都会被spring创建对象,也就是当我们的配置文件被加载的时候,spring容器中管理的对象就已经被初始化即实例化了

创建一个新的类

 

将这个新的类也注册到spring容器中(注意:我们要养成一个习惯就是创建一个类,就将它注册到spring容器中来管理) 

 

现在还是获取这个user对象,注意现在没有获取userT的对象吧:

结果:可以看到,就算不获取userT的对象,它仍然被spring创建了 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值