在注解开发中,依赖注入是一种常见的实现方式。通过使用注解,我们可以将各个组件之间的依赖关系进行解耦,即不再需要手动管理组件之间的依赖关系,而是由 Spring 容器自动完成。
一、引用类型的依赖注入
1、@Autowired
@Autowired 注解用于自动装配 Bean。通过在属性、构造函数或方法上使用 @Autowired 注解,Spring 容器会自动将对应的 Bean 实例注入到目标对象中。
例如,我们可以在定义一个 Service 类时,使用 @Autowired 注解注入一个 DAO 对象:
@Service
public class UserService {
@Autowired
private UserDao userDao;
// ...
}
在这个例子中,Spring 会将名为 "userDao" 的 Bean 自动装配到 UserService 的 userDao 属性中。
2、@Qualifier
当存在多个实现同一个接口的 Bean 实例时,@Qualifier 可以指定具体要装配的 Bean 实例。其用法是在 @Autowired 注解后面使用 @Qualifier 注解,并指定具体的 Bean 名称。
例如,假设我们有两个实现了 UserDao 接口的 Bean,其名称分别为 userDaoA 和 userDaoB,我们可以这样指定装配 userDaoA:
@Service
public class UserService {
@Autowired
@Qualifier("userDaoA")
private UserDao userDao;
// ...
}
3、@Resource
@Resource 注解也可以用于装配 Bean。与 @Autowired 注解不同的是,@Resource 注解可以指定具体要装配的 Bean 的名称或属性。
例如,我们可以这样使用 @Resource 指定一个名为 "userService" 的 Bean:
@Service
public class MyService {
@Resource(name = "userService")
private UserService userService;
// ...
}
在这个例子中,Spring 会将名为 "userService" 的 Bean 装配到 MyService 的 userService 属性中。
二、基本数据类型的依赖注入
使用 @Value 注解可以将指定的值注入到一个组件的属性中。对于基本数据类型,可以直接将其作为注解参数传递:
@Component
public class MyComponent {
@Value(123)
private int myInt;
@Value("123.45")
private double myDouble;
@Value("true")
private boolean myBoolean;
// ...
}
三、注入配置文件的方法
在注解开发中,依赖注入配置文件是一种常见的实现方式。通过使用配置文件,我们可以将一些需要配置的参数、常量或资源统一保存到文件中,然后通过注解的方式将这些配置项注入到组件中,从而方便地对组件进行初始化或者赋值。
1.定义配置文件
常见的配置文件格式包括 .properties 和 .xml 两种。其中,.properties 是一种简单的键值对格式,适合用于保存一些基本类型或者字符串等简单类型的配置项,例如:
db.url=jdbc:mysql://localhost:3306/mydb
db.user=root
db.password=123456
而 .xml 则是一种更加复杂、结构化的格式,适合用于保存一些对象或者复杂类型的配置项。例如:
<database>
<url>jdbc:mysql://localhost:3306/mydb</url>
<user>root</user>
<password>123456</password>
</database>
2.在注解开发中依赖注入配置文件
在注解开发中,我们可以使用 @Value 注解将配置文件中的参数或常量注入到组件属性中。例如:
@Component
public class MyComponent {
@Value("${db.url}")
private String dbUrl;
@Value("${db.user}")
private String dbUser;
@Value("${db.password}")
private String dbPassword;
// ...
}
在这个示例中,我们定义了一个 MyComponent 组件,并使用 @Value 注解将三个配置项(分别为数据库连接 URL、用户名和密码)注入到对应的属性中。其中,${} 中的内容是需要注入的配置项的名称,名称与配置文件中的键名相对应。
需要注意的是,使用 @Value 注解时需要添加 @PropertySource 注解指定要读取的配置文件。例如:
@Configuration
@PropertySource("classpath:config.properties")
public class AppConfig {
// ...
}
定义了一个 AppConfig 配置类,并使用 @PropertySource 注解指定了要读取的配置文件名为 "config.properties"。在 Spring 加载该配置类时,会自动读取该配置文件并将其中的配置项存储到容器中,之后通过 @Value 注解就可以注入这些配置项了。