python ioc框架_IOC 实现原理

IOC 也就是“控制反转”了,不过更流行的叫法是“依赖注入”(DI - Dependency Injection)。听起来挺高深,其实实现起来并不复杂。下面就看看如何来实现这个轻量级 IOC 框架。

从实例出发,先看看以下 Action 代码。

@Bean

public class ProductAction extends BaseAction {

@Inject

private ProductService productService;

@Request("GET:/product/{id}")

public Result getProductById(long productId) {

if (productId == 0) {

return new Result(ERROR_PARAM);

}

Product product = productService.getProduct(productId);

if (product != null) {

return new Result(OK, product);

} else {

return new Result(ERROR_DATA);

}

}

}

以上使用了两个自定义注解:@Bean 与 @Inject。 在 ProductAction 类上标注了 @Bean 注解,表示该类会交给“容器”处理,以便加入依赖注入框架。

在 produceService 字段上标注了 @Inject 注解,表示该字段将会被注入进来,而无需 new ProductServiceImpl(),实际上 new 这件事情不是我们做的,而是框架做的,也就是说控制权正好反过来了,所以“依赖注入(DI)”也称作“控制反转(IoC)”。

那么,应该如何实现依赖注入框架呢?首先还是看看下面的 BeanHelper 类吧。

public class BeanHelper {

private static final Map, Object> beanMap = new HashMap, Object>();

static {

try {

// 获取并遍历所有的 Bean(带有 @Bean 注解的类)

List> beanClassList = ClassHelper.getClassListByAnnotation(Bean.class);

for (Class> beanClass : beanClassList) {

// 创建 Bean 实例

Object beanInstance = beanClass.newInstance();

// 将 Bean 实例放入 Bean Map 中(键为 Bean 类,值为 Bean 实例)

beanMap.put(beanClass, beanInstance);

}

// 遍历 Bean Map

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值