Verwenden Sie Annotationen, um IOC -Behälter zu konstruieren
Verwenden Sie Anmerkungen, um Bohnen mit Frühlingsbehältern zu registrieren. Müssen sich in applicationContext.xml <context registrieren: component-scan base-package = ”pagkage1 [, pagkage2,…, pagkagen]”/>.
Zum Beispiel: Geben Sie ein Paket im Basisverpackung an
<Kontext: Komponenten-scan-Basis-Package = "cn.gacl.java"/>
Zeigt an, dass im Cn.gaCl.java -Paket und dessen Unterpackung eine bestimmte Annotation [@component/@repository/@service/@controller] im Cn.gaCl.java -Paket und dessen Unterpackung hat, wird dieses Objekt als Bean in den Federcontainer registriert. Sie können auch mehrere Pakete in <Kontext angeben: component-scan base-package = ""/>, wie z. B.:
<Kontext: Komponenten-scan-Basis-Package = "cn.gacl.dao.impl, cn.gacl.service.impl, cn.gaCl.action"/>
Mehrere Pakete werden durch Kommas getrennt.
1. @Component
@Komponente
Es ist eine gemeinsame Form für alle von den Frühling verwalteten Komponenten. Die @Component -Annotation kann auf den Kopf der Klasse platziert werden, und @Component wird nicht empfohlen.
2. @Controller
@Controller entspricht der Bean der Präsentationsschicht, dh Aktion, zum Beispiel:
@Controller @Scope ("Prototyp") öffentliche Klasse UserAction erweitert Baseaction <Beer> {...}Nachdem @Controller Annotation zur Identifizierung der Benutzeraktion verwendet wird, bedeutet dies, dass die Benutzeraktion für die Verwaltung an den Federcontainer übergeben werden soll. Es wird eine Aktion mit dem Namen "Benutzeraktion" im Federcontainer geben. Dieser Name wird basierend auf dem Namen der Benutzeraktionsklasse aufgenommen. Hinweis: Wenn @Controller seinen Wert 【@Controller】 nicht angibt, ist der Standard -Bean -Name im ersten Buchstaben des Klassennamens Kleinbuchstaben. Wenn Sie den Wert 【@controller (value = "userAction")】 oder 【@controller ("BenutzerAktion")】 angeben, verwenden Sie den Wert als Name der Bean.
Die Benutzeraktion hier verwendet auch die @Scope -Annotation. @Scope ("Prototyp") bedeutet, dass der Umfang der Aktion als Prototyp deklariert wird. Sie können den SCOPE = "Prototyp" des Containers verwenden, um sicherzustellen, dass jede Anforderung eine separate Aktion zum Umgang mit der Handlungssicherheit in Streben enthält. Frühling Der Standardbereich ist der Singleton -Modus (Scope = "Singleton"), der nur ein Aktionsobjekt erstellt. Jeder Zugriff ist das gleiche Aktionsobjekt. Die Daten sind nicht sicher. Struts2 erfordert, dass jeder Zugriff einer anderen Aktion entspricht. Scope = "Prototyp" kann sicherstellen, dass ein Aktionsobjekt erstellt wird, wenn eine Anforderung vorliegt.
3.. @ Service
@Service entspricht der Service -Layer -Bean, zum Beispiel:
@Service ("UserService") Public Class UserServiceImpl implementiert UserService {……}@Service ("UserService") Annotation sagt Spring, dass der Bean -Name "UserService" genannt werden muss, wenn Spring eine Instanz von UserServiceImpl erstellen will. Wenn die Aktion eine Instanz von UserServiceImpl verwenden muss, kann der von Spring erstellte "UserService" in Aktion eingefügt werden: In Aktion müssen Sie nur eine Variable mit dem Namen "UserService" deklarieren, um den von Frühling eingefügten "Userservice" zu empfangen. Der spezifische Code lautet wie folgt:
// UserService @Resource (name = "userService") private UserService UserService;
Hinweis: Der in der Aktion deklarierte Typ der Variablen "UserService" muss "UserServiceImpl" oder der übergeordneten Klasse "Userservice" sein, andernfalls kann er nicht aufgrund inkonsistenter Typen injiziert werden. Da die deklarierte "UserService" -Variable in der Aktion die @Resource -Annotation verwendet und den Namen "UserService" angibt, was dem Anspruch auf Spring entspricht, dass ich einen "Userservice" instanziieren möchte. Der Frühling wird mir helfen, es schnell zu instanziieren und es mir dann zu geben. Wenn Spring die @Resource -Annotation in der UserService -Variablen entsprechend dem angegebenen Namensattribut sieht, können Sie wissen, dass in der Aktion eine Instanz von UserServiceImpl verwendet werden muss. Zu diesem Zeitpunkt wird Spring die Instanz von UserServiceImPL mit dem Namen "UserService" in die Variable "UserService" in der Aktion einfließen, um die Aktion zu unterstützen, um die Instanziierung von UserService zu vervollständigen. In der Aktion müssen daher nicht "UserService userService = new UserServiceImpl () verwendet werden." Dies ist die primitivste Möglichkeit, den Userservice zu instanziieren.
Wenn es keinen Frühling gibt, müssen Sie, wenn die Aktion UserServiceImpl verwenden muss, aktiv ein Instanzobjekt über "UserService userService = new UserServiceImpl () erstellen. Nach der Verwendung des Frühlings müssen Sie jedoch nicht aktiv eine Instanz von UserServiceImpl erstellen. Das Erstellen einer BenutzerserviceImpl -Instanz wurde an den Frühling übergeben. Spring gibt der erstellten UserServiceImpl -Instanz der Aktion und Sie können sie direkt nach Erhalt der Aktion verwenden.
Aktionen können unmittelbar nach aktivem Erstellen der UserServiceImplin -Instanz verwendet werden, wartet jedoch passiv auf den Spring, um die BenutzerserviceImpl -Instanz zu erstellen, bevor sie sie in Aktion bringen.
Dies zeigt, dass die "Kontrolle" der Aktion über die Klasse "UserServiceImpl" "umgekehrt" wurde. Es stellt sich heraus, dass die Initiative in meinen eigenen Händen ist. Ich muss die Klasseninstanz "UserServiceImpl" verwenden. Ich kann die Initiative ergreifen, um sie sofort zu verwenden. Aber jetzt kann ich die Initiative nicht auf neue Instanzen der Klasseninstanz "UserServiceImpl" ergreifen. Die Leistung der neuen "UserServiceImpl" -Klassinstanz wurde vom Frühling weggenommen. Nur Frühling können neue Instanzen der Klasseninstanz "UserServiceImpl" und Aktion nur darauf warten, dass der Frühling nach der Instanz der RviceImpl "Klasse" "BITTE" -FRINDE "Userse" -Klasse erstellt wird. UserserviceImpl zu funktionieren, sodass der UserServiceImpl (dh "Geben") der UserserviceImPL erstellt wird, auf die sich die Acion auf die Handlung abschließen muss, was als "Abhängigkeitsinjektion" bezeichnet wird.
4.. @ Repository
@Repository entspricht der Datenzugriffsschicht -Bean, zum Beispiel:
@Repository (value = "userDao") öffentliche Klasse UserDaOImpl erweitert basiertAoImpl <Benutzer> {………}Die Annotation von @Repository (value = "userDao") sagt Spring, dass Spring eine UserDaoImpl -Instanz mit dem Namen "UserDao" erstellen soll.
Wenn der Dienst die von Spring erstellte BenutzerdaoImpl -Instanz mit dem Namen "UserDao" verwenden muss, können Sie die Annotation von @Resource (name = "userDao") verwenden, um Spring zu sagen, und Spring kann den erstellten UserDao in den Dienst einführen.
// userDao injizieren, und wenn Sie den angegebenen Benutzer aus der Datenbank entsprechend der Benutzer -ID herausnehmen, müssen Sie @Resource (name = "userDao") privat -basiertes <user> userDao verwenden;
@Resource, @autowired und @Qualifier werden alle verwendet, um Objekte zu injizieren. Unter ihnen kann @Resource in Namen oder Typ injiziert werden, @Autowired kann nur in Typ injiziert werden, und @Qualifier kann nur in den Namen injiziert werden.
Aber sie haben einige subtile Unterschiede:
1. @Resource und @Qualifier werden standardmäßig von ByName automatisch injiziert, und @autowired wird standardmäßig von ByType automatisch injiziert.
2. @Resource hat zwei Eigenschaften, die wichtiger sind, Name und Typ. Wenn das Namensattribut verwendet wird, wird die automatische Injektionsrichtlinie von BYNAME verwendet. Bei der Verwendung des Typattributs wird die automatische Injektionsrichtlinie von Bytype verwendet.
3. @Resources ist eine von JDK bereitgestellte Annotation, während @autowired eine Annotation von Frühling ist.
Sie können @Resource als Chef von @autowired @Qualifier, haha, behandeln. Ich habe was du hast und ich habe was du nicht hast, und ich habe auch ~
@Resource, @autowired und @Qualifier werden alle verwendet, um Objekte zu injizieren. Unter ihnen kann @Resource in Namen oder Typ injiziert werden, @Autowired kann nur in Typ injiziert werden, und @Qualifier kann nur in den Namen injiziert werden.
Aber sie haben einige subtile Unterschiede:
1. @Resource und @Qualifier werden standardmäßig von ByName automatisch injiziert, und @autowired wird standardmäßig von ByType automatisch injiziert.
2. @Resource hat zwei Eigenschaften, die wichtiger sind, Name und Typ. Wenn das Namensattribut verwendet wird, wird die automatische Injektionsrichtlinie von BYNAME verwendet. Bei der Verwendung des Typattributs wird die automatische Injektionsrichtlinie von Bytype verwendet.
3. @Resources ist eine von JDK bereitgestellte Annotation, während @autowired eine Annotation von Frühling ist.
Sie können @Resource als Chef von @autowired @Qualifier, haha, behandeln. Ich habe was du hast und ich habe was du nicht hast, und ich habe auch ~
Die obigen gemeinsamen Federanmerkungen Die Methode zur Verwendung von Anmerkungen zum Konstruktion von IOC -Containern ist der gesamte Inhalt, den ich mit Ihnen geteilt habe. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.