public interface UserDao {
void InitUserDao();
}
持久层userDaoIml实现
public class UserDaoImpl implements UserDao {
@Override
public void InitUserDao() {
System.out.println("InitUserDao......");
}
}
3.1通过 Set 方法注入
持久层的UserDao使用上面的内容。
业务层UserService接口
public interface UserService {
public void addUser();
}
业务层UserServiceImpl实现
使用set方法进行依赖注入的时候必须给需要注入的对象创建set方法
public class UserServiceImpl implements UserService {
private UserDao userDao;
//使用set方法实现依赖注入
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void addUser() {
userDao.InitUserDao();
System.out.println("UserService........addUser");
}
}
配置文件(配置UserServiceImpl对象)
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">
测试依赖注入(测试UserDao是否注入成功)
public class UserServiceTest {
public static void main(String[] args) {
//启动IOC容器
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//从容器中获取 userService对象 使用getBean("");来获取容器中存在的对象
//在IOC容器中除了可以用bean的id来获取对象还可以使用bean的name属性来获取对象
//(1)可以通过bean的id属性值来获取IOC容器中的对象
UserService userService = (UserService) applicationContext.getBean("userService");
userService.addUser();
//(2)可以通过bean的name属性值来获取IOC容器中的对象
UserService name1 = (UserService) applicationContext.getBean("name1");
System.out.println("调用name1");
name1.addUser();
UserService name2 = (UserService) applicationContext.getBean("name2");
System.out.println("调用name2");
name2.addUser();
UserService name3 = (UserService) applicationContext.getBean("name3");
System.out.println("调用name3");
name3.addUser();
}
}
3.2通过构造方法注入
持久层
使用构造方法进行注入的时候Bean对象必须有一个带参的构造方法
public class UserServiceImpl implements UserService {
private UserDao userDao;
//使用构造方法实现依赖注入
public UserServiceImpl(UserDao userDao){
this.userDao = userDao;
}
@Override
public void addUser() {
userDao.InitUserDao();
System.out.println("UserService........addUser");
}
}
配置文件
使用构造方法进行注入的时候参数对象要使用 constructor-arg 一个constructor-arg注入一个参数
测试构造方法注入
public class UserServiceTest {
public static void main(String[] args) {
//启动IOC容器
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//从容器中获取 userService对象 使用getBean("");来获取容器中存在的对象
UserService userService = (UserService) applicationContext.getBean("userService");
userService.addUser();
}
}
3.3自动注入
自动注入的方式有两种,一种是全局配置自动注入,另一种是局部配置自动注入。 无论全局配置或局部单独配置,都有
5 个值可以选择:no或byName或byType或 constructor或 default
局部自动注入 : 通过 bean 标签中的 autowier 属性配置自动注入。有效范围:仅针对当前 bean 标签生效。
全局自动注入 :通过 beans 标签中的 default-autowire 属性配置自动注入。有效范围:配置文件中的所有 bean 标签都生效。
no:当 autowire 设置为 no 的时候,Spring 就不会进行自动注入。
byName:在 Spring 容器中查找 id 与(需要注入的bean)属性名相同的 bean,并进行注入。需要提供 set 方 法。
byType:在 Spring 容器中查找类型与属性名的类型相同的 bean,并进行注入。需要提供 set 方法。
constructor:仍旧是使用 byName 方式,只不过注入的时候,使用构造方式进行注入。
default:全局配置的 default 相当于 no,局部的 default 表示使用全局配置设置。
局部自动注入
通过
bean
标签中的
autowier
属性配置自动注入。
全局自动注入(default-autowire="byName")
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" default-autowire="byName"> 4 依赖注入的数据类型 依赖注入的数据类型: 1.注入bean对象 2.注入基本数据类型和字符串 3.注入list集合 4.注入Set集合 5.注入Map集合 6.注入properties 业务层userServiceImp实现 所有的Bean对象都需要set方法 public class UserServiceImpl implements UserService { private UserDao userDao; private String name; private int age; private List private Set private Set private Map private Map private Properties properties; //使用构造方法实现依赖注入 public UserServiceImpl(UserDao userDao){ this.userDao = userDao; } //使用set方法实现依赖注入 public void setUserDao(UserDao userDao) { this.userDao = userDao; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public void setList(List this.list = list; } public void setSet(Set this.set = set; } public void setUsers(Set this.users = users; } public void setMap(Map this.map = map; } public void setMapUser(Map this.mapUser = mapUser; } public void setProperties(Properties properties) { this.properties = properties; } @Override public void addUser() { userDao.InitUserDao(); System.out.println("注入基本数据类型"+name+age); System.out.println("注入list"); for (int i = 0 ; i System.out.println(list.get(i)); } System.out.println("UserService........addUser"); } } 配置文件 测试依赖注入的数据类型: /**依赖注入 * 在使用依赖注入时,如果注入的是 Bean 对象, * 那么要求注入的 Bean 对象与被注入的 Bean 对象都需要 Spring IOC 容器来实例化。 * 注入方式: * 1.使用set方式注入:需要为注入的成员变量提供 Set 方法。 * 2.使用构造方法注入:Bean 对象中需要提供有参的构造方法 */ public class DependencyInjectionTest { public static void main(String[] args) { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext_dependency_injection.xml"); UserService userService = (UserService) applicationContext.getBean("userServiceData"); userService.addUser(); } }