Java 是否可以向所有请求共享相同的对象?
我希望通过启动应用程序为authenticationservice生成一个密钥,并将其用于所有请求。所以我必须把它存放在某个地方,并让它易于使用。我还需要为所有请求共享一些其他对象。Java 是否可以向所有请求共享相同的对象?,java,spring,spring-boot,Java,Spring,Spring Boot,我希望通过启动应用程序为authenticationservice生成一个密钥,并将其用于所有请求。所以我必须把它存放在某个地方,并让它易于使用。我还需要为所有请求共享一些其他对象。 在C#中,可以通过静态变量实现,但不能在Spring Boot中实现。 你知道怎么做吗? 我知道一种在启动时生成所有数据并将其放入数据库的解决方法,但我认为这是一种肮脏的方式 我是Spring Boot新手,非常感谢您的帮助。我认为您不理解什么是Springboot,它与静态作用域无关 因为spring嵌入了自己的
在C#中,可以通过静态变量实现,但不能在Spring Boot中实现。 你知道怎么做吗? 我知道一种在启动时生成所有数据并将其放入数据库的解决方法,但我认为这是一种肮脏的方式
我是Spring Boot新手,非常感谢您的帮助。我认为您不理解什么是
Springboot
,它与静态作用域无关
因为spring嵌入了自己的DI框架,所以您可以创建可注入bean,然后在其他托管bean中的任何地方使用它们。可注入bean是由DI容器管理生命周期的类,它们可以根据您的需要进行不同的实例化。你可以看看
如果您想拥有一个对所有请求都保持不变的bean,那么必须使用scopeSingleton
,这是默认的
// 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框架称为singleton),您可以在应用程序中的任何地方使用相同的密钥,除非服务器重新启动,否则密钥将保持不变
您可以在任何地方使用@Inject
在控制器中使用它的示例
@RestController
public void MyController {
@Inject
private MySingletonBean mySingletonBean;
@RequestMapping("/")
public String index() {
String key = mySingletonBean.getKey();
return key;
}
}
不要自己使用MySingletonBean构造函数。IOC框架将在春季处理bean实例化,您可以创建
bean
s,并在需要时注入它们。。。哇,谢谢!看来这是一个简单的方法。@Vertiris不客气。将您的问题标记为已回答愚蠢的问题,但我在我的Spring Boot中找不到@Inject注释,也不知道它的库。你能帮我一下吗?@Vertiris你需要在你的pom.xml中包含以下依赖项:javax.inject javax.inject 1
,如果你不想,你可以使用spring的等价物@Autowired
,inject和authowired在spring中的工作原理相同。再次感谢你,我已经尝试过了。它起作用了!非常好:)。