【问题标题】:How Dependency injection with @Inject annotation works in micronaut Kotlin?使用 @Inject 注释的依赖注入如何在 micronaut Kotlin 中工作?
【发布时间】:2019-06-18 12:09:52
【问题描述】:

如何使用 @Inject 注解为 micronaut 框架注入类中的依赖项

@Controller("/")
class HelloController(val greetService:GreetService){

 @Get("/hello")
 fun getMessage(){
    greetService.greet 
  }

}

class GreetService(val userRepo:UserRepo){

  fun doSomething(val data:String){
      userRepo.saveData(data)
  } 
}
class UserRepo(val db:DbHandler){
     fun saveData(val data){
       db.save(data)
     }
}

如何使用@Inject

【问题讨论】:

    标签: kotlin jvm micronaut


    【解决方案1】:

    你可以写这样的东西没有什么不同:

    @Inject
    var greetingService:GreetingService;
    

    或者你可以在构造函数上这样做

    class HelloController(@Inject val greetService:GreetService)
    

    我更喜欢第二个选项,因为它使用 val 而不是 var。

    【讨论】:

    • 我认为class HelloController(val greetService:GreetService) 会像class HelloController(@Inject val greetService:GreetService) 一样工作。
    • 不是因为@Controller。它可以在上下文中的任何 bean 中工作(包括但不限于控制器)。
    【解决方案2】:
     @Singleton
     class GreetService(val userRepo:UserRepo){
    
     fun doSomething(val data:String){
      userRepo.saveData(data)
         } 
       }
    

    您要注入的 bean 必须根据 Micronaut 使用提供的注解(例如 @Singleton、@Context、@ThreadLocal 等)声明为 bean

    【讨论】:

      猜你喜欢
      • 2015-01-21
      • 2021-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-23
      • 1970-01-01
      • 2021-06-08
      • 1970-01-01
      相关资源
      最近更新 更多