2016-10-14 13 views
0

私のクラスのメインBeanには、非常に高価なオブジェクトがあるため、一度作成してからそれを必要とするさまざまなUtilに渡す必要があります。豆への春のアクセス

public class DaemonBean implements InitializingBean 
{ 
    ReallyExpensiveToCreate obj; 

    public ReallyExpensiveToCreate getReallyExpensive() { return obj; } 

    @Override 
    public void afterPropertiesSet() 
    { 
     //initialize and build ReallyExpensiveToCreate 
    } 
} 

このオブジェクトは、一連の静的関数で構成されるUtilクラスで必要です。

public class Util 
{ 
    public static ReallyExpensiveToCreate objRef = getReallyExpensiveObj(); 

    private ReallyExpensiveToCreate getReallyExpensiveObj() 
    { 
    //Get Daemon obj from Spring and call daemonObj.getReallyExpensive(); 
    } 

    public void func1() { //Use objRef in logic } 
} 

SpringからDaemonオブジェクトを取得するにはどうすればよいですか。デーモンobjへの参照を取得するために呼び出すコードが不明です。私はApplicationContextが使われたところでコードスニペットを見ましたが、私はそれがどのように使われるのか分かりません。

答えて

1

あなたは春に、サービス・ロケータパターンを

実装を探している

あなたはApplicationContextAwareを登録し、ApplicationContextへの参照を取得し、静的に豆の役割を果たすことができ

public class ApplicationContextUtils implements ApplicationContextAware { 
private static ApplicationContext ctx; 

private static final String USER_SERVICE = "userServiceBean"; 

    @Override 
    public void setApplicationContext(ApplicationContext appContext) 
     throws BeansException { 
    ctx = appContext; 

    } 

    public static ApplicationContext getApplicationContext() { 
    return ctx; 
    } 

    public static UserService getUserService(){return ctx.getBean(USER_SERVICE);} 

} 
0
public class Util { 

    private static ReallyExpensiveToCreate objRef; 

    public void objectFunction() { 
     objRef.doSomething(); 
    } 

    public static void staticFunction() { 
     objRef.doSomething(); 
    } 

    @Autowired 
    public void setReallyExpensiveBeanToCreate(DaemonBean daemonBean) { 
     Util.objRef = daemonBean.getReallyExpensive(); 
    } 
}