如何使@Autowired在普通班的工作?

这是我得到的:

@Component class FooController { fun createFoo() { val foo = FooEntity() foo.name = "Diogo" fooRepository.save(foo) } @Autowired internal lateinit var fooRepository: FooRepository } 

尝试调用createFoo() ,出现以下错误:

kotlin.UninitializedPropertyAccessException: lateinit property fooRepository has not been initialized

我认为在顶部添加一个@Component会使我的类在Spring中被发现,从而使@Autowired能够工作,但也许我错了?

2 Solutions collect form web for “如何使@Autowired在普通班的工作?”

仅仅给这个类添加@Component是不够的。

1)当您使用@Component您必须确保该类是通过组件扫描进行扫描的。 这取决于你如何引导你的applciation,但是你可以使用XML配置文件的<context:component-scan base-package="com.myCompany.myProject" />或者java配置文件的@ComponentScan

如果您使用的是Spring引导 – 您不需要自己声明@ComponentScan ,因为@SpringBootApplication继承它,并且默认情况下它将扫描当前包中的所有类以及它的所有子包。

2)你必须从春天的上下文中获取bean。 用new创建一个对象将不起作用。

基本上有两种方法从应用程序上下文中获取一个bean:

  • 如果你有访问ApplicationContext对象,那么你可以做这样的事情:

ApplicationContext ctx = ...; MyBean mb = ctx.getBean(MyBean.class);//getting by type

  • 任何在上下文中声明的spring bean都可以使用依赖注入( @Autowired )来访问其他bean,

所以我对Spring很FooController ,试图通过new而不是@Autowire创建一个实例来调用FooController 。 当我添加FooController作为它被调用的类的依赖,它的工作。

  • 如何链接两个Kotlin函数参数的泛型?
  • Kotlin的动态/双重调度有什么限制?
  • 在Kotlin中按多个字段排序收集
  • 如何创建一个按钮的自定义形状,但保持可点击和可聚焦
  • Kotlin:解决genericsinheritance
  • 从Android Studio运行Kotlin Koans测试
  • Kotlin注释处理器+ AutoService
  • RxJava Live实时反应队列(带开关)
  • 如何从相同签名的方法或扩展函数调用顶层函数?
  • Android / Kotlin使用Java.io.File读取文件:路径有问题
  • 无法在android studio中调用变量
  • Kotlin language will be the best programming language for Android.