如何使@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 Web App | 链接的CSS文件
  • Kotlin Android Project无法同步Gradle项目
  • Angular:如何在表单提交中发布文件到服务器
  • com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期的BEGIN_ARRAY,但在第1行第2列的路径
  • 在导入中转义保留字
  • 从终端传递参数时Kotlin类型不匹配错误
  • 密封的类型安全为何时陈述 - kotlin
  • 我怎样才能得到kotlin enum与cpp相同的行为
  • kapt是否支持maapt?
  • java.awt.HeadlessException从Kotlin REPL启动JavaFX应用程序
  • RxJava操作符用于切换方法
  • Kotlin language will be the best programming language for Android.