Spring-DI-XML配置方式
前情提要
DI
- 依赖注入,是控制反转的实现方式;
- 依赖:两个或多个对象之间的关系
public class A {
public B b;
}
- 以上可以看出,A类依赖(需要)B类,当A类实例化对象和运行时,如果需要B类的实例对象,IoC容器会主动创建一个B对象注入到A对象所需要的地方,A对象获得依赖B对象的过程,由主动行为变成了被动行为,即把创建对象交给了IoC容器处理,控制权颠倒过来了,这就是控制反转的由来!
实现方式
public class B {
}
new方式
public class A {
public B b = new B();
}
setter方式
public class A {
public B b;
public void setB (B b) {
this.b= b;
}
}
项目目录
项目代码
配置文件xml
常用名称:applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<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 -->
<bean id="UserService" class="com.zhangzibu.spring.ioc.service.impl.UserServiceDi">
<property name="userDao" ref="UserDao" ></property>
</bean>
<bean id="UserDao" class="com.zhangzibu.spring.ioc.dao.impl.UserDaoImpl"></bean>
</beans>
- <bean id=“UserService” …>:配置bean
- <bean id=“UserDao” …>:配置bean
- <property>:用于进行属性注入,相当于setter方法
- name:bean的属性名,即UserServiceDi实现类里的userDao对象
- ref:另一个bean的id值的引用,即xml中的<bean id=“UserDao” …>
Java代码
dao层
接口
package com.zhangzibu.spring.ioc.dao;
public interface UserDao {
void save(String para);
}
实现类
package com.zhangzibu.spring.ioc.dao.impl;
import com.zhangzibu.spring.ioc.dao.UserDao;
public class UserDaoImpl implements UserDao {
@Override
public void save(String para) {
System.out.println("Save " + para);
}
}
service层
接口
package com.zhangzibu.spring.ioc.service;
public interface UserService {
void save(String para);
}
实现类
New方式
package com.zhangzibu.spring.ioc.service.impl;
import com.zhangzibu.spring.ioc.dao.UserDao;
import com.zhangzibu.spring.ioc.dao.impl.UserDaoImpl;
import com.zhangzibu.spring.ioc.service.UserService;
public class UserServiceNew implements UserService {
private UserDao userDao = new UserDaoImpl();
@Override
public void save(String para) {
this.userDao.save(para);
}
}
DI方式
package com.zhangzibu.spring.ioc.service.impl;
import com.zhangzibu.spring.ioc.dao.UserDao;
import com.zhangzibu.spring.ioc.dao.impl.UserDaoImpl;
import com.zhangzibu.spring.ioc.service.UserService;
public class UserServiceDi implements UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void save(String para) {
this.userDao.save(para);
}
}
测试类
package com.zhangzibu.spring;
import com.zhangzibu.spring.ioc.service.UserService;
import com.zhangzibu.spring.ioc.service.impl.UserServiceDi;
import com.zhangzibu.spring.ioc.service.impl.UserServiceNew;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringTest {
/**
* DI-XML配置
*/
@Test
public void testDi(){
// 1,new方式
UserService userServiceNew = new UserServiceNew();
userServiceNew.save("New 张子布");
// 2,DI方式
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("/applicationContext.xml");
UserService userServiceDi = (UserService) applicationContext.getBean("UserService");
userServiceDi.save("DI 张子布");
}
}
结果
Save New 张子布
Save DI 张子布