2016-10-11 49 views
0

一個實例方法我有三個類(A類,類C類)在我的申請。調用使用自動裝配豆

我是一名初學者。試圖注入類B的豆用於類A使用@Autowired註釋。我想利用Spring Bean的Singleton行爲,以便只有類B的實例無論從類A中調用多少次。

有一個在B類的方法,我想用這個bean B類一個類調​​用。我怎樣才能做到這一點?

我知道如何在Java中實現一個singleton類,然後獲取唯一的實例來調用它的方法,但不知道如何使用spring單例bean來實現。

+1

Spring singleton!= Java單身人士 –

+0

顯示你做了什麼。包括Spring配置文件(如果使用XML配置)或Java配置。 –

回答

2

春季單被定義爲「每Bean容器」

如果你想低於每spring容器單是需要你的bean定義

<bean id="myBean" class="MyBean"/> 

做。如果你想每個單身什麼整個應用程序,而不是每個容器,那麼我相信你可以做到這一點的唯一方法是實現一個Singleton模式有一個私人構造函數,從它的靜態方法,如getInstance訪問/檢索它。你可以做的是讓春天來調用又可以返回一個對象

<bean id="myBean" class="MyBean" factory-method="getInstance"></bean> 
0

每一個標記爲@Component@Service@Repository等類中的方法是單身,但裏面只有一個Spring容器。所以最好說他們在single scope

@Component 
public class MyBean { 
    [...] 
} 

另一種選擇,以限定在單範圍bean是標記一個方法作爲@Bean。返回類型將被緩存,所以你會如果要調用此方法始終使用同一個實例:

@Service 
public class MyService { 

    [...] 

    @Bean 
    @Scope("singleton") 
    public MyOtherBean myOtherBean() { // singleton factory method 
     return [...]; 
    } 

} 

@Bean應該只@Configuration -beans使用。在@Service bean內部,您可以注入所需的bean(@Autowired)。