spring-常用三种注入方式
Categories: Spring
spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中。
1.属性注入
属性注入是通过属性的set方法进行注入,需要注入的属性必须有set方法并且命名符合规范
<property name="属性名" value="基本类型的属性值"/>
<property name="属性名" ref="对象的bean的id"/>
1.1注入基本类型
<property name="属性名" value="属性值"/>
实体类
public class Master {
private String name;
private Integer age;
//set、get略
}
配置bean并注入
<bean id="master" class="pojo.Master">
<property name="name" value="张三"/>
<property name="age" value="20"/>
</bean>
1.2注入对象类型
<property name="属性名" ref="对象bean的id"/>
实体类
public class Master {
private Pet pet;
//set、get略
}
配置bean并注入
<bean id="petBean" class="pojo.Cat"></bean>
<bean id="master" class="pojo.Master">
<property name="pet" ref="petBean"/>
</bean>
2构造方法注入
Spring创建对象默认使用无参构造方法
2.1按类型注入
实体类
public class Master {
private Pet pet;
private String name;
private Integer age;
public Master() {
}
public Master(String name, Integer age, Pet pet) {
this.name = name;
this.age = age;
this.pet = pet;
}
}
配置bean
<bean id="petBean" class="pojo.Cat"></bean>
<bean id="master" class="pojo.Master">
<!--注入基本数据类型-->
<constructor-arg type="java.lang.Integer" value="20"/>
<!-- 对于包含特殊字符的属性值,可以在value子节点使用CDATA -->
<constructor-arg type="java.lang.String">
<value><![CDATA[<sansan>]]></value>
</constructor-arg>
<!--ref用于注入对象类型-->
<constructor-arg type="pojo.Pet" ref="petBean"/>
</bean>
2.2按位置注入
实体类同2.1
配置bean
<bean id="petBean" class="pojo.Cat"></bean>
<bean id="master" class="pojo.Master">
<constructor-arg value="张三" index="0" />
<constructor-arg value="20" index="1"/>
<constructor-arg ref="petBean" index="2"/>
</bean>
3.工厂方法注入
通过调用工厂的方法来获取自己需要的对象
3.1静态工厂注入
实体类
public class PetShop {
public static Pet getDog() {
return new Dog();
}
public static Pet getCat() {
return new Cat();
}
public static Pet getPet(String name) {
if (name == "cat") {
return new Cat();
} else {
return new Dog();
}
}
}
配置bean
<!--创建工厂bean,调用不带参数的方法-->
<bean id="catBean" class="pojo.PetShop" factory-method="getCat"/>
<!--创建工厂bean,调用带参数的方法-->
<bean id="dogBean" class="pojo.PetShop" factory-method="getPet">
<constructor-arg value="dog"/>
</bean>
3.2实例工厂注入
实体类同3.1
配置bean
<bean id="shopBean" class="pojo.PetShop"></bean>
<bean id="petBean" factory-bean="shopBean" factory-method="getCat"></bean>