java 如何从Guice迁移到Spring?

0qx6xfy6  于 2023-02-11  发布在  Java
关注(0)|答案(1)|浏览(204)

要迁移到不同代码库(使用Spring)的代码:

@Named
public class A {
   ....
}

public class B {
   private final A a;

   @Inject
   public B (A a) {
     ...
   }
   
   ....
}

我知道两种方法。都行吗?有什么区别吗?
备选办法1:

@Component (can I label this as a @Bean also?)
public class A {
   ....
}

public class B {
   @Autowired
   private final A a;

}

备选方案二:

public class A {
  ...
}

public class B {
   private final A a;

   public B (A a) {
     ...
   }
}

@Configuration
public class BeanConfig {
   @Bean
   public A a() {
      new A();
   }
}

对于选项2,我是否需要执行其他操作,如@Autowiring类B中的BeanConfig
我刚刚开始学习DI框架,这对我来说有点困惑。

ajsxfq5m

ajsxfq5m1#

** @Component **

@Component是任何Spring托管组件的通用原型。您可以在整个应用程序中使用@Component来将bean标记为Spring的托管组件。@Service@Repository是@Component的特例。它们在技术上是相同的,但是您可以将它们用于不同的目的。

@豆子

可以在配置类中使用@Bean注解声明Bean。配置类可以包含使用@Bean注解的Bean定义方法
以下差异可能有助于您评估@Component@Bean之间的选择:

  • @Component用于使用类路径扫描自动检测和自动配置bean。@Bean用于显式声明单个bean,而不是让Spring自动声明。
  • @Component是类级注解,而@Bean是方法级注解,并且方法的名称用作bean名称。
  • @Component不需要与@Configuration注解一起使用,因为@Bean注解必须在用@Configuration注解的类中使用。

这里有一篇文章Migration Guide from Guice to Spring,您可能会感兴趣。

相关问题