Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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
Java 是否可以向所有请求共享相同的对象?_Java_Spring_Spring Boot - Fatal编程技术网

Java 是否可以向所有请求共享相同的对象?

Java 是否可以向所有请求共享相同的对象?,java,spring,spring-boot,Java,Spring,Spring Boot,我希望通过启动应用程序为authenticationservice生成一个密钥,并将其用于所有请求。所以我必须把它存放在某个地方,并让它易于使用。我还需要为所有请求共享一些其他对象。 在C#中,可以通过静态变量实现,但不能在Spring Boot中实现。 你知道怎么做吗? 我知道一种在启动时生成所有数据并将其放入数据库的解决方法,但我认为这是一种肮脏的方式 我是Spring Boot新手,非常感谢您的帮助。我认为您不理解什么是Springboot,它与静态作用域无关 因为spring嵌入了自己的

我希望通过启动应用程序为authenticationservice生成一个密钥,并将其用于所有请求。所以我必须把它存放在某个地方,并让它易于使用。我还需要为所有请求共享一些其他对象。
在C#中,可以通过静态变量实现,但不能在Spring Boot中实现。 你知道怎么做吗? 我知道一种在启动时生成所有数据并将其放入数据库的解决方法,但我认为这是一种肮脏的方式


我是Spring Boot新手,非常感谢您的帮助。

我认为您不理解什么是
Springboot
,它与静态作用域无关

因为spring嵌入了自己的DI框架,所以您可以创建可注入bean,然后在其他托管bean中的任何地方使用它们。可注入bean是由DI容器管理生命周期的类,它们可以根据您的需要进行不同的实例化。你可以看看

如果您想拥有一个对所有请求都保持不变的bean,那么必须使用scope
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框架称为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中的工作原理相同。再次感谢你,我已经尝试过了。它起作用了!非常好:)。