转载声明:文章来源https://blog.csdn.net/weixin_45428910/article/details/142441107
在 Spring 框架中,IoC(Inversion of Control,控制反转) 通过依赖注入(Dependency Injection,DI)将对象的创建和管理交由 Spring 容器处理。依赖注入主要有三种方式:
1. 构造器注入(Constructor Injection)
通过类的构造器将依赖对象注入到当前对象中。这种方式在类实例化时进行依赖的注入,适用于需要强制依赖的情况。
示例:
java
1 2 3 4 5 6 7 8 9 10 11 12 | <span style= "background-color: rgb(245, 245, 245);" > public class BookService {</span> private BookDao bookDao; // 通过构造器注入依赖 public BookService(BookDao bookDao) { this .bookDao = bookDao; } public void save() { bookDao.save(); } } |
Spring 配置文件 (applicationContext.xml):
xml
1 2 3 4 5 | <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
1 2 3 4 5 6 7 8 9 10 11 12 | public class BookService { private BookDao bookDao; // 通过 setter 方法注入依赖 public void setBookDao(BookDao bookDao) { this .bookDao = bookDao; } public void save() { bookDao.save(); } } |
Spring 配置文件 (applicationContext.xml):
xml
1 2 3 4 5 | <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 标准的依赖注入注解
示例:
1 2 3 4 5 6 7 8 | public class BookService { @Autowired // 自动注入 BookDao private BookDao bookDao; public void save() { bookDao.save(); } } |
Spring 配置文件 (applicationContext.xml):
xml
1 2 | <context:component-scan base-package= "com.example" /> <bean id= "bookDao" class= "com.example.BookDao" /> |
总结:
构造器注入:强制依赖,通过构造函数传递依赖对象,适合在对象初始化时即需要的依赖。
Setter 方法注入:可选依赖,通过 setter 方法动态注入,适合需要在对象创建后注入依赖的场景。
基于注解的注入:使用注解简化配置,自动扫描和装配依赖,代码简洁,但需要开启注解支持。
这三种方式在实际开发中可以根据需求灵活选择。
帖子还没人回复快来抢沙发