接下来本文将重点介绍依赖注入的三种方式
本文使用maven创建工程,pom.xml中依赖设置如下
<dependencies>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-coreartifactId>
<version>5.2.8.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-beansartifactId>
<version>5.2.8.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>5.1.10.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-context-supportartifactId>
<version>5.1.10.RELEASEversion>
dependency>
dependencies>
假设我们要实现一个人吃水果的功能,人是一个对象,水果也是一个对象,人具有姓名等属性,水果也具有品种等属性。
(1)我们在src/main/java/bean下创建水果类Fruit.java
public class Fruit {
private String name;
private String color;
private String taste;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getTaste() {
return taste;
}
public void setTaste(String taste) {
this.taste = taste;
}
public void show(){
System.out.println(name+" "+color+" "+taste);
}
}
Fruit具有品种,颜色和口味三种属性,给予getter 和setter方法,并创建show()方法展示品种、颜色和口味。
(2)在src/main/java/bean下创建人类Person.java
public class Preson {
private String name;
private TestFruit fruit;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public TestFruit getFruit() {
return fruit;
}
public void setFruit(TestFruit fruit) {
this.fruit = fruit;
}
public void eat(){
System.out.println(name);
fruit.show();
}
}
人类具有姓名这个属性,给予getter和setter方法,在eat()函数中输出人的姓名和水果的信息。
(3)在src/main/resources下创建applicationContext.xml配置文件
<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.springframework.org/schema/beans/spring-beans.xsd">
<bean id="fruit" class="bean.Fruit">
<property name="name" value="香蕉">property>
<property name="color" value="黄色">property>
<property name="taste" value="甜">property>
bean>
<bean id="person" class="bean.Preson">
<property name="fruit" ref="fruit">property>
<property name="name" value="小明">property>
bean>
beans>
如果你要把一个引用传递给一个对象,那么你需要使用 标签的 ref 属性,而如果你要直接传递一个值,那么你应该使用 value 属性。
(4)在src/main/java下创建Test测试类进行测试
public class Test {
public static void main(String[] args) {
//读取配置文件
ClassPathXmlApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
Preson pr= (Preson) app.getBean("person");
pr.eat();
}
}
输出结果为
小明
香蕉 黄色 甜
假设我们同样要实现一个人吃水果的功能,人是一个对象,水果也是一个对象,人具有姓名等属性,水果也具有品种等属性。
(1)我们在src/main/java/bean下创建水果类Fruit.java,此时不设置getter和setter方法,而是给予全参的构造函数
public class TestFruit {
private String name;
private String color;
private String taste;
public TestFruit(String name, String color, String taste) {
this.name = name;
this.color = color;
this.taste = taste;
}
public void show(){
System.out.println(name+" "+color+" "+taste);
}
}
给予全参的构造方法并创建show()方法展示品种、颜色和口味。
(2)在src/main/java/bean下创建人类Person.java
public class Preson {
private String name;
private TestFruit fruit;
public Preson(String name, TestFruit fruit) {
this.name = name;
this.fruit = fruit;
}
public void eat(){
System.out.println(name);
fruit.show();
}
}
给予人类全参的构造函数,在eat()函数中输出人的姓名和水果的信息。
(3)在src/main/resources下创建applicationContext.xml配置文件
在属性配置时不使用而使用
<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.springframework.org/schema/beans/spring-beans.xsd">
<bean id="fruit" class="bean.fruit">
<constructor-arg name="name" value="香蕉">constructor-arg>
<constructor-arg name="color" value="黄色">constructor-arg>
<constructor-arg name="taste" value="甜">constructor-arg>
bean>
<bean id="person" class="bean.Preson">
<constructor-arg name="name" value="小明">constructor-arg>
<constructor-arg name="fruit" ref="fruit">constructor-arg>
bean>
beans>
如果你要把一个引用传递给一个对象,那么你需要使用 标签的 ref 属性,而如果你要直接传递一个值,那么你应该使用 value 属性。
(4)在src/main/java下创建Test测试类进行测试
public class Test {
public static void main(String[] args) {
//读取配置文件
ClassPathXmlApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
Preson pr= (Preson) app.getBean("person");
pr.eat();
}
}
输出结果同样为
小明
香蕉 黄色 甜
接口注入模式因为具备侵入性,它要求组件必须与特定的接口相关联,因此并不被看好,实际使用有限,本文不做实例研究,仅了解即可