Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SpringKotlin:Bean字段在运行时为空,尽管在实例化期间被注入_Spring_Kotlin_Reactive - Fatal编程技术网

SpringKotlin:Bean字段在运行时为空,尽管在实例化期间被注入

SpringKotlin:Bean字段在运行时为空,尽管在实例化期间被注入,spring,kotlin,reactive,Spring,Kotlin,Reactive,我正在尝试对Spring Kotlin的支持,我希望在Spring引导应用程序中实现以下简单的DAO模式(使用Spring响应特性,这是由于Spring Initializer网站生成的): AbstractDAO类中的ligne 7如下所示: fun create(t: Mono<T>) = reactiveMongoTemplate.insert(t) fun create(t:Mono)=reactiveMongoTemplate.insert(t) 这段代码进行编译,我的

我正在尝试对Spring Kotlin的支持,我希望在Spring引导应用程序中实现以下简单的DAO模式(使用Spring响应特性,这是由于Spring Initializer网站生成的):

AbstractDAO类中的ligne 7如下所示:

fun create(t: Mono<T>) = reactiveMongoTemplate.insert(t)
fun create(t:Mono)=reactiveMongoTemplate.insert(t)
这段代码进行编译,我的应用程序启动并运行,但当实际调用insert或findAll方法时,会发生以下行为,我会得到一个NullPointerException。以下是我的观察结果:

  • 当我在AbstractDAO类的类行上放置断点时,reactiveMongoInstance被正确注入->NOTNULL
  • 当我在用@PostConstruct注释的方法中放置断点时,reactiveMongoInstance字段已正确初始化
  • 当作为另一个类(例如控制器)的构造函数参数提供时,Spring创建的GroupDAO实例被正确注入
  • 当从控制器调用GroupDAO实例的方法时,会发生NullPointerException:clazz和reactiveMongoTemplate都为null
  • 在构造函数和@PostConstruct方法中,调试器显示的GroupDAO实例似乎是一个“普通”实例,而注入控制器的实例是一个Spring增强型实例(CGLIB)
您知道为什么增强的实例字段在启动时被正确注入,但在运行时却为空吗?你认为这与我的应用程序是一个“反应性”应用程序有关吗?还是与科特林有关?我在基于java的非反应式Spring boot应用程序中实现此模式没有问题


非常感谢

我对Kotlin和Spring也有类似的问题。解决方案是使bean类和字段打开,如这里的一些注释所示

请尝试:
open-class-GroupController(open-val-groupDao:groupDao)

hmm您似乎没有在控制器中自动连接正确的实例。您是否可以发布您如何调用
insert
findAll
方法,以及您的注释@AntJavaDev的异常堆栈跟踪。我添加了请求的元素。我将尝试相同的代码,但在纯JAVA中,只要我今天有时间,这将帮助我们判断问题是来自Kotlin还是来自这个反应式Spring设置。因此,看起来注入的
GroupDAO
是另一个例子,请您在打印
@PostConstruct
中正确实例化的
GroupDAO
签名,并在调用控制器方法时为实例打印相同的签名,再次感谢您的帮助@AntJavaDev。我今天没有时间再讨论这件事,但我会在有空的时候做的,我会让你知道你是否激活了spring插件来打开这些类?如果没有,请尝试打开您的GroupDAO。
2018-10-02 10:07:51.294  INFO 19434 --- [-server-epoll-5] r.ipc.netty.tcp.BlockingNettyContext     : Started HttpServer on /0:0:0:0:0:0:0:0%0:8080
2018-10-02 10:07:51.294  INFO 19434 --- [           main] o.s.b.web.embedded.netty.NettyWebServer  : Netty started on port(s): 8080
2018-10-02 10:07:51.295 DEBUG 19434 --- [           main] s.b.w.r.c.StandardReactiveWebEnvironment : Adding PropertySource 'server.ports' with highest search precedence
2018-10-02 10:07:51.298  INFO 19434 --- [           main] fr.rs.reactive.ReactiveApplicationKt     : Started ReactiveApplicationKt in 7.284 seconds (JVM running for 8.072)
2018-10-02 10:08:06.655 ERROR 19434 --- [-server-epoll-7] .a.w.r.e.DefaultErrorWebExceptionHandler : Failed to handle request [POST http://localhost:8080/group/create]

java.lang.NullPointerException: null
    at fr.rs.reactive.dao.AbstractDAO.create(AbstractDAO.kt:7) ~[classes/:na]
    at fr.rs.reactive.web.GroupController.create(GroupController.kt:19) ~[classes/:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
    at org.springframework.web.reactive.result.method.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:243) ~[spring-webflux-5.0.9.RELEASE.jar:5.0.9.RELEASE]
    at org.springframework.web.reactive.result.method.InvocableHandlerMethod.lambda$invoke$0(InvocableHandlerMethod.java:138) ~[spring-webflux-5.0.9.RELEASE.jar:5.0.9.RELEASE]
fun create(t: Mono<T>) = reactiveMongoTemplate.insert(t)