SpringBoot依赖注入如何与不同类型的注释一起使用

时间:2018-03-14 03:38:29

标签: spring-boot dependency-injection javabeans

我最近开始探索Spring Boot。我发现在Beans中有两种方法可以定义Spring Boot

  1. 在使用@Bean
  2. 注释的班级中定义@SprinBootApplication
  3. 在使用@Bean
  4. 注释的班级中定义@Configuration

    我也对stereo-type annotation @Repository @Service @Controller等感到困惑。

    有人可以解释依赖注入如何与这些注释一起使用吗?

3 个答案:

答案 0 :(得分:2)

Spring Boot自动配置尝试根据您添加的jar依赖项自动配置Spring应用程序。

您需要通过将 @EnableAutoConfiguration @SpringBootApplication 注释添加到 @Configuration 类之一来选择自动配置

您可以自由地使用任何标准的Spring Framework技术来定义bean及其注入的依赖项。为简单起见,我们经常发现使用 @ComponentScan (找到你的bean)并使用 @Autowired (进行构造函数注入)效果很好。

答案 1 :(得分:2)

  

一种方法是在注释的类中定义@Bean   @SprinBootApplication

如果您看到@SprinBootApplication它是多个注释的组合,其中一个是@Configuration。因此,当您在Main类中定义@Bean时,它意味着它位于@Configuration类中。

根据Configuration docs

  

表示一个类声明了一个或多个@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有一个简单的区别。 第一个让你的豆松散地相互耦合。

  • 在@Bean中,您可以灵活地更改帐户实施,甚至无需更改任何帐户类。
  • 考虑一下你的类实例化是一个多步操作,比如读取属性值等,那么你可以在@Bean方法中轻松完成。
  • 如果您没有对要尝试实例化的类的源代码访问,
  • @Bean也会有所帮助。