@Autowired
@Autowired
是 Spring 框架提供的注解,用于自动装配 bean。Spring 容器会查找一个匹配的 bean 来自动装配到标注了该注解的属性上。如果找到多个类型匹配的 bean,可以通过 @Qualifier
注解来指定具体的 bean 名称。
@Resource
@Resource
是 Java 标准库提供的注解,功能与 @Autowired
类似,也用于自动装配。区别在于 @Resource
允许你通过名称来装配 bean,而 @Autowired
默认按类型装配。此外,@Resource
还支持 Java EE 的特定功能,如查找资源。
@Mapper
@Mapper
是 MyBatis 框架提供的注解,用于标注接口,表示这个接口是一个 MyBatis 的 Mapper 接口。Spring Boot 在启动时会自动扫描这些接口,并为它们创建代理实现类,这样你就可以直接注入这些接口来使用。
@Component
@Component
是一个通用概念的注解,表示一个类是一个 Spring 组件。Spring 会扫描到这些注解,并将这些类作为 bean 加入到 Spring 容器中。其他特定的注解(如 @Service
、@Repository
和 @Controller
)实际上都是 @Component
的特殊形式。
@Service
@Service
用于标注业务逻辑层组件。它是一个特殊类型的 @Component
,用于将业务逻辑层的类标记为 Spring 的一个 Bean。
@Controller
@Controller
用于标注 MVC 控制器。它也是一个特殊类型的 @Component
,用于将 MVC 控制器层的类标记为 Spring 的一个 Bean。通常与视图解析器一起使用,返回视图名称。
@Repository
@Repository是 Spring 框架中的一个核心注解,主要用于标识数据访问层(DAO 层)的类。这个注解告诉 Spring 框架需要为标注的类创建实例,并将其纳入到 Spring 的上下文中进行统一管理。
@Bean
@Bean
注解用于方法上,表示该方法将返回一个对象,这个对象应该注册为 Spring 应用上下文中的 bean。通常与 Java 配置类一起使用,以替代传统的 XML 配置方式。
什么时候用@Autowired什么时候用@Resource
使用@Autowired
的情况:
-
按类型自动装配:当你希望Spring容器根据类型自动装配依赖时,可以使用
@Autowired
。Spring会查找容器中匹配该类型的bean,并将其注入到标注了@Autowired
的属性或构造器参数中。 -
构造器注入:如果你更倾向于使用构造器注入,那么
@Autowired
是一个很好的选择。它可以标注在构造器上,以确保在创建bean时注入所需的依赖。 -
Spring的默认推荐:随着Spring版本的发展,
@Autowired
成为了Spring官方推荐的依赖注入方式。它与Spring的其他特性(如Java配置和条件注解)配合得更好。
使用@Resource
的情况:
-
按名称自动装配:当你需要根据bean的名称进行自动装配时,应该使用
@Resource
。你可以通过name
属性指定bean的名称,Spring会查找并注入与该名称匹配的bean。 -
与Java EE集成:如果你的项目需要与Java EE集成,或者你需要使用Java EE提供的某些特性(如JNDI查找),那么
@Resource
可能是一个更好的选择,因为它来自Java标准库,与Java EE环境兼容。 -
遗留代码或特定需求:如果你的项目中有一些遗留代码,或者你有特定的需求需要使用
@Resource
,那么可以根据实际情况选择使用它。
总结:
- 如果你希望根据类型进行自动装配,并且喜欢使用Spring的推荐方式,那么选择
@Autowired
。 - 如果你需要按名称进行自动装配,或者你的项目与Java EE环境紧密集成,那么选择
@Resource
。
总结:
@Autowired
和@Resource
是自动装配的注解,用于自动注入依赖。@Mapper
是 MyBatis 的注解,用于标注 Mapper 接口。@Component
、@Service
和@Controller
都是 Spring 的组件注解,用于将类标记为 Spring 的 Bean。其中,@Service
专注于业务逻辑层,@Controller
专注于 MVC 控制器层。@Bean
用于方法上,表示该方法将返回一个对象,并注册为 Spring 应用上下文中的 bean。