Spring系列第2篇:控制反转(IoC)与依赖注入(DI),晦涩难懂么?

本文详细解析了Java面试中关于依赖关系和构造方法优化的问题,介绍了如何在B类中动态传递A对象,以及如何处理多个依赖对象。同时提到了面试中注重逻辑思维的重要性,并分享了面试准备策略。

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

public class B{

public void m1();

}

上面2个类都有同样的m1方法。

现在我们调用B的m1方法完成一些事情,而B中的m1方法需要调用A中的m1方法才可以完成这个事情,所以B的代码变成了下面这样:

public class B{

private A a; // @1

public B(){

this.a = new A(); //@2

}

public void m1(){

this.a.m1(); //@3

}

}

分析一下上面代码:

@1:B类中声明了一个A类型的属性a

@2:new了一个A对象,赋给了a属性

@3:B类中的m1方法中去调用a.m1()完成业务操作

先说一下什么是依赖关系?

当a对象完成某些操作需要调用b对象中的方法来实现时,说明a依赖于对象b,a和b是依赖关系。

上面代码中B的m1需要调用A的m1方法,说明了B依赖于A

上面代码存在一些问题问题

B类中a对象的创建被写死在B的构造方法中了,如果我们想在创建不同的B对象的时候,使用不同的a对象,此时是无能为力的;代码也不利于测试,由于B中a的创建被写死在构造方法中了,我们想测试一下B中不同a对象的效果,此时只能去修改B中的构造方法。

上面代码需要优化,B中a对象的创建不能写死,可以让外部传入进去,调整一下变成了下面这样:

public class B{

private A a;

public B(A a){

this.a = a;

}

public void m1(){

this.a.m1();

}

}

上面代码可以在创建B对象的时候,将外部创建好的a对象传入进去,此时a的控制权交给了使用者,创建B对象如下:

A a = new A();

B b = new B(a);

b.m1();

上面代码我们再扩展一下,如果B类中还需要依赖很多类似于A的对象,比如需要依赖于C、D、E、F或者更多对象,首先是需要调整B的构造方法,修改老的构造方法不是很好,可以在B中新增一些构造方法。

但是使用B的时候就变成了下面这样:

A a = new A();

C c = new C();

D d = new D();

E e = new E();

F f = new F();

B b = new B(a,c,d,e,f,…);

b.m1();

使用者创建B对象之前,需要先将B依赖的对象都给创建好,然后B依赖的这些对象传递给B对象,如果有很多地方都需要用到B类型的对象,都采用这种new的写法,代码量比较大,也不方便维护,如果B中新增了依赖,又需采用new的方式先创建好被依赖的对象,然后将被依赖的对象填充给B对象。

最后总结我的面试经验

2021年的金三银四一眨眼就到了,对于很多人来说是跳槽的好机会,大厂面试远没有我们想的那么困难,摆好心态,做好准备,你也可以的。

另外,面试中遇到不会的问题不妨尝试讲讲自己的思路,因为有些问题不是考察我们的编程能力,而是逻辑思维表达能力;最后平时要进行自我分析与评价,做好职业规划,不断摸索,提高自己的编程能力和抽象思维能力。

BAT面试经验

实战系列:Spring全家桶+Redis等

其他相关的电子书:源码+调优

面试真题:


《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
070)]

面试真题:

[外链图片转存中…(img-Giay8ZyV-1714677770070)]

[外链图片转存中…(img-5umugiby-1714677770070)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值