Spring boot @ComponentScan vs @Import - PullRequest
       35

Spring boot @ComponentScan vs @Import

0 голосов
/ 11 апреля 2020

Я и мой друг говорили о @ComponentScan и @Import. Какой лучше? У нас есть 2 разные идеи.

  1. @ComponentScan: Легко использовать, импортировать все компоненты из сканирования компонентов.
  2. @Import: Вам нужно знать, какой компонент вы хотите использовать, не нужно сканировать все.

Как насчет вашей идеи? Какой из них лучше использовать?

Спасибо!

Ответы [ 2 ]

1 голос
/ 11 апреля 2020

@Import используется для импорта Java классов конфигурации, обычно помеченных @Configuration/@Component. Поэтому, если у вас есть компонент внутри этого компонента, Spring загрузит его в контекст приложения. Вы можете просто указать имя компонента или класса, и Spring его подберет для вас.

Однако, используя @ComponentScan, вы сообщаете приложению, какие пакеты для сканирования для классов java помечены @Configuration/@Component (или любую из @Component's поданнотаций, таких как @Service или @Repository et c), и загрузите их все в контексте приложения, чтобы при необходимости их можно было подключать автоматически. Если есть внутренние экземпляры, которые необходимо заполнить, Spring позаботится об этом.

Подробнее о @ Import и @ ComponentScan можно прочитать на соответствующих страницах c.

Эта страница довольно хорошо объясняет разницу.

0 голосов
/ 12 апреля 2020

@ ComponentScan сканирует и ищет любые bean-компоненты внутри пакетов / классов, указанных в параметрах basePackageClasses или basePackages, в зависимости от того, что настроено. Эта опция также позволяет вам фильтровать некоторые классы, которые вы не хотите включать в поиск.

@ Import - это как клубить одну конфигурацию java в другую. Например:

@Configuration
@ComponentScan(basePackages="com.stackoverflow")
public class Dbconfig {

  @Bean
  public Datasource dSource(){
   return new Datasource()
  }
}



@Configuration
@Import(Dbconfig.class)
@ComponentScan(basePackages="org.hellospring")
public class AppConfig {

...// beans
}

Итак, если мы проверим класс AppConfig, он будет включать все bean-компоненты, зарегистрированные в классе конфигурации Dbconfig, в том числе внутри пакета com.stackoverflow
+

Он будет включать все компоненты внутри класса AppConfig и компоненты в пакете org.hellospring

...