我想通过启动应用程序为我的身份验证服务生成一个密钥,并将其用于所有请求。所以我必须将它存储在某个地方并使其可访问。我需要一些其他的对象以及所有请求的共享 在C#中,可以通过静态变量进行,但不能在Spring Boot中进行。 你知道这样做的方法吗? 我知道一个解决方法,在启动时生成所有并将它们放入数据库,但我认为这是一种肮脏的方式。
我是Spring Boot的新手并感谢他们的帮助。
答案 0 :(得分:1)
我认为你错过了Springboot
是什么,它与静态范围无关。
由于spring嵌入了自己的DI框架,您可以创建可注入的bean,然后在其他托管bean中的任何位置使用它们。可注入bean是生命周期由DI容器管理的类,它们可以根据您的需要进行不同的实例化。您可以查看Spring bean scope。
如果您希望所有请求的bean保持不变,则必须使用范围Singleton
,这是默认值。
// No need to provide the scope, since singleton is the default one
@Component
public MySingletonBean {
private final String key;
// Yes, the constructor is private, but spring will see it anyway
private MySingletonBean() {
key = generateAKey();
}
private String getKey() {
return this.key;
}
}
使用此组件(DI框架称为单例),您可以在应用程序的任何位置使用相同的密钥,除非服务器重新启动,否则密钥将保持不变。
您可以在@Inject
。
在控制器中使用它的示例
@RestController
public void MyController {
@Inject
private MySingletonBean mySingletonBean;
@RequestMapping("/")
public String index() {
String key = mySingletonBean.getKey();
return key;
}
}
不要自己使用MySingletonBean构造函数。 IOC框架将负责bean实例化