2016-05-17 99 views
1

我想通過啓動應用程序爲我的身份驗證服務生成密鑰,並將其用於所有請求。所以我必須將它存儲在某個地方並使其可訪問。我還需要其他一些對象以及所有請求共享。
在C#中可以通過靜態變量進行設置,但不能在Spring Boot中進行設置。 你知道一個辦法嗎? 我知道一個解決方案,以在啓動時生成所有,並將它們放入數據庫,但我認爲這是一種骯髒的方式。是否可以共享相同的對象到所有請求?

我是新來的春天引導和欣賞的幫助。

+1

在春天,你可以創建'bean's,你可以在需要時注入它們... http://docs.spring.io/autorepo/docs/spring/4.2 .x/spring-framework-reference/html/beans.html –

回答

1

我想你missunderstand什麼Springboot是,它沒有任何的靜態範圍。

春季以來嵌入自己的DI框架,你可以創建注射豆,然後在其他託管豆在任何地方使用它們。可注入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構造。國際奧委會框架將照顧豆實例

+0

謝謝!這似乎是一個簡單的方法來做到這一點。 – Mortalis

+0

@Mortalis歡迎您。標記爲'answered' [交代,這裏](http://meta.stackexchange.com/a/5235/300659) –

+0

愚蠢的問題你的問題,但我不找到@Inject註解在我的春節,引導和不知道圖書館爲了它。你能幫我解決這個問題嗎? – Mortalis

相關問題