2016-07-30 3 views
1

I „myspring.xml“ in web.xml mit context-paramwie aus einer anderen Klasse Frühling Bohne laden

in „myspring.xml“ Ich Bohne ich Argumente als Konstruktorargument bestanden haben, auf die geschrieben haben, geladen haben

<bean id="abc" class="com.Hello"> 
    <constructor-arg ref="dataSource"/> 
    <constructor-arg value= “dummy data”/> 
</bean> 

in Hallo Bohne ich habe initialisiert Konstruktor wie

public class Hello{ 
    public Hello(datasource,dummydata){ 
    } 

    public void methodFromHelloBean(){ 
     // use here dummydata from constructor 
    } 
} 

Hier ‚Hallo‘ Bohne wird immer beim Serverstart initialisiert, wie ich in web.xml definiert und es funktioniert gut.

Meine Frage ist -

ich auf exisitng applciation arbeite. Ich möchte methodFromHelloBean() in meiner anderen Klasse sagen MyService-Klasse. Wie kann ich die Methode in der Klasse MyService aufrufen.

Eine Möglichkeit, die ich kenne, ist die Verwendung von ApplicationContext. Aber in meiner bestehenden Anwendung habe ich keine Bean mit Anwendungs-Kontext Pfad geladen.

was anders ist, wie ich 'Hallo' Bohne von 'MyService' Klasse initialisieren kann. Muss ich Parameter an Konstruktoren übergeben, während & wie initialisiert wird.

Vielen Dank im Voraus.

+0

Wie wäre es, Hello Bean in MyService zu injizieren? Ist MyService als Spring Bean definiert? –

+0

Ja, in vorhandenen Anwendungs-Beans wurde automatisch verdrahtet. Aber wenn ich denke, Auto-Draht zu verwenden, öffentliche Klasse MyService {@AutoWired Hallo. Nun, wie kann ich methodFromHelloBean aufrufen und Konstruktorargumente übergeben? –

+0

Sie können nicht. Konstruktorargumente müssen zur Entwurfszeit im Spring-Kontext angegeben werden. Wenn Sie Ihrer Hello-Bean Parameter zuweisen müssen, muss dies über die Methode erfolgen, die Sie aufrufen möchten. –

Antwort

2

Nehmen wir an, wir MyService eine Klasse, deren Bean-Instanz haben verbraucht einige Methode methodFromHelloBean von abc, die Hello Bohne.

public class Hello { 

    private boolean cacheInitialized; 

    public void methodFromHelloBean(Object param) { 
     if (!cacheInitialized) { 
      initializeCache(param); 
      cacheInitialized = true; 
     } 
     // do whatever you please with cache. 
    } 

    private void initializeCache(Object param) { 
     // TODO 
    } 

} 

public class MyService { 

    @Autowired 
    private Hello abc; 

    public void someMethod() { 
      // determine which parameters to pass to abc 
      Object param = ... 
      abc.methodFromHelloBean(param); 
    } 

} 
+0

Danke Arthur. Aber ein Zweifel bleibt immer noch, da Hello einen Konstruktor hat, der den Parameter 'datasource' (DB-Ding) von "myspring.xml" übernimmt, der dort verfügbar ist. Wie kann ich diesen Datenquellenparameter von der MyService-Klasse übergeben? –

+0

Eigentlich möchte ich Cache-ähnliche Funktionalität implementieren, indem ich "myspring.xml" beim Server-Start lädt, die Hallo-Klasse lädt. Hallo Klasse füllt Daten unter Verwendung der Datenquelle und anderer Parameter in der methodFromHelloBean-Methode. Und ich möchte bevölkerte Daten Methode ie 'methodFromHelloBean' aufrufen, wann immer in meiner Anwendung benötigt, sagen MyService Klasse. Es ist also nicht notwendig, die Datenquelle und andere Parameter zu übergeben, und ich kann die bereits aufgefüllte Methode mit Daten ohne DB-Treffer verwenden. –

+0

Das kann funktionieren. Sie können hier eine Art von faulen Mustern verwenden. Ich werde die Antwort bearbeiten, um dies zu reflektieren. –

Verwandte Themen