Spring框架支持多种方式来配置依赖注入,其中注解注入是一种简洁和方便的方式。以下是一些常用的注解注入方式:
1. **@Autowired 注解**(自动装配):通过 `@Autowired` 注解,可以将依赖自动注入到类的属性、构造函数或方法中。Spring会根据类型进行匹配,并自动注入匹配的依赖对象。
```java
@Component public class UserService { private UserRepository userRepository; @Autowired public UserService(UserRepository userRepository) { this.userRepository = userRepository; } // ... }
```
2. **@Qualifier 注解(标识符)**:当存在多个相同类型的依赖对象时,可以结合 `@Qualifier` 注解来明确指定要注入的对象名称。
```java
@Component public class UserService { private UserRepository userRepository; @Autowired public UserService(@Qualifier("userRepositoryImpl") UserRepository userRepository) { this.userRepository = userRepository; } // ... }
```
3. **@Resource 注解**(源):类似于 `@Autowired`,`@Resource` 也可以用于依赖注入,但它是按名称匹配的。可以通过 `name` 属性指定要注入的依赖名称。
```java
@Component public class UserService { @Resource(name = "userRepositoryImpl") private UserRepository userRepository; // ... }
```
4. **@Inject 注解**(注入):与 `@Autowired` 类似,`@Inject` 注解也可以用于依赖注入。它是 Java 依赖注入规范(JSR-330)的一部分,但在 Spring 中也得到了支持。
```java
@Component public class UserService { private UserRepository userRepository; @Inject public UserService(UserRepository userRepository) { this.userRepository = userRepository; } // ... }
```
5. **@Value 注解**:用于将属性值从属性文件或环境变量注入到属性中。
```java
@Component public class MyComponent { @Value("${my.property}") private String myProperty; // ... }
```
除了上述注解,还有其他一些注解可以用于特定场景的依赖注入,例如 `@Autowired` 可以与 `@Qualifier` 配合使用来指定依赖,`@Autowired` 也可以用在方法上等。注解注入使得依赖关系的配置更加简洁明了,提高了代码的可读性和可维护性。