2012-01-02 40 views
1
@Bean 
public Session session(){ 
    SessionConnector connector=new SessionConnector(url,username,password,environment); 
    Session session= connector.getSession(); 
    session.registerListener(listener()); 

    return session; 
} 
@Bean 
public Listener listener(){ 
    return new Listener(session()) 
} 

我有上面的代碼運行無限循環結束...我怎樣才能分開註冊的監聽器到一個單獨的方法? (我試圖創建一個沒有註冊碼的臨時私人會話bean,但由於某種原因你不能擁有私人bean?)彈簧配置 - 最佳做法與初始化代碼

Thxs。

回答

2

Listener不一定是@Bean

您可以調用常規的Listener構造函數並傳遞一個會話。

下面是修改後的代碼:

@Bean 
public Session session(){ 
    SessionConnector connector= 
     new SessionConnector(url,username,password,environment); 
    Session session= connector.getSession(); 

    // This is modified initialization code 
    Listener listener = new Listener(session); 
    session.registerListener(listener); 

    return session; 
} 

編輯
如果你需要有聽衆作爲一個單身的話,我建議你在它的初始化代碼會話註冊。

@Bean 
public Session session(){ 
    SessionConnector connector= 
     new SessionConnector(url,username,password,environment); 
    Session session= connector.getSession(); 

    return session; 
} 

@Bean 
public Listener listener(){ 
    Session session = session(); 
    Listener listener = new Listener(session); 

    session.registerListener(listener); 

    return listener; 
} 
+0

我需要重用監聽器在別處,它需要是單身人士,所以我需要使它成爲一個bean。 – 2012-01-03 06:37:27

+0

@DD。我已經更新了我的答案。 – 2012-01-03 12:25:21

1

我喜歡使用下面的模式來確保bean不會被多次實例化。你仍然顯然需要刪除循環依賴。

@Bean 
public Session session(){ 
    if (session == null) { 
     SessionConnector connector=new SessionConnector(url,username,password,environment); 
     session= connector.getSession(); 
    } 
    return session; 
} 
@Bean 
public Listener listener(){ 
    if (listener == null) { 
     Session session = session(); 
     listener = new Listener(session); 
     session.registerListener(listener); 
    } 
    return listener; 
} 

private Session session; 
private Listener listener;