我最近开始探索Spring Boot
。我发现在Beans
中有两种方法可以定义Spring Boot
。
@Bean
@SprinBootApplication
@Bean
@Configuration
醇>
我也对stereo-type annotation
@Repository
@Service
@Controller
等感到困惑。
有人可以解释依赖注入如何与这些注释一起使用吗?
答案 0 :(得分:2)
Spring Boot自动配置尝试根据您添加的jar依赖项自动配置Spring应用程序。
您需要通过将 @EnableAutoConfiguration 或 @SpringBootApplication 注释添加到 @Configuration 类之一来选择自动配置
您可以自由地使用任何标准的Spring Framework技术来定义bean及其注入的依赖项。为简单起见,我们经常发现使用 @ComponentScan (找到你的bean)并使用 @Autowired (进行构造函数注入)效果很好。
答案 1 :(得分:2)
一种方法是在注释的类中定义@Bean @SprinBootApplication
如果您看到@SprinBootApplication
它是多个注释的组合,其中一个是@Configuration
。因此,当您在Main类中定义@Bean
时,它意味着它位于@Configuration
类中。
表示一个类声明了一个或多个@Bean方法,可能是 由Spring容器处理以生成bean定义和 在运行时为这些bean提供服务请求。
用@Configuration注释的类
当你定义@Bean
是一个用@Configuration
类注释的类时,这意味着它是所有Beans
中定义的所有Dependency-Injection
可用的弹簧配置的一部分。
我还看到了一些代码,其中上述两种方法都没有 已被使用,但依赖注入工作正常。我试过了 对此进行了大量研究但未找到任何具体答案 这个。这可能吗?
我假设你在谈论Sterio-type annotation。根据文档:
,每个sterio类型注释都有@Component表示带注释的类是“组件”。这样的课程是 被认为是使用时自动检测的候选者 基于注释的配置和类路径扫描。
答案 2 :(得分:2)
是的,这是可能的。 您可以在任何@Configuration或@SpringBootApplication类中使用@Bean,或使用@Service,@ Component @Repository等注释显式标记bean类。
@Service或@Component
使用@Service或@Compoenent标记类时,如果spring的注释扫描范围允许它到达包,则spring会将这些类的实例注册为spring beans
。
您可以使用@ComponentScan
<强> @Bean 强>
@Beans
标记在工厂方法上,可以创建特定类的实例。
@Bean
public Account getAccount(){
return new DailyAccount();
}
现在在您的应用程序中,您可以简单地@Autowire帐户和spring将在内部调用其工厂方法getAccount
,后者又返回DailyAccount
的实例。
使用@Bean vs @Service或@Compoenent有一个简单的区别。 第一个让你的豆松散地相互耦合。