在 Spring 框架中,Bean 的注入方式主要有以下几种,其中一些是自动注入的。以下是详细说明:
1. 构造函数注入 (Constructor Injection)
自动注入 :使用 @Autowired
注解时,Spring 容器会自动调用带有 @Autowired
注解的构造函数,并传入所需的依赖对象。
java
@Component
public class MyService {
private final MyRepository repository;
@Autowired
public MyService(MyRepository repository) {
this.repository = repository;
}
}
2. Setter 注入 (Setter Injection)
自动注入 :使用 @Autowired
注解时,Spring 容器会在创建 Bean 实例后,调用带有 @Autowired
注解的 setter 方法,并传入所需的依赖对象。
java
@Component
public class MyService {
private MyRepository repository;
@Autowired
public void setRepository(MyRepository repository) {
this.repository = repository;
}
}
3. 字段注入 (Field Injection)
自动注入 :使用 @Autowired
注解时,Spring 容器会自动将依赖注入到带有 @Autowired
注解的字段中。
java
@Component
public class MyService {
@Autowired
private MyRepository repository;
}
4. 基于配置文件的注入 (XML-based Configuration)
手动配置:通过 XML 配置文件来定义 Bean 及其依赖关系,不是自动注入。
xml
<bean id="myService" class="com.example.MyService">
<property name="repository" ref="myRepository" />
</bean>
<bean id="myRepository" class="com.example.MyRepository" />
5. 基于 Java 配置的注入 (Java-based Configuration)
手动配置 :使用 @Configuration
和 @Bean
注解来配置 Bean 及其依赖关系,不是自动注入。
java
@Configuration
public class AppConfig {
@Bean
public MyRepository myRepository() {
return new MyRepository();
}
@Bean
public MyService myService(MyRepository repository) {
return new MyService(repository);
}
}
6. @Resource
自动注入 :@Resource
注解是 JSR-250 标准的一部分,Spring 也支持它。它可以用于字段、setter 方法或构造函数,Spring 容器会自动注入依赖。
java
@Component
public class MyService {
@Resource
private MyRepository repository;
}
7. @Inject
自动注入 :@Inject
注解是 JSR-330 标准的一部分,Spring 也支持它。它可以用于字段、setter 方法或构造函数,Spring 容器会自动注入依赖。
java
@Component
public class MyService {
@Inject
private MyRepository repository;
}
总结
自动注入:
构造函数注入(使用 @Autowired
)
Setter 注入(使用 @Autowired
)
字段注入(使用 @Autowired
)
字段、setter 方法或构造函数注入(使用 @Resource
或 @Inject
)
手动配置:
基于配置文件的注入(XML 配置)
基于 Java 配置的注入(@Configuration
和 @Bean
)