📜  Spring @Autowired 注解(1)

📅  最后修改于: 2023-12-03 15:20:12.290000             🧑  作者: Mango

Spring @Autowired 注解

在Spring框架中,通常使用@Autowired注解进行依赖注入。它简化了Java代码中的依赖注入过程,不需要手动创建和维护各种Bean对象之间的依赖关系,而是由Spring框架自动处理依赖关系。

什么是@Autowired注解?

@Autowired注解是一种自动装配的方式,可以自动为类的成员变量、方法参数或构造函数注入依赖关系对象。当使用@Autowired注解时,Spring框架会首先查找需要注入的对象,如果找到多个匹配的Bean,则会根据特定的规则选择其中一个与之匹配的Bean。

使用@Autowired注解

在使用@Autowired注解时,需要满足以下条件:

  • 在类中声明要注入的成员变量或方法参数
  • 在Spring容器中声明要注入的Bean

在类中声明要注入的成员变量或方法参数,只需要在变量或参数前加上@Autowired注解即可。例如:

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;

    //省略其他代码
}

在上面的代码中,使用@Autowired注解为UserServiceImpl类的成员变量userDao注入依赖关系对象。

接下来需要在Spring容器中声明要注入的Bean。这可以通过在XML配置文件中添加Bean的方式完成,例如:

<beans>
    <bean id="userDao" class="com.example.dao.UserDaoImpl"></bean>
    <bean id="userService" class="com.example.service.UserServiceImpl"></bean>
</beans>

或者可以通过JavaConfig的方式定义Bean:

@Configuration
public class AppConfig {

    @Bean
    public UserDao userDao() {
        return new UserDaoImpl();
    }

    @Bean
    public UserService userService() {
        return new UserServiceImpl();
    }
}

这样就完成了@Autowired注解的基本使用。

@Autowired注解的常用属性

@Autowired注解还提供了一些属性,可以对自动装配进行更精细的控制。

required属性

required属性的值为boolean类型,默认为true。当required属性为true时, 如果找不到匹配的Bean,则会抛出异常。当required属性为false时,如果找不到匹配的Bean,则不会注入对象。

@Service
public class UserServiceImpl implements UserService {

    @Autowired(required = false)
    private UserDao userDao;

    //省略其他代码
}

在上述代码中,如果无法找到匹配的UserDao对象,也不会抛出异常。

@Qualifier注解

当某个类型的Bean在容器中存在多个实例时,可以使用@Qualifier注解指定要注入的Bean的名称,例如:

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    @Qualifier("userDao1")
    private UserDao userDao;

    //省略其他代码
}

在上述代码中,@Qualifier("userDao1")指定了要注入的Bean的名称为userDao1。

@Primary注解

在存在多个类型相同的Bean时,可以使用@Primary注解指定其中一个Bean为首选Bean。当找到多个匹配的Bean时,则选择拥有@Primary注解的Bean。例如:

@Service
@Primary
public class UserDaoImpl implements UserDao {
    //省略其他代码
}

在上述代码中,使用@Primary注解标记了UserDaoImpl为首选Bean,当存在多个UserDaoImpl时,会优先选择被标记的这个Bean。

总结

使用@Autowired注解可以实现自动装配,减少手动配置Spring Bean之间的依赖关系的麻烦,提高开发效率。在使用@Autowired注解时,需要注意哪些情况下需要指定Bean的名称,使用@Qualifier注解;哪些情况下需要指定首选Bean,使用@Primary注解。对于这些属性的合理使用可以更好的控制依赖注入过程中Bean的选择。