一、xml自动装配
java代码:
public class Person {
private Cat cat;
public Person(Cat cat) {
this.cat = cat;
}
public void setCat(Cat cat) {
this.cat = cat;
}
}
public class Cat {
public Cat() {
//nothing...
}
}
xml配置:
①byName
<bean id="person" class="com.fly.spring_demo.Person" autowire="byName"></bean>
<bean id="cat" class="com.fly.spring_demo.Cat"></bean>
②byType:
<bean id="person" class="com.fly.spring_demo.Person" autowire="byType"></bean>
<bean id="helloKitty" class="com.fly.spring_demo.Cat"></bean>
③construct:
<bean id="person" class="com.fly.spring_demo.Person" autowire="constructor"></bean>
<bean id="cat" class="com.fly.spring_demo.Cat"></bean>
④no:
<bean id="person" class="com.fly.spring_demo.Person" autowire="no">
<property name="cat" ref="cat"/>
</bean>
<bean id="cat" class="com.fly.spring_demo.Cat"></bean>
这种方式缺点比较多,一般不用:
①如果一个属性用了这种方式,其他属性也得用这种方式;
②只能用同一种方式:ByName或者ByType;
③你甚至不知道哪个bean中注入了哪个bean中,维护代价太高。
二、setter注入
<!-- 2setter注入 -->
<bean id="person" class="com.fly.spring_demo.Person">
<property name="cat" ref="cat"/>
</bean>
<bean id="cat" class="com.fly.spring_demo.Cat"></bean>
三、构造器注入
注:常量值、string的按类型注入,按索引注入,比较简单吗,这里就不说了。
<!-- 3.构造器注入 -->
<bean id="person" class="com.fly.spring_demo.Person">
<constructor-arg name="cat" ref="cat"></constructor-arg>
</bean>
<bean id="cat" class="com.fly.spring_demo.Cat"></bean>
四、工厂方法注入(静态工厂和实例工厂)
1、静态工厂
public class CatFactory {
//静态工厂方法
public static Cat getCatInstance() {
return new Cat();
}
}
<bean id="person" class="com.fly.spring_demo.Person">
<property name="cat" ref="cat"/>
</bean>
<bean id="cat" class="com.fly.spring_demo.CatFactory" factory-method="getCatInstance"></bean>
2、实例工厂方法
public class CatFactory {
//实例工厂方法
public Cat getCatInstance() {
return new Cat();
}
}
<bean id="person" class="com.fly.spring_demo.Person">
<property name="cat" ref="cat"/>
</bean>
<bean id="catFactory" class="com.fly.spring_demo.CatFactory"></bean>
<bean id="cat" factory-bean="catFactory" factory-method="getCatInstance"></bean>