Heim  >  Artikel  >  Java  >  Spring Ioc bietet eine detaillierte Einführung in verschiedene Methoden der Abhängigkeitsinjektion

Spring Ioc bietet eine detaillierte Einführung in verschiedene Methoden der Abhängigkeitsinjektion

黄舟
黄舟Original
2017-03-03 10:15:221311Durchsuche

Eine Setter-Methode wird wie folgt in die Konfigurationsdatei

eingefügt:

<bean id="helloAction" class="org.yoo.action.SpringSetterHelloAction">
<!-- setter injection using the nested <ref/> element -->
<property name="helloservice"><ref bean="helloService"/></property>
<!--可以不设置类型 -->
<property name="name" value="yoo"></property>
</bean>

Code in der Aktionsimplementierungsklasse:

private IHelloService helloservice;private String name ;
public void sayHello(){helloservice.sayHello();
System.out.println(this.name);}
public void setHelloservice(IHelloService helloservice) {this.helloservice = helloservice;}
public void setName(String name) {this.name = name;}

Sowohl Name als auch Helloservice werden hier mithilfe der Attributsetter-Methode eingefügt. Legen Sie also eine globale Eigenschaft in der Klasse fest und verfügen Sie über eine Setter-Methode für die Eigenschaft für die Containerinjektion.

2 Konstruktorinjektion

Feder unterstützt auch die Konstruktorinjektion, d. h. Konstruktor- oder Konstruktorinjektion in einigen Materialien.

Sehen Sie sich zuerst die Konfigurationsdatei an:

<!--普通构造器注入-->
<bean id="helloAction" class="org.yoo.action.ConstructorHelloAction">
<!--type 必须为Java.lang.String 因为是按类型匹配的,不是按顺序匹配-->
<constructor-arg type="java.lang.String" value="yoo"/>
<!-- 也可以使用index来匹配-->
<!--<constructor-arg index="1" value="42"/>-->
<constructor-arg><ref bean="helloService"/>
</constructor-arg>
</bean>

Der Code in der Aktionsimplementierungsklasse:

private HelloServiceImpl helloservice;
private String name ;
public SpringConstructorHelloAction(HelloServiceImpl helloservice,String name){this.helloservice = helloservice;
this.name = name ;}
@Overridepublic void sayHello() {helloservice.sayHello();
System.out.println(this.name);}

Legen Sie auch zwei Attribute fest und fügen Sie sie dann ein der Konstrukteur.

Drei statische Fabrikinjektionen

Die Konfigurationsdatei lautet wie folgt:

<!--静态工厂构造注入-->
<!--注意这里的class 带factory-method参数-->
<!--factory-method的值是FactoryHelloAction中的工厂方法名createInstance-->
<bean id="helloAction" class="org.yoo.di.FactoryHelloAction" factory-method="createInstance">
<constructor-arg type="java.lang.String" value="yoo"/>
<constructor-arg>
<ref bean="helloService"/>
</constructor-arg>
</bean>

Aktionsimplementierungsklasse:

private HelloServiceImpl helloservice;
private String name = null;
private SpringFactoryHelloAction(String name ,HelloServiceImpl helloservice){this.helloservice = helloservice ;
this.name = name ;}
public static SpringFactoryHelloAction createInstance(String name ,HelloServiceImpl helloservice) 
{SpringFactoryHelloAction fha = new SpringFactoryHelloAction (name,helloservice);
// some other operationsreturn fha;}
@Overridepublic void sayHello() 
{helloservice.sayHello();
System.out.println(this.name);}

Vier Keine Konfigurationsdatei-Injektion (automatische Injektion)

Die oben genannten drei Methoden müssen alle Konfigurationsdateien schreiben. In Spring2.5 ist auch eine IOC-Implementierung ohne Schreiben von Konfigurationsdateien erforderlich bereitgestellt. Es ist zu beachten, dass keine Konfigurationsdatei auf Abhängigkeiten zwischen Beans verweist und nicht auf Konfigurationsdateien basiert. Dies bedeutet jedoch nicht, dass keine Spring-Konfigurationsdatei vorhanden ist.

Die Konfigurationsdatei lautet wie folgt:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.php.cn/">
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
<bean id="helloService" class="org.yoo.service.HelloServiceImpl">
</bean>
<bean id="helloAction" class="org.yoo.action.AutowiredHelloAction">
</bean>
</beans>

Es ist ersichtlich, dass oben nur die beiden Beans helloService und helloAction festgelegt werden und nicht die Abhängigkeit von helloAction von helloService festgelegt wird.

Zusätzlich ist fe2d0bc69d3ad4c0f730834082f824d9 erforderlich.

Aktionsimplementierungsklasse:

/*
* 属性自动装载
*/
/*
@Autowired
private HelloService helloservice;
@Override
public void sayHello() {
helloservice.sayHello();
。

Der obige Code ist sehr einfach. Fügen Sie dem Attribut die Annotation @Autowired hinzu, und Spring fügt automatisch HelloService ein.

unterstützt auch die Injektion von Konstruktoren und Setter-Methoden wie folgt:

Automatische Injektion von Konstruktoren:

/*
* 还可以使用构造函数设置
*/
@Autowired
public SpringAutowiredHelloAction(HelloServiceImpl helloservice){
this.helloservice = helloservice;
}

Automatische Injektion von Setter-Methoden:

/*
* 也可以使用set方法设置
*/
/*
@Autowired
public void setHelloservice(HelloService helloservice) {
this.helloservice = helloservice;
}

Abschließend wird im Frühjahrsreferenzdokument erwähnt, dass Sie versuchen sollten, die Setter-Methode zu verwenden, wenn Sie keine automatische Injektion verwenden.

Unabhängig davon, ob Sie die automatische Injektion oder die Konfigurationsdateimethode verwenden möchten: Wenn JDK niedriger als 1,5 oder Spring nicht 2,5 ist, können Sie nur die Konfigurationsdateimethode verwenden. Der Rest hängt von der tatsächlichen Projektauswahl ab.

Das Obige ist die detaillierte Einführung verschiedener Methoden der Spring Ioc-Abhängigkeitsinjektion. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!


Stellungnahme:
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