3.3 IOC

IOC(Inversion Of Control),意为控制反转,不是什么技术,而是一种设计思想。Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。

在Blade中也集成了这个功能,帮助开发者更好的管理对象。一个Blade工程在启动后就已经将很多对象存储在IOC容器之中了,大部分时候我们只使用这些对象,也会有插件扩展/自定义的一些注入Bean需求。我们在这里不详细概述IOC的实现,感兴趣可以在这里看看。

我们讲解Blade中的IOC使用方式,在框架中我们使用注解来进行依赖注入的过程,操作非常简单。

  • @Bean:标识某个类可以被框架扫描到IOC容器中,写在类上
  • @Inject:为变量注入一个Bean,写在成员变量上

举个例子

  1. @Bean
  2. public class UserService{
  3. public String sayHello(){
  4. return "Hello Blade.";
  5. }
  6. }

这时候想在路由/控制器中使用这个 UserService 只需:

  1. @Path
  2. public class IndexRoute(){
  3. @Inject
  4. private UserService userService;
  5. @GetRoute("sayHello")
  6. public void index(Response response){
  7. response.text(userService.sayHello());
  8. }
  9. }

非常简单。

有时候我们加载一些Bean是有顺序的,在Blade中提供一个 @Order 注解帮你完成顺序加载Bean,一般情况下用不到。