iOS控制反转(IoC)与依赖注入(DI)的实现

背景

最近接触了一段时间的SpringMVC,对其控制反转(IoC)和依赖注入(DI)印象深刻,此后便一直在思考如何使用OC语言较好的实现这两个功能。Java语言自带的注解特性为IoC和DI带来了极大的方便,要在OC上较好的实现这两个功能,需要一些小小的技巧。

控制反转和依赖注入

控制反转

简单来说,将一个类对象的创建由手动new方式改为从IOC容器内获取,就是一种控制反转,例如我们现在要创建一个ClassA类,则常规方法为

ClassA *a = [ClassA new];

如果使用控制反转,则从容器内获取ClassA对象,对象由容器负责创建。

ApplicationContext *context = [ApplicationContext sharedContext];
ClassA *a = [context getInstanceByClassName:@"ClassA"];

依赖注入

所谓依赖注入,是指一个类对象不应负责去查找其依赖属性,而是交由容器去处理。例如ClassA类有一个ClassB类对象,如下所示。

@interface ClassA : NSObject

@property(nonatomic, strong) ClassB *b;

@end

常规情况下,要将ClassB的对象创建后传递给ClassA,如下所示。

ClassA *a = [ClassA new];
ClassB *b = [ClassB new];
a.b = b;

如果交由容器处理,则容器会自动创建ClassA、ClassB,并且根据ClassA的依赖属性类型ClassB自动的将ClassB的实例注入到ClassA对象中。

优点

使用控制反转和依赖注入将对象的创建与依赖对象的注入交由IoC容器来完成,这样做不仅能够降低代码的耦合度,更可以减少代码量。

类与属性的修饰

这两个功能都是在运行时通过反射来实现的,具体的容器技术细节在下文讨论,这里主要讨论的是如何修饰交由容器创建的对象以及依赖注入的属性。

Java中的注解

在Java中,那些要交由Spring容器创建的类通过注解来修饰,例如JavaWeb中的Controller和Service分别由@Controller和@Service修饰,如下所示。

// 控制器
@Controller
public class SomeController {
   ...}
// 服务
@Service
public class SomeService {
   ...<
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值