# Spring Autowired



## MQue (7. Okt 2009)

Hallo,

hätte noch eine (wahrscheinlich einfache) Frage zu @Autowired, und zwar kann man die Annotation @Autowired nur in einer Klasse benutzen, welche selbst im Spring- Container als bean definiert und deklariert wurde (hört sich jetzt während des schreibens ziemlich logisch an, bin mir aber nicht sicher), also:

In einer Klasse (in meinem Fall einem Servlet), welche nicht als bean für den Spring- Container deklariert wurde (was ja auch nicht geht, da es sich um ein Servlet handelt und dieses vom z.B.: Tomcat instaniert wird), kann man auch kein @Autowired benutzen.

Sehe ich das richtig so? 
lg


----------



## mvitz (7. Okt 2009)

Kurz und knapp: Ja 

Wie du bereits sagtest, kann Spring natürlich nur Spring Beans injecten, wenn auch das Objekt, in das injeziert werden soll von Spring gemanaged wird.


----------



## MQue (7. Okt 2009)

habi55 hat gesagt.:


> Kurz und knapp: Ja
> 
> Wie du bereits sagtest, kann Spring natürlich nur Spring Beans injecten, wenn auch das Objekt, in das injeziert werden soll von Spring gemanaged wird.



Habs befürchtet, ich brauche nämlich in meinem Servlet eine Instanz auf eine bean, wie kann man das am Besten machen, 
Gibt es eine Möglichkeit, aus einem Servlet heraus mittels Spring auf eine Instanze einer Klasse zuzugreifen, welche als bean im Spring- Container deklariert wurde?
Ich kann ja das Servlet nicht als bean im Spring- Container deklarieren!!??

Vielen Dank,
lg


----------



## byte (7. Okt 2009)

Wozu brauchst Du Servlets, wenn Du Spring benutzt? Du kannst ein DispatcherServlet konfigurierern, dass dann alle anfragen an Spring Beans delegiert.


----------



## mvitz (7. Okt 2009)

Hättest du vermutlich aber auch eben google können  ("get spring bean from servlet")

Java Examples - How do I get Spring's Bean from a servlet?
Accessing a Spring bean from a servlet - JavaGeek.org

Edit: zu byte:
Klar geht das, wenn er z.B. Spring MVC nutzen möchte. Möchte er aber selber reine Servlets nehmen, geht das nunmal nicht


----------



## MQue (7. Okt 2009)

OK, wieder mal einiges dazugelernt, mit Spring MVC hab ich mich noch nicht so viel beschäftigt, deshalb wirds jetzt zeit, 

vor allem war mir das mit dem DispatcherServlet nicht bekannt, das geht ja in die Richtung Struts mit einem Verteiler und mehreren Actions.
Werd mir das gleich mal anschauen.

Danke für Eure hilfe,
lg


----------



## byte (7. Okt 2009)

habi55 hat gesagt.:


> Klar geht das, wenn er z.B. Spring MVC nutzen möchte. Möchte er aber selber reine Servlets nehmen, geht das nunmal nicht



OK, wenn man eine Webseite generieren möchte, ist das richtig. Das geht aber aus dem Eingangspost nicht hervor. Aber liegt in diesem Fall wohl nahe, insofern haste recht.


----------



## MQue (7. Okt 2009)

Hallo,

ich hab das in meiner Web- Applikation jetzt so gemacht, das ich folgende Zeilen in den DD (web.xml) geschrieben habe:


```
<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>WEB-INF/applicationContext.xml</param-value>
    </context-param>    
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
```

Das heißt ja, es wird nach dem Starten des Servers (in meinem Fall Tomcat) der Spring- Context geladen.
Meine erste Frage wäre, warum das Starten des Tomcat- Servers ohne die obigen Zeilen um die 4sec dauert und mit den Zeilen oben (also Spring context laden) um die 16sec. So weit ich in der Ausgabe sehen kann, wird ja immer zuerst der SErver gestartet und dann eben der Spring- Context geladen:


```
07.10.2009 11:36:58 org.apache.catalina.startup.Catalina start
INFO: Server startup in 16670 ms
07.10.2009 11:36:59 org.springframework.context.support.AbstractApplicationContext doClose
INFO: Closing org.springframework.web.context.support.XmlWebApplicationContext@ee22f7: display name [Root WebApplicationContext]; startup date [Wed Oct 07 11:36:57 CEST 2009]; root of context hierarchy
07.10.2009 11:36:59 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destr
...
```

Wird also beim Starten des Tomcat- Servers mit den obigen Zeilen auch schon der Context geladen?

Meine Zweite Frage wäre, ob es einen Listener gibt, der mir sagt, wann der Spring- Context fertig geladen ist?

Vielen Dank,
lg


----------

