2016-02-05 40 views
0

託管bean中有一個類(靜態)變量。從另一個託管bean中引用此類變量是否合法:在託管bean中引用類變量(靜態)

@ManagedBean 
@ApplicationScoped 
public class FooBean { 
    private Context ctx; 
    public static DataSource ds; 

    @PostConstruct 
    public void init() { 
     ctx = new InitialContext(); 
     ds = (DataSource) ctx.lookup("java:comp/env/foobar"); 
    }   
} 

@ManagedBean 
@RequestScoped 
public class BarBean { 
    public void foobar() { 
     // Is that legal and save? 
     Connection conn = FooBean.ds.getConnection(); 
    } 
} 

是否應該使用依賴注入?

@ManagedBean 
@RequestScoped 
public class BarBean { 
    @ManagedProperty(value = "#{fooBean}") 
    private FooBean fooBean; 

    public void foobar() { 
     Connection conn = fooBean.get_ds().getConnection(); 
    } 
} 

回答

0

它的工作,因爲FooBeanBarBean電話FooBean.ds.getConnection();它通過其範圍也不會成爲一個問題之前已經已經加載。

FooBean.ds.getConnection();稱爲知道第一個bean將被加載,因爲它是@ApplicationScoped,但它會在您的數據源沒有多線程或適當管理後立即生效。

我不確定它會如何收集垃圾收集。

我會用CDI @Inject(在舊@ ManagedProperty - 仍然般的魅力雖然)或Spring @Autowired注入其他資源的情況下,豆類,EJB,服務等

所以我的答案是使用依賴的力量靜態類成員注入。