ioc容器的实现方法有哪些_Spring框架IOC容器实现原理

在上一篇中我们通过spring的IOC容器,成功实例化了我们指定的对象,在这一篇中我们将简单了解一下spring底层到底是怎么实现上述功能呢。也就是Java中反射技术。由于反射技术是Java API中提供的功能,所以在这里我们不在做过多的介绍,而是通过测试用例,来了解一下反射技术的具体应用。

下面我们将用反射技术,来实现上一篇中IOC容器实现的功能。

  • 属性注入
97bb91cb966651ee6cfdc64ea59e623f.png
3df08dede87825c785363fdf9109de6e.png
d0f038047e563279bce3c7cfdb8c85c6.png
5a484927799eb3f99fececb3e6250edb.png
  • 构造函数注入
0fe73a457f0ff05ac330251ac78b5872.png
8c26a0efcfe07c55a15f694259c92bfe.png
  • 接口注入
c3c76becce908b7c448f5ecf60490324.png
5a61521952cdd8029362d51ae230699c.png

上面的代码基本实现了我们上一篇中IOC容器的功能,但是在用Java反射技术实例化对象时,如果方法是私用的也就是private,那么我们通过上述的方式调用则会出现问题,请看下面测试用例。

34dc30757d42b9581d36bf009e34dd9f.png

我们已经将setUserDetailAble的方法设置成了私用方法。然后我们直接执行上一个已经通过的接口注入的测试用例。看一下执行结果。

68774c8584882152c81e76dee7fc8a27.png

我们看虽然我们测试用例什么都没有改,但上述结果还是出现了异常。这是为什么呢?这是因为在使用Java反射时如果要访问private类型的方法或字段必须要取消Java语言的语法检查。也就是添加额外的代码,还是可以调用私用的方法和属性的,在这一点上与我们正常开发时还是有区别的,因为Java语言规定私用方法只能在本类中调用,但是如果用Java中反射技术是可以打破这个限制的。下面我们看怎么调用私用的方法。

04703f591c104db6016b2743d44d2d5b.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值