关于容器的思想——意义(思想不限制于具体语言)

关于容器的思想——作用、意义

  • 前言:以下内容是我为了理解什么是容器而总结的。野性我是个Java开发的,但是直接学的spring boot,因此对于spring不是多了解,只会增删改查啊。所以下面内容我尽可能用通俗易懂的言语来叙述。
  1. 容器是什么?: 这个容器就是字面意思,装很多东西的容器。需要用的时候拿出来。但是用在平时的Java项目中,就是我们说的什么“依赖注入”、“IOC容器”一类的。其中IOC全称是Inversion of Control,中文就是控制反转的意思。其实依赖注入与控制反转是一个意思。下面我会继续说的。
  2. 那么容器野性我没法说的很清楚,让人看的很迷糊。那我就可以举个例子,这里如果没有做过一个分层次项目的应该不是很懂。
    一个项目:野性我自己对一个项目的理解:从上到下是controller(业务层),service(业务接口层),serviceimpl(业务接口实现层)。分层的原因自然是为了让代码各司其职。controller只需要调用相应的接口,比如增删改查接口。而service层只需要写具体要做什么,也就是抽象方法、抽象函数。最后serviceimpl要做的就是实现service接口层的接口,让每个抽象方法有自己对应的逻辑。比如查询接口的实现类,是需要分页查询呢,还是多表查询等等。
    通过以上说明,大家应该对一个项目的层次有点意识了吧。
  3. 关于new:其实new出一个对象并且调用方法,跟从容器中取出对象是一样的作用,但是new是用:A a = new A( ); 这样的形式创建对象。如果是一个接口(M)有若干实现类,那就是M m = new A( ); 。而容器是用(我理解的容器创建对象的来调用其中方法的原理):

`

public class B{
	private M demo01;
	public void demo(M demo02){
		this.demo01=demo02;
	}
}

`

  • 这段代码就是类似于new出来的接口对象。看起来,哎呀,好麻烦啊!但是依赖注入的方式有多种,其中一种就是添加注解。在这里我们可以用 @Autowired 这个注解然后注解写在 private M demo02; 上面,这样就相当于new了一个接口,这个注解应该不少人在controller用过吧?那你们有没有困惑,用它具体是什么个原理?反正我是有,那我理解的原理其实就是这段代码的效果。而用了这个注解,就无需在B中new一个A对象,把这个调用接口的权力交给spring容器,这个就是我理解的” 控制反转(IOC) “。
  1. 那我们用它有啥用呢?怎么都说什么可以解耦呢?野性再举个例子:
    在上面我说了controller、service、serviceimpl之间的关系,那我们发现前两个最少操心,层层调用就完事,但是impl层需要修修改改。那接口A比如有增删改查等抽象方法,我们用的MySQL来实现接口的增删改查。那这个时候换成Oracle来实现怎么办呢?那我们impl肯定要新写一个实现类,但是如果在controller中我们调用接口层时,用的是new的方式创建的,那我们是不是得更改new的接口的实现类?那如果一个controller里面用了好几个接口呢?那我们得每个都更改?
    我在弄明白这个我弄明白这个之前,就一直在controller用的 @Autowired 注解。一直只知道这样做而已。
    那我现在明白了,我用这个注解,让spring容器给我创建对象,那我时不时不用关心这个接口的具体形态了?new后面跟着是哪个实现类我不用关心了?
  2. 对吧,这就是容器的一个作用,野性我是从这个角度来考虑这个容器思想的。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值