Java 如何使用函数式Bean注册配置应用程序上下文
我正试图将我的SpringBoot应用程序重新转换为FunctionalBean注册表单,以加快应用程序的启动速度,正如Spring云函数的Spring文档中所提到的那样。以下是文档中引用的代码:Java 如何使用函数式Bean注册配置应用程序上下文,java,spring-boot,Java,Spring Boot,我正试图将我的SpringBoot应用程序重新转换为FunctionalBean注册表单,以加快应用程序的启动速度,正如Spring云函数的Spring文档中所提到的那样。以下是文档中引用的代码: @SpringBootConfiguration public class DemoApplication implements ApplicationContextInitializer<GenericApplicationContext> { public static void
@SpringBootConfiguration
public class DemoApplication implements ApplicationContextInitializer<GenericApplicationContext> {
public static void main(String[] args) {
FunctionalSpringApplication.run(DemoApplication.class, args);
}
public Function<String, String> uppercase() {
return value -> value.toUpperCase();
}
@Override
public void initialize(GenericApplicationContext context) {
context.registerBean("demo", FunctionRegistration.class,
() -> new FunctionRegistration<>(uppercase())
.type(FunctionType.from(String.class).to(String.class)));
}
}
@SpringBootConfiguration
公共类DemoApplication实现ApplicationContextInitializer{
公共静态void main(字符串[]args){
FunctionalSpringApplication.run(DemoApplication.class,args);
}
公共函数大写(){
返回值->value.toUpperCase();
}
@凌驾
公共void初始化(GenericaApplicationContext上下文){
registerBean(“demo”,FunctionRegistration.class,
()->新函数注册(大写())
.type(FunctionType.from(String.class).to(String.class));
}
}
下面是我试图遵循上述示例的代码。主要区别在于我的函数是一个单独的类,它实现了Java8函数接口
import com.example.functions.RockPaperScissors;
import com.example.model.Game;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.cloud.function.context.FunctionRegistration;
import org.springframework.cloud.function.context.FunctionType;
import org.springframework.cloud.function.context.FunctionalSpringApplication;
import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.support.GenericApplicationContext;
@Slf4j
@ComponentScan
@SpringBootConfiguration
public class Application implements ApplicationContextInitializer<GenericApplicationContext> {
private RockPaperScissors rockPaperScissors;
public static void main(String[] args) {
FunctionalSpringApplication.run(Application.class, args);
}
@Override
public void initialize(GenericApplicationContext applicationContext) {
applicationContext.registerBean(
"rpsFunction",
FunctionRegistration.class,
() ->
new FunctionRegistration<>(this.rockPaperScissors)
.type(FunctionType.from(Game.class).to(String.class)));
}
@Autowired
public void setRpsFunction(RockPaperScissors rockPaperScissors) {
this.rockPaperScissors = rockPaperScissors;
}
}
import com.example.functions.rock剪纸机;
导入com.example.model.Game;
导入lombok.extern.slf4j.slf4j;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.boot.SpringBootConfiguration;
导入org.springframework.cloud.function.context.FunctionRegistration;
导入org.springframework.cloud.function.context.FunctionType;
导入org.springframework.cloud.function.context.FunctionalSpringApplication;
导入org.springframework.context.ApplicationContextInitializer;
导入org.springframework.context.annotation.ComponentScan;
导入org.springframework.context.support.GenericaApplicationContext;
@Slf4j
@组件扫描
@SpringBoot配置
公共类应用程序实现ApplicationContextInitializer{
私人石头剪刀;
公共静态void main(字符串[]args){
FunctionalSpringApplication.run(Application.class,args);
}
@凌驾
公共void初始化(GenericaApplicationContext应用上下文){
applicationContext.registerBean(
“rpsFunction”,
FunctionRegistration.class,
() ->
新功能注册(此为RockPaperScissor)
.type(FunctionType.from(Game.class).to(String.class));
}
@自动连线
公共无效设置功能(RockPaperScissor RockPaperScissors){
this.rockPaperScissors=rockPaperScissors;
}
}
我遇到的问题是java.lang.IllegalArgumentException:“target”不能为null。我知道这是因为找不到应用程序上下文,但不确定为什么FunctionalSpringApplication.run(DemoApplication.class,args)代码>没有创建该上下文