依赖注入:通过xml配置文件为生成的类注入值,具体概念:依赖注入的深度理解
spring提供的几种依赖注入的方式:
- 属性注入
- 构造方法注入
- 工厂方法注入
- 泛型依赖注入
属性注入
直接用实例来说明:
新建Person类,包名为entity,属性有 id,name,age.
package com.java.entity;
public class Person {
private int id;
private String name;
private int age;
public Person() {
super();
// TODO Auto-generated constructor stub
}
public Person(int id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
xml添加:
<bean id="person1" class="com.java.entity.Person">
<property name="id" value="1"></property>
<property name="name" value="小一"></property>
<property name="age" value="11"></property>
</bean>
测试:
package com.java.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.java.entity.Person;
public class iocTest {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
Person person1 = (Person)ac.getBean("person1");
System.out.println(person1);
}
}
运行:
构造方法注入
构造方法注入分3类:
- 通过类型
- 通过索引
- 联合注入
1.通过类型
<bean id="person2" class="com.java.entity.Person">
<constructor-arg type="int" value="2"></constructor-arg>
<constructor-arg type="String" value="小二"></constructor-arg>
<constructor-arg type="int" value="22"></constructor-arg>
</bean>
2.通过索引
注意:标号从0开始
扫描二维码关注公众号,回复: 2332518 查看本文章
<bean id="person3" class="com.java.entity.Person">
<constructor-arg index="0" value="3"></constructor-arg>
<constructor-arg index="1" value="小三"></constructor-arg>
<constructor-arg index="2" value="33"></constructor-arg>
</bean>
3.联合注入
<bean id="person4" class="com.java.entity.Person">
<constructor-arg index="0" type="int" value="4"></constructor-arg>
<constructor-arg index="1" type="String" value="小四"></constructor-arg>
<constructor-arg index="2" type="int" value="44"></constructor-arg>
</bean>
测试:
//构造方法注入
Person person2 = (Person)ac.getBean("person2");
System.out.println(person2);
Person person3 = (Person)ac.getBean("person3");
System.out.println(person3);
Person person4 = (Person)ac.getBean("person4");
System.out.println(person4);
运行:
工厂方式注入
工厂方式注入分为:
- 非静态工厂注入
- 静态工厂注入
非静态工厂注入
新建factory包-->新建PersonFactory类--->新建createPerson方法
PersonFactory类:
package com.java.factory;
import com.java.entity.Person;
public class PersonFactory {
public Person createPerson() {
Person p = new Person();
p.setId(5);
p.setName("小五");
p.setAge(55);
return p;
}
}
xml:
<bean id="personFactory" class="com.java.factory.PersonFactory"></bean>
<bean id="person5" factory-bean="personFactory" factory-method="createPerson"></bean>
静态工厂注入
新建PersonFactory2类--->新建createPerson方法
PersonFactory2:
package com.java.factory;
import com.java.entity.Person;
public class PersonFactory2 {
public static Person createPerson() {
Person p = new Person();
p.setId(6);
p.setName("小六");
p.setAge(66);
return p;
}
}
xml:
<bean id="person6" class="com.java.factory.PersonFactory2" factory-method="createPerson"></bean>
测试:
//工厂方法注入
Person person5 = (Person)ac.getBean("person5");
System.out.println(person5);
Person person6 = (Person)ac.getBean("person6");
System.out.println(person6);
运行:
小结:
- 依赖注入的几种方式,泛型依赖注入后面讲。
- 一头扎进String:Java学习路线