要迁移到不同代码库(使用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框架,这对我来说有点困惑。
1条答案
按热度按时间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,您可能会感兴趣。