Java 在春天,@Bean和Autowired有什么区别?

Java 在春天,@Bean和Autowired有什么区别?,java,spring,dependency-injection,dependencies,Java,Spring,Dependency Injection,Dependencies,在春天,@Bean和@Autowired有什么区别 据我所知,我们可以使用这两种方法来注入依赖项,@Autowired(当接口仅在一个类中实现时)和@Bean(当接口在多个类中实现时,最后一种情况下是@configuration)是必需的 提前感谢简言之,@Bean是生产者,@Autowired是消费者,@Bean annotation让spring知道这个类的实例,它会保留它,@Autowired annotation要求提供请给我我们用@Bean annotation创建的类的实例 更详细的

在春天,@Bean和@Autowired有什么区别

据我所知,我们可以使用这两种方法来注入依赖项,@Autowired(当接口仅在一个类中实现时)和@Bean(当接口在多个类中实现时,最后一种情况下是@configuration)是必需的


提前感谢

简言之,@Bean是生产者,@Autowired是消费者,@Bean annotation让spring知道这个类的实例,它会保留它,@Autowired annotation要求提供请给我我们用@Bean annotation创建的类的实例


更详细的回答

当您使用@Bean时,您负责提供一个Id,并在希望使用getBean()方法使用该特定对象时调用该Id。 Autowired有助于避免调用部分,并在每次需要时返回对象。Spring处理返回适当对象的任务,并帮助减少引用特定bean的额外语法。

当您使用@bean时,您告诉Spring:

这是我希望你放在堆栈中的对象,稍后我会问 你告诉我的

当您使用@Autowired时,您告诉Spring:

现在请给我一个我已经告诉过你要保存在堆栈中的对象(意思是@Bean对象)


Spring提供了一个非常好的关于和API的文档

@BEAN

@Target(value={METHOD,ANNOTATION_TYPE})
@Retention(value=RUNTIME)
@Documented
public @interface Bean
指示一个方法生成一个由Spring管理的bean 容器

On Bean@Target注释确认它可以应用于方法

@自动连线

@Target(value={CONSTRUCTOR,METHOD,PARAMETER,FIELD,ANNOTATION_TYPE})
@Retention(value=RUNTIME)
@Documented
public @interface Autowired
将构造函数、字段、setter方法或config方法标记为由Spring的依赖项注入工具自动连接。这是JSR-330 Inject注释的替代方法

在Autowired@Target上,确认它可以应用于构造函数、方法、参数和字段

也称为依赖项注入(DI)。这是一个对象定义其依赖关系的过程,即,仅通过构造函数参数、工厂方法的参数或在对象实例构造或从工厂方法返回后在对象实例上设置的属性来定义它们的依赖关系,即它们使用的其他对象。然后,容器在创建bean时注入这些依赖项