目录
三、DI依赖注入
1、属性的set方法注入
Java类
Spring配置文件
实现
2、属性构造方法注入
3、数组,集合(List,Set,Map),Properties等的注入
四、加载多个配置文件的方法
三、DI依赖注入
DI:
Dependency Injection
,依赖注入,在
Spring
框架负责创建
Bean
对象时,动态的将依赖对象注入到
Bean
组件中!!
1、属性的set方法注入
在Spring框架中,依赖注入(DI)是一种将对象及其依赖关系交给外部容器(如Spring容器)来管理的技术。您已经很好地展示了如何通过属性的set方法来注入值。以下是对您提供的代码和配置文件的详细解释:
Java类
1、OrderServiceImpl
类实现了
OrderService 接口,并包含了三个属性:
orderDao、
msg 和
age。这些属性分别通过
setOrderDao、
setMsg 和
setAge 方法进行注入。
package cn.tx.service;
import cn.tx.dao.OrderDao;
public class OrderServiceImpl implements OrderService {
private OrderDao orderDao;
private String msg;
private int age;
public void setOrderDao(OrderDao orderDao) {
this.orderDao = orderDao;
}
public void setMsg(String msg) {
this.msg = msg;
}
public void setAge(int age) {
this.age = age;
}
@Override
public void saveOrder() {
System.out.println("业务层:保存订单..." + msg + " - " + age);
orderDao.saveOrder();
}
}}
2、OrderDaoImpl
类实现了
OrderDao 接口,并提供了一个
saveOrder 方法。
package cn.tx.dao;
public class OrderDaoImpl implements OrderDao {
@Override
public void saveOrder() {
System.out.println("持久层:保存订单...");
}
}
Spring配置文件
在Spring配置文件中,通过<bean>元素定义了
OrderServiceImpl 和
OrderDaoImpl 的Bean,并使用 元素为
OrderServiceImpl 的属性注入了值。
<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">
<!-- DI:依赖注入 -->
<bean id="od" class="cn.tx.dao.OrderDaoImpl" />
<bean id="os" class="cn.tx.service.OrderServiceImpl">
<property name="orderDao" ref="od" />
<property name="msg" value="你好" />
<property name="age" value="30" />
</bean>
</beans>
- 定义了一个 OrderDaoImpl 的Bean,并将其ID设置为 od。
- 定义了一个 OrderServiceImpl 的Bean,并将其ID设置为 os。
- 使用 ref 属性将 orderDao 属性注入为ID为 od 的 OrderDaoImpl Bean。
- 使用 value 属性将 msg 属性注入为字符串 "你好"。
- 使用 value 属性将 age 属性注入为整数 30。
实现
在应用程序中,可以通过Spring容器来获取
OrderServiceImpl 的Bean,并调用其方法。
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
OrderService os = (OrderService) context.getBean("os");
os.saveOrder();
}
}
在这个示例中,
ClassPathXmlApplicationContext 被用来加载Spring配置文件(假设文件名为
applicationContext.xml),然后通过
getBean 方法获取
OrderServiceImpl 的Bean,并调用其
saveOrder 方法。这将输出:
业务层:保存订单...你好 - 30 持久层:保存订单...
这表明依赖注入已成功完成,并且
OrderServiceImpl 的
orderDao、
msg 和
age 属性已被正确注入。
2、属性构造方法注入
package cn.tx.demo2;
public class Car {
// 名称
private String cname;
// 金额
private Double money;
public Car(String cname, Double money) {
this.cname = cname;
this.money = money;
}
@Overrid
public String toString() {
return "Car{" +
"cname='" + cname + '\'' +
", money=" + money +
'}';
}
}
<bean id="car" class="cn.tx.demo2.Car">
<constructor-arg name="cname" value="大奔" />
<constructor-arg name="money" value="400000" />
</bean>
3、数组,集合(List,Set,Map),Properties等的注入
package cn.tx.demo3;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Properties;
public class CollectionBean {
// 数组
private String [] strs;
public void setStrs(String[] strs) {
this.strs = strs;
}
private List<String> list;
public void setList(List<String> list) {
this.list = list;
}
private Map<String,String> map;
public void setMap(Map<String, String> map) {
this.map = map;
}
private Properties properties;
public void setProperties(Properties properties) {
this.properties = properties;
}
@Override
public String toString() {
return "CollectionBean{" +
"strs=" + Arrays.toString(strs) +
", list=" + list +
", map=" + map +
", properties=" + properties +
'}';
}
}
<!--给集合属性注入值-->
<bean id="collectionBean" class="cn.tx.demo3.CollectionBean">
<property name="strs">
<array>
<value>美美</value>
<value>小凤</value>
</array>
</property>
<property name="list">
<list>
<value>熊大</value>
<value>熊二</value>
</list>
</property>
<property name="map">
<map>
<entry key="aaa" value="老王"/>
<entry key="bbb" value="小王"/>
</map>
</property>
<property name="properties">
<props>
<prop key="username">root</prop>
<prop key="password">123456</prop>
</props>
</property>
</bean>
四、加载多个配置文件的方法
有两种方式
主配置文件中包含其他的配置文件:<import resource="applicationContext2.xml"/>
工厂创建的时候直接加载多个配置文件:
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml","applicationContext2.xml");