一、依赖注入(Dependency Injection) 依赖注入是指通过外部将依赖关系注入到一个对象中,而不是由对象自己创建或查找依赖的方式。Spring框架中的依赖注入通过IOC容器实现,可以分为以下几种方式:
- 构造函数注入 构造函数注入是指通过对象的构造函数来注入依赖关系。示例如下:
public class UserServiceImpl implements UserService {
private UserDao userDao;
public UserServiceImpl(UserDao userDao) {
this.userDao = userDao;
}
// ...
}
- Setter方法注入 Setter方法注入是指通过对象的Setter方法来注入依赖关系。示例如下:
public class UserServiceImpl implements UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
// ...
}
- 接口注入 接口注入是指通过对象实现的接口来注入依赖关系。示例如下:
public interface UserService {
void setUserDao(UserDao userDao);
}
public class UserServiceImpl implements UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
// ...
}
二、控制反转(Inversion of Control) 控制反转是指将对象的创建和管理交由框架来控制,而不是由对象自己来控制。Spring框架中通过IOC容器来实现控制反转,主要有以下几个关键概念:
-
Bean定义 Bean定义是指描述对象创建和管理的配置信息。在Spring框架中,我们可以通过XML配置文件、注解或者Java配置类来定义Bean。
-
IOC容器 IOC容器是Spring框架中负责对象创建和管理的核心组件。在IOC容器中,我们可以根据Bean定义来创建和获取对象。
下面是一个使用XML配置文件定义和获取Bean的示例:
<!-- 定义Bean -->
<bean id="userService" class="com.example.UserService">
<property name="userDao" ref="userDao"/>
</bean>
<bean id="userDao" class="com.example.UserDaoImpl"/>
<!-- 获取Bean -->
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = (UserService) context.getBean("userService");
- 依赖注入 依赖注入是控制反转的一种具体实现方式,通过IOC容器将依赖关系注入到对象中。在Spring框架中,我们可以通过构造函数注入、Setter方法注入或者接口注入来实现依赖注入。