一、@Autowired 注解用于自动注入 Bean 依赖关系。

1、在类的成员变量上使用 @Autowired 注解,用于自动注入 Bean。如果在成员变量上使用了 @Qualifier 注解,则会指定要注入的 Bean 名称。

@Autowired
@Qualifier("myBean")
private MyBean myBean;

2、在构造函数上使用 @Autowired 注解,用于自动注入构造函数参数所需要的 Bean。如果构造函数只有一个参数,则可以省略 @Autowired 注解。

@Autowired
public MyService(MyDao myDao) {
    this.myDao = myDao;
}

3、在方法上使用 @Autowired 注解,用于自动注入方法参数所需要的 Bean。如果方法只有一个参数,则可以省略 @Autowired 注解。

@Autowired
public void setMyBean(MyBean myBean) {
    this.myBean = myBean;
}

4、在数组或集合类型的属性上使用 @Autowired 注解,用于自动注入所有符合类型要求的 Bean。

@Autowired
private List<MyBean> myBeans;

需要注意的是,@Autowired 注解是按照类型进行注入的,如果有多个实现类型,会出现歧义,这时需要使用 @Qualifier 注解或者通过构造函数或者 @Resource 注解指定要注入的 Bean 名称。此外,从 Spring 4.3 开始,@Autowired 注解支持使用 Optional 类型作为参数,表示该参数可选,如果不存在符合要求的 Bean,则该参数的值为 null。

二、举例说明@Autowired 使用在构造函数上注入List类型参数

1、在 Spring 中,可以使用 @Autowired 注解在构造函数上注入 List 类型的参数。下面是一个示例:

@Service
public class MyService {
    
    private final List<MyRepository> repositories;

    @Autowired
    public MyService(List<MyRepository> repositories) {
        this.repositories = repositories;
    }

    // ...
}

在上面的示例中,MyService 类中的构造函数使用 @Autowired 注解注入了一个 List<MyRepository> 类型的参数。这意味着 Spring 会自动扫描项目中所有 MyRepository 的实现类,并将它们的实例注入到这个 List 中

如果项目中有多个 MyRepository 的实现类,那么 Spring 会将它们全部注入到这个 List 中。如果项目中没有任何 MyRepository 的实现类,那么 Spring 会在启动时报错。因此,在使用 @Autowired 注解时,我们需要确保注入的参数至少有一个实现类。

三、举例说明@Autowired 使用在构造函数上注入Map类型参数

1、在 Spring 中,可以使用 @Autowired 注解在构造函数上注入 Map 类型的参数。下面是一个示例:

@Service
public class MyService {
    
    private final Map<String, MyRepository> repositories;

    @Autowired
    public MyService(Map<String, MyRepository> repositories) {
        this.repositories = repositories;
    }

    // ...
}

在上面的示例中,MyService 类中的构造函数使用 @Autowired 注解注入了一个 Map<String, MyRepository> 类型的参数。这意味着 Spring 会自动扫描项目中所有 MyRepository 的实现类,并将它们的实例注入到这个 Map 中,以实现按照名称进行注入的功能。

具体来说,Map 中的键是 @Component 注解中的 value 属性或者 @Qualifier 注解中的参数名,而值则是对应的实例。如果项目中有多个 MyRepository 的实现类,那么 Spring 会将它们全部注入到这个 Map 中。如果项目中没有任何 MyRepository 的实现类,那么 Spring 会在启动时报错。因此,在使用 @Autowired 注解时,我们需要确保注入的参数至少有一个实现类。


无知
0 声望1 粉丝

思考中