@Bean和Spring中的Autowired有什么区别?

时间:2018-12-05 04:11:31

标签: java spring dependency-injection dependencies

@Bean和@Autowired在Spring中有什么区别?

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

预先感谢

4 个答案:

答案 0 :(得分:1)

简而言之,@ Bean是生产者,@ Autowired是使用者,@ Bean注释使spring知道该类的实例,并且它为该类保留,@ Autowired注释要求请给我使用@Bean注释创建的类的实例。

更详细的答案find here

答案 1 :(得分:1)

使用@Bean时,您有责任提供一个ID并在希望使用getBean()方法使用该特定对象时调用该ID。 自动装配有助于避免调用部分,并在需要时返回对象。 Spring处理返回适当对象的工作,并有助于减少用于引用特定bean的其他语法。

答案 2 :(得分:1)

当您使用 @Bean 时,您要告诉Spring:

  

这是我希望您放入堆栈中的对象,稍后我会问   关于你的事情

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

  

现在,请给我我已经告诉您的对象以将其保存在堆栈中(表示@Bean对象)

答案 3 :(得分:1)

Spring提供了有关AutowiredBean API的很好的文档

@BEAN

@Target(value={METHOD,ANNOTATION_TYPE})
@Retention(value=RUNTIME)
@Documented
public @interface Bean
  

表示方法产生一个由Spring管理的bean   容器。

在Bean上,@ Target注释确认可以将其应用于Method。

@AUTOWIRED

@Target(value={CONSTRUCTOR,METHOD,PARAMETER,FIELD,ANNOTATION_TYPE})
@Retention(value=RUNTIME)
@Documented
public @interface Autowired
  

将构造函数,字段,setter方法或config方法标记为由Spring的依赖项注入工具自动装配。这是JSR-330注入注释的替代方法。

在自动接线时,@ Target确认可以将其应用于CONSTRUCTOR,METHOD,PARAMETER,FIELD。

  

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