我们总是在埋头编码中忽略了它们的存在
Spring中有好多帮助我们管理对象的注解,由于没有搞懂各个注解具体的作用,导致被一个需求卡了好久,本篇博客帮你了解注解的作用,用大白话说清他们的作用。
@Bean
@Bean 注解是 Spring Framework 中的一个注解,它用于标记一个方法来定义一个 Bean 对象。Bean 是在 Spring IoC 容器中管理的对象,由容器负责创建、组装和管理。
可以应用于方法、注解类型
@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Bean 注解通常与 @Configuration 注解一起使用,后者用于标记一个类作为配置类,其中包含一个或多个使用 @Bean 注解的方法。
@Bean 注解的作用如下:
声明一个方法作为 Bean 的定义,Spring IoC 容器会调用该方法来创建一个实例。
将方法返回的对象注册为一个 Bean,可以通过名称或类型在应用程序的其他部分进行依赖注入。
可以对 Bean 进行更多的配置,例如设置作用域、初始化方法、销毁方法等。
示例:
java
@Configuration
public class AppConfig {
@Bean
public MyBean myBean() {
return new MyBean();
}
}
以上示例中的 myBean() 方法被 @Bean 注解标记,它将返回一个 MyBean 对象,并将其注册为一个 Bean。
返回的Bean对象
- 默认名称:方法名
- 默认类型:返回类型
但也可以通过指定 name 属性来自定义 Bean 的名称。例如:@Bean(name = “myCustomBean”)。
@Component
@Component 注解是 Spring Framework 中的一个注解,用于标记一个类为一个组件。它是通用的注解,可以应用于任何类,表示该类被视为一个 Spring 管理的组件。
- 默认名称:类名的首字母小写作为 Bean 的名称。例如,对于一个名为 MyComponent 的类:bean的名称为myComponent
- 默认类型:与该注解所修饰类的类型相同
需要注意的是,如果一个类同时实现了多个接口,则默认类型将是这些接口中的第一个接口。如果该类没有实现任何接口,则默认类型仍然是该类的类型。
可以通过 value 或 name 属性自定义名称,并通过该名称在其他组件中引用该 Bean。
@Autowired
只支持按类型匹配
@Autowired
private MyComponent myComponent;
在上述示例中,@Autowired 注解将会根据默认规则(即按照类型)来匹配一个与 MyComponent 类型相符的 Bean,并将其注入到 myComponent 变量中。
如果类型一样的bean很多,就需要进一步按名字区分
可以使用自定义的限定符(Qualifier)来指定要注入的特定 Bean。例如:
@Autowired
@Qualifier("customQualifier")
private MyComponent myComponent;
在上述示例中,@Autowired 注解将会根据类型匹配所有符合条件的 Bean,并通过自定义限定符 “customQualifier” 来选择要注入的特定 Bean。
默认的匹配方式是按照类型进行查找和匹配。
总结起来,使用 @Autowired 注解时,默认的匹配方式是按照类型进行查找和匹配。可以使用默认方式或结合 @Qualifier 注解来实现更精确的匹配。
@Resource
在使用 @Resource 注解时,默认的匹配方式是按照名称进行查找和匹配。具体使用方法如下:
使用默认名称进行依赖注入:
@Resource
private MyComponent myComponent;
在上述示例中,@Resource 注解将会根据默认规则(即按照名称)来匹配一个名为 “myComponent” 的 Bean,并将其注入到 myComponent 变量中。
使用自定义名称进行依赖注入:
如果想要根据自定义的名称来匹配一个特定的 Bean,可以在 @Resource 注解中使用 name 属性来指定名称。例如:
@Resource(name = "customName")
private MyComponent myComponent;
在上述示例中,@Resource 注解将会根据指定的名称 “customName” 来匹配一个对应的 Bean,并将其注入到 myComponent 变量中。
需要注意的是,默认的匹配方式是按照名称进行查找和匹配。如果按照名称无法匹配到对应的 Bean,@Resource 注解会尝试按照类型进行匹配。