Heim > Java > javaLernprogramm > Hauptteil

Feder-IOC-Container

大家讲道理
Freigeben: 2017-08-19 13:46:19
Original
1456 Leute haben es durchsucht

1. Einführung in das Spring Framework

Was ist Spring?

Spring ist ein Open-Source-Framework für die leichte Anwendungsentwicklung um die Anwendungsentwicklung auf Unternehmensebene zu vereinfachen und Eingriffe zu reduzieren

Die von Spring bereitgestellten IOC- und AOP-Anwendungen können die Kopplung von Komponenten, also die Entkopplung, minimieren, was zukünftige Wartung und Upgrades des Systems erleichtert

Spring bietet eine Gesamtlösung für das System. Entwickler können außerdem Anwendungen mit Frameworks und Technologien von Drittanbietern integrieren und frei wählen, welche Technologie sie für die Entwicklung verwenden möchten

2. Container- und Bean-Verwaltung

Einführung in Spring Container

Im Spring werden alle Java-Klassen und JavaBeans als Beans verwaltet und angewendet durch den Container

Der Spring-Container implementiert IOC- und AOP-Mechanismen, die die Erstellung von Bean-Objekten und die Entkopplung zwischen Bean-Objekten vereinfachen können

Der Spring-Container verfügt über BeanFactory- und ApplicationContext-Typen

(Was ist JavaBean: ein einfaches und standardisiertes Java-Objekt; wann Sie Spring verwenden müssen: Sie können es verwenden, wenn Sie JavaBean-Objekte verwalten müssen.

Instanziierung von Spring-Containern

ApplicationContext erbt von der BeanFactory-Schnittstelle und verfügt über mehr Methoden auf Unternehmensebene. Es wird empfohlen, diesen Typ wie folgt zu verwenden:

//Laden Sie die Instanziierung der Konfigurationsdatei im Dateisystem

String conf = "C:applicationContext.xml";

ApplicationContext ac = new FileSystemXmlApplicationContext(conf);

/ / Laden Sie die Konfigurationsdatei unter der Projektklassenpfad

String conf = "applicationContext.xml";

ApplicationContext ac = new ClassPathXmlApplicationContext(conf);

Spring Die Verwendung von Containern

BeanFactory und ApplicationContext sind im Wesentlichen nur eine High-Level-Factory-Schnittstelle, die Bean-Definitionen und gegenseitige Abhängigkeiten verwaltet. Über BeanFactory und ApplicationContext können wir auf die Bean-Definition zugreifen

Fügen Sie zunächst die Bean-Definition in der Container-Konfigurationsdatei applicationContext.xml hinzu

Nachdem Sie die Containerobjekte BeanFactory und ApplicationContext erstellt haben, rufen Sie die Methode getBean() auf, um die Bean-Instanz [getBean("identifier")] zu erhalten

Bean-Instanziierung

Es gibt drei Möglichkeiten für den Spring-Container, Bean-Objekte zu erstellen:

-Verwenden Sie den Konstruktor, um zu instanziieren

(Das ID- oder Namensattribut wird verwendet, um den Bean-Namen anzugeben und um das Bean-Objekt von Spring zu finden. Die Klasse wird verwendet, um den Bean-Typ anzugeben und ruft automatisch den zu erstellenden parameterlosen Konstruktor auf das Objekt)

-Verwenden Sie die statische Factory-Methode zum Instanziieren

(Das id-Attribut wird zur Angabe des Bean-Namens verwendet, das class-Attribut wird zur Angabe des Factory-Typs und das Das Methodenattribut wird verwendet, um die Methode zum Erstellen von Bean-Objekten in der Factory anzugeben. Methoden, die mit statischen Methoden dekoriert werden müssen)

-Verwenden Sie die Instanz-Factory-Methode, um zu instanziieren

(id wird verwendet, um den Bean-Namen anzugeben, das Factory-Bean-Attribut wird verwendet, um das Factory-Bean-Objekt anzugeben, und das Factory-Method-Attribut ist wird verwendet, um die Methode zum Erstellen des Bean-Objekts in der Fabrik anzugeben.)

(Teilen Sie Spring die Regeln für die Objekterstellung mit. Spring hilft Ihnen beim Erstellen von Objekten; basierend auf Konfiguration und Standardregeln, wodurch das Schreiben von Code reduziert wird)

Ban-Benennung

Bean-Name:

Im Spring-Container muss jede Bean einen Namen haben ( d. h. Bezeichner). Der Name kann mit dem id- oder name-Attribut des -Elements angegeben werden. Das id-Attribut ist kleiner als der name. Strict, Eindeutigkeit ist erforderlich, Sonderzeichen wie „/“ sind nicht zulässig

Bean-Alias ​​:

ist ein definiertes Bean. Um eine weitere Namensreferenz hinzuzufügen, können Sie

Bean-Bereich:

Spring-Container in Beim Instanziieren einer Bean , Sie können Bean-Objekte mit den folgenden Bereichen

1 Singleton-Bereich


in jeder Spring IOC-Bean-Definition erstellen Der Container entspricht einer Objektinstanz.
konfiguriert die Instanz:
Oder



2 🎜>

Eine Bean-Definition entspricht mehreren Objektinstanzen

Konfigurationsinstanz:

oder




3. Anfrage Anfrage bedeutet, dass für jede HTTP-Anfrage eine neue Bean generiert wird und die Bean nur innerhalb der aktuellen HTTP-Anfrage gültig ist
Wann Bei Verwendung von Anfrage, Sitzung und globaler Sitzung müssen Sie zunächst die folgende Konfiguration im Web vornehmen. Fügen Sie einfach den folgenden ContextListener zur XML-Deklarationsdatei web.xml der Webanwendung hinzu:
... org.springframework.web.context.request.RequestContextListener... ein Webcontainer vor Servlet2.4 ist, müssen Sie eine Implementierung von javax.servlet.Filter verwenden:
.. requestContextFilterorg.springframework.web.filter.RequestContextFilter requestContextFilter pattern>/*...< ;/web-app>

Dann können Sie den Geltungsbereich des Beans konfigurieren:





4. Sitzung



Die Sitzung Geltungsbereich bedeutet, dass für jede HTTP-Anfrage eine neue Bean generiert wird und die Bean nur während der aktuellen HTTP-Anfrage generiert wird. Gültig innerhalb der Sitzung (in einer HTTPSession entspricht eine Bean-Definition einer Instanz, nur in der Webumgebung).
Konfigurationsinstanz: Die Voraussetzung für die Anforderungskonfigurationsinstanz ist dieselbe. Nachdem Sie die Web-Startup-Datei konfiguriert haben, können Sie sie wie folgt konfigurieren:

5. globale Sitzung



In einer globalen HTTP-Sitzung entspricht eine Bean-Definition zu einer Instanz, die nur in Portlet-basierten Webanwendungen sinnvoll ist. Die Portlet-Spezifikation definiert das Konzept der globalen Sitzung
Konfigurationsinstanz: und Die Prämisse der Anforderungskonfigurationsinstanz ist dieselbe , können Sie es wie folgt konfigurieren: (Der obige Bean-Bereich kann über das durch definierte Bereichsattribut angegeben werden)


Beans Lebenszyklus-Rückruf

Geben Sie die Initialisierungs-Rückrufmethode an:

Gibt die Zerstörungsrückrufmethode an, die nur für Beans im Singleton-Modus gilt:

Das Attribut „default-init-method“ im Element der obersten Ebene kann die Initialisierungsrückrufmethode für alle angeben

< Beans default- init-method = "init">

 

Das Attribut default-destroy-method im obersten Element kann die Zerstörungsrückrufmethode für alle angeben

 

Verzögerte Bean-Instanziierung

Das in ApplicationContext implementierte Standardverhalten besteht darin, alle Singleton-Beans beim Start im Voraus zu instanziieren

Wenn Sie nicht zulassen möchten, dass ein Singleton-Bean bei der Initialisierung des ApplicationContext im Voraus instanziiert wird, können Sie das Attribut lazy-init = „true“ des -Elements verwenden, um

Eine lazy-initialisierte Bean wird bei der ersten Verwendung instanziiert

im -Element der obersten Ebene. Das Attribut „default-lazy-init“ im Container kann Lazy-Instanziierungsfunktionen für alle angeben und geben Sie Bean-Abhängigkeiten an

Wenn eine Bean eine Abhängigkeit von einer anderen Bean hat, können Sie das depend-on-Attribut des -Elements verwenden, um

Wenn eine Bean von mehreren abhängig ist. Wenn eine Bean eine Abhängigkeitsbeziehung aufweist, kann das Attribut „dependents-on“ mehrere Bean-Namen angeben, die durch Kommas getrennt sind

3. Container-IOC-Anwendung

IOC-Konzept

Der vollständige Name von IOC ist Inversion of Control, übersetzt als Umkehrung der Kontrolle;

IOC bezieht sich auf die Umkehrung der Erfassungsmethode von Objekte im Programm, von der ursprünglichen neuen Methode bis zur Erstellung und Injektion durch ein Drittanbieter-Framework. Frameworks von Drittanbietern geben im Allgemeinen durch Konfiguration an, welche spezifische Implementierung eingefügt werden soll, wodurch die Kopplung zwischen Objekten verringert wird

IOC kann in zwei Typen unterteilt werden: Abhängigkeitsinjektion DI und Abhängigkeitssuche gemäß unterschiedlichen Implementierungsmethoden

Spring Container verwendet DI, um die IOC-Steuerung zu implementieren. IOC ist die Grundlage und der Kern des Spring Containers

DI-Konzept

Der vollständige Name von DI ist Dependency Injection übersetzt Abhängigkeiten einfügen

Das Grundprinzip von DI besteht darin, Objekte, die zusammenarbeiten und Beziehungen haben, über Konstruktorparameter oder Methodenparameter zu verbinden. Daher besteht die Aufgabe des Containers darin, diese Abhängigkeiten beim Erstellen einer Bean einzufügen

IOC ist eine Idee, und DI ist der wichtigste technische Weg, IOC zu realisieren

DI verfügt über zwei Hauptinjektionsmethoden, nämlich Setter-Injektion und Konstruktor-Injektion

Setter-Injektion

Nachdem Sie eine Bean durch Aufrufen des Parameterlosen Konstruktors oder der Parameterlosen statischen Factory-Methode und durch Aufrufen der Setter-Methode der Bean instanziiert haben, können Sie eine Setter-Injektion erreichen

öffentliche Klasse JDBCDataSource{ privater String-Treiber;

public void setDriver(String-Treiber){

try{

Klasse .forName(Treiber );

 this.driver = drivers;

 }catch(Exception e){

  throw new RuntimeException(e);

}

    }

    //Anderer Code....

           

Konfigurieren Sie in der Container-XML-Konfiguration die Injektionsparameter

 

 

 

 

Konstruktorinjektion

Konstruktorbasierte Injektion erfolgt durch Aufrufen eines Konstruktors mit Parametern. Wenn der Bean wird instanziiert, der Container führt den entsprechenden Konstruktor gemäß dem Parametertyp aus

public class OracleUserDAO implementiert UserDAO{

private JDBCDataSource dataSource;

Public OracleUserDAO(JDBCDataSource dataSource){

This.dataSource = dataSource;

}

//Anderer Code....

}

Injection durch Konstruktorparameterindex angeben

 

 

 

 

 < ;constructor-arg index = "0" ref = "dataSource"/>

Autowiring

Spring IOC Der Container kann die Zuordnung automatisch zusammenstellen (autowire). zwischen kooperierenden Beans kann Autowire für eine einzelne Bean festgelegt werden.

In der XML-Konfigurationsdatei können Sie das Autowire-Attribut im ; bean/>-Element zum Angeben der automatischen Assemblerregeln. Es gibt fünf Arten von Werten:

value ;

Der Attributwert ist byName:

Autowire basierend auf dem Eigenschaftsnamen. Diese Option überprüft den Container und findet anhand des Namens eine Bean, die genau mit der Eigenschaft übereinstimmt. und verknüpfen Sie es automatisch mit der Eigenschaft;

Der Attributwert ist byType:

Wenn sich im Container eine Bean mit demselben Typ wie das angegebene Attribut befindet, wird sie automatisch mit dem zusammengestellt attribute;

Der Attributwert ist Konstruktor:

ähnelt der byType-Methode, außer dass er auf den Konstruktorparameter angewendet wird.

Der Attributwert ist autodetect:

Bestimmen Sie, ob der Konstruktor oder die byType-Methode für die automatische Erkennung durch die Bean-Klassen-Assembly verwendet werden soll. Wenn ein Standardkonstruktor gefunden wird, wird die byType-Methode Konfigurationsbeispiel verwendet:

 

Mit der obigen Konfiguration, Wenn es eine Setter-Methode gibt, die den UserDao-Typ in UserService empfängt, kann Spring das userDAO-Objekt automatisch darin einfügen

Das obige ist der detaillierte Inhalt vonFeder-IOC-Container. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!