在上一篇进行了一个简单的spring入门,并简单介绍了一下基本的spring核心配置文件的配置项,那这篇文章呢,还是继续聊聊一些其他的配置项的配置。
1. spring-依赖注入依赖注入(Dependency Injection):它是 Spring 框架核心 IOC 的具体实现
在编写程序时,通过控制反转,把对象的创建交给了 Spring,但是代码中不可能出现没有依赖的情况。
IOC 解耦只是降低他们的依赖关系,但不会消除。例如:业务层仍会调用持久层的方法。
那这种业务层和持久层的依赖关系,在使用 Spring 之后,就让 Spring 来维护了。
简单的说,就是坐等框架把持久层对象传入业务层,而不用我们自己去获取。
- 创建 UserService,UserService 内部在调用 UserDao的insert() 方法
public class UserServiceImpl implements UserService {
@Override
public void insert() {
ApplicationContext applicationContext = new
ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao = (UserDao) applicationContext.getBean("userDao");
userDao.insert();
}
}
- 将userService的创建权交给spring
- 从spring容器中获取userService进行操作
ApplicationContext applicationContext = new
ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = (UserService) applicationContext.getBean("userService");
userService.save();
上面的代码进行了userService的编写,并将其配置到了spring配置文件中,达到了基本要求。但是太冗余了,既然我们用的是userService,所以我们可以在spring容器中将userDao设置到userService内部,这种做法就是依赖注入。
1.2 依赖注入实现方式有两种实现方式:
1. 构造方法
2. set方法
1)set方式注入
在UserServiceImpl中添加setUserDao方法
public class UserServiceImpl implements UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void insert() {
userDao.insert();
}
}
配置spring容器调用set方法进行注入
2)构造方法注入
创建有参构造
public class UserServiceImpl implements UserService {
private UserDao userDao;
public UserServiceImpl(UserDao userDao) {
this.userDao = userDao;
}
public UserServiceImpl() {
}
@Override
public void insert() {
ApplicationContext applicationContext = new
ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao = (UserDao) applicationContext.getBean("userDao");
userDao.insert();
}
}
配置spring容器调用构造方法进行注入
1.3 bean依赖注入的数据类型
上面呢,我们主要对对象的引用进行了依赖注入的介绍,除了对象引用,普通数据类型、集合等都可以在容器中进行注入。
接下来将会以set方法注入为例,介绍普通数据类型和集合数据类型的注入。为了操作简便,直接在userDaoImpl中进行操作。
1)普通数据类型的注入
public class UserDaoImpl implements UserDao {
private String addr;
private int age;
public void setAddr(String addr) {
this.addr = addr;
}
public void setAge(int age) {
this.age = age;
}
public void insert() {
System.out.println("insert running....");
}
}
配置文件进行注入
2)集合数据类型的注入
public class UserDaoImpl implements UserDao {
private List list;
private Properties properties;
private Map userMap;
public void setUserMap(Map userMap) {
this.userMap = userMap;
}
public void setProperties(Properties properties) {
this.properties = properties;
}
public void setList(List list) {
this.list = list;
}
public void insert() {
System.out.println("insert running....");
}
}
配置文件进行注入
aaa bbb ccc root root
以上就是关于spring通过set方法注入普通数据类型、引用数据类型及集合数据类型的实例,大家可以试着练习一下,如果有问题可以直接在评论区问,看见肯定回复,互相学习。
2. spring-引入其他配置文件 刚刚我们只写了一点点代码,配置文件已经有点小乱了,在实际开发中,配置文件内容更是繁多,所以,我们可以使用主配置文件加载其他配置文件的方式来进行管理,根据实际的项目分模块或者怎么样进行实际应用。加载其他配置文件只需要使用import标签即可。
对了,前文忘记介绍一个小东西,spring配置文件的命名是无所谓的,只是大家习惯上使用applicationContext.xml,就当作一个约定俗成的东西去用就好了,没必要太多纠结这些无关痛痒的东西。
关于依赖注入的主要概念及应用方式已经介绍完毕了,希望大家可以多多练习,熟悉这种对象管理方式。



