转载声明:文章来源https://blog.csdn.net/weixin_45428910/article/details/142441107
在 Spring 框架中,IoC(Inversion of Control,控制反转) 通过依赖注入(Dependency Injection,DI)将对象的创建和管理交由 Spring 容器处理。依赖注入主要有三种方式:
1. 构造器注入(Constructor Injection)
通过类的构造器将依赖对象注入到当前对象中。这种方式在类实例化时进行依赖的注入,适用于需要强制依赖的情况。
示例:
java
public class BookService {
private BookDao bookDao;
// 通过构造器注入依赖
public BookService(BookDao bookDao) {
this.bookDao = bookDao;
}
public void save() {
bookDao.save();
}
}
Spring 配置文件 (applicationContext.xml):
xml
<bean id="bookDao" class="com.example.BookDao"/>
<bean id="bookService" class="com.example.BookService">
<!-- 通过构造器注入依赖 -->
<constructor-arg ref="bookDao"/>
</bean>
2. Setter 方法注入(Setter Injection)
通过类中的 setter 方法将依赖对象注入。它允许在对象创建后动态注入依赖,适合不需要强制依赖的情况,或者依赖可能变化的场景。
示例:
java
public class BookService {
private BookDao bookDao;
// 通过 setter 方法注入依赖
public void setBookDao(BookDao bookDao) {
this.bookDao = bookDao;
}
public void save() {
bookDao.save();
}
}
Spring 配置文件 (applicationContext.xml):
xml
<bean id="bookDao" class="com.example.BookDao"/>
<bean id="bookService" class="com.example.BookService">
<!-- 通过 setter 方法注入依赖 -->
<property name="bookDao" ref="bookDao"/>
</bean>
3. 基于注解的注入(Annotation-based Injection)
Spring 还支持通过注解来简化依赖注入。常用的注解有:
@Autowired:自动装配依赖
@Qualifier:用于配合 @Autowired,指定特定的 Bean
@Resource:基于名称或类型注入 Bean
@Inject:Java 标准的依赖注入注解
示例:
public class BookService {
@Autowired // 自动注入 BookDao
private BookDao bookDao;
public void save() {
bookDao.save();
}
}
Spring 配置文件 (applicationContext.xml):
xml
<context:component-scan base-package="com.example"/>
<bean id="bookDao" class="com.example.BookDao"/>
总结:
构造器注入:强制依赖,通过构造函数传递依赖对象,适合在对象初始化时即需要的依赖。
Setter 方法注入:可选依赖,通过 setter 方法动态注入,适合需要在对象创建后注入依赖的场景。
基于注解的注入:使用注解简化配置,自动扫描和装配依赖,代码简洁,但需要开启注解支持。
这三种方式在实际开发中可以根据需求灵活选择。
帖子还没人回复快来抢沙发