(004) Пружина загрузки из SpringApplication.run Почему работать без аннотированный класса, и контраст

  Вообще говоря класс выше springBoot первого запуска будет добавлять комментарии SpringBootApplication, но мы нашли без аннотаций можно успешно работать, следующий пример:

  pom.xml

<XML версия = "1,0" кодирующая = "UTF-8"?> 

<проект Xmlns = "http://maven.apache.org/POM/4.0.0" Xmlns: XSI = "HTTP: //www.w3 .org / 2001 / XMLSchema-экземпляр» 
    XSI: SchemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion> 4.0.0 </ modelVersion> 

    <идентификатор_группы> com.edu.spring </ идентификатор_группы> 
    <артефакт> springboot </ артефакт> 
    <версия> 1.0.0 </ версия> 
    <упаковка> баночка </ упаковка> 

    <имя > springboot </ имя> 
    <- изменение FIXME его на сайт проекта ->! 
    <URL> Http: // www.example.com </ url>
    
    <dependencyManagement> 
        <зависимостей> 
            <зависимость>
                <идентификатор_группы> org.springframework.boot </ идентификатор_группы> 
                <артефакта> весенне-загрузка зависимости </ артефакт> 
                <версия> 2.1.6.RELEASE </ версия> 
                <сфера> импорт </ сфера> 
                <типа> POM </ тип> 
            </ зависимость> 
        </ зависимостей> 
    </ dependencyManagement> 
    
    <свойства> 
        <project.build.sourceEncoding> UTF-8 </project.build.sourceEncoding> 
        <maven.compiler.source> 1.8 </maven.compiler.source > 
        <maven.compiler.target> 1,8 </maven.compiler.target> 
    </ свойства>

    <зависимостей> 
        <зависимость>
            <идентификатор_группы> org.springframework.boot </ идентификатор_группы>
            <артефакт> весна-загрузка-стартер </ артефакт> 
        </ зависимость> 
    </ зависимостей> 

</ проект>
Просмотр кода

  App.java

пакет com.edu.spring.springboot; 

импорт org.springframework.boot.SpringApplication;
импорт org.springframework.context.ConfigurableApplicationContext;
импорт org.springframework.context.annotation.Bean; 

общественный  класс App 
{ 
    @Bean 
    Runnable createRunnable () { 
        возвращение () -> {System.out.println ( "ботинки весны запускаются" );}; 
    } 
    
    Общественных  статическая  недействительный основной (String [] арг) 
    { 
        
        ConfigurableApplicationContext контекст = SpringApplication.run (App. Класс , аргументы); 
        context.getBean (Runnable.класс ) .run (); 
        
    } 
}
Просмотр кода

   Результаты таковы:

   Можно увидеть, springboot нормальной работы, и компонент может быть создан, так как метод запуска, в конечном счете вызвать конструктор класса SpringApplication SpringApplication, которые проходят в качестве параметра (типа прохода) будет использоваться в качестве источника, управления пружиной контейнера, часть исходного кода следующим образом:

   Так почему же мы до сих пор обычно добавляют SpringBootApplication прокомментируете? Это потому, что ноты содержат ComponentScan заметки и другие аннотации, ComponentScan аннотаций могут быть выполнены с возможностью сканирования весной пути. Так App.java не может работать должным образом аннотированный, и создать компонент, но не сканирование другого бина, тесты следующим образом:

  Добавить User.java

пакет com.edu.spring.springboot; 

импорт org.springframework.stereotype.Component; 

@Component 
общественного  класса пользователь { 

}
Просмотр кода

  App.java

пакет com.edu.spring.springboot; 

импорт org.springframework.boot.SpringApplication;
импорт org.springframework.context.ConfigurableApplicationContext;
импорт org.springframework.context.annotation.Bean; 

общественный  класс App 
{ 
    @Bean 
    Runnable createRunnable () { 
        возвращение () -> {System.out.println ( "ботинки весны запускаются" );}; 
    } 
    
    Общественных  статическая  недействительный основной (String [] арг) 
    { 
        
        ConfigurableApplicationContext контекст = SpringApplication.run (App. Класс , аргументы); 
        context.getBean (Runnable.класс ) .run (); 
        System.out.println (context.getBean (User. Класс )); 
        
    } 
}
Просмотр кода

  Результаты таковы:

   ComponentScan добавлять аннотации App.java выше, могут быть отсканированы к классу пользователя

пакет com.edu.spring.springboot; 

импорт org.springframework.boot.SpringApplication;
импорт org.springframework.context.ConfigurableApplicationContext;
импорт org.springframework.context.annotation.Bean;
импорт org.springframework.context.annotation.ComponentScan; 

@ComponentScan 
общественного  класса App 
{ 
    @Bean 
    Runnable createRunnable () { 
        возвращение () -> {System.out.println ( "ботинки весны запускаются" );}; 
    } 
    
    Общественных  статическая  недействительный основной (String [] арг) 
    { 
        
        ConfigurableApplicationContext контекст= SpringApplication.run (App. Класс , арг); 
        context.getBean (Runnable. класс ) .run (); 
        System.out.println (context.getBean (User. Класс )); 
        
    } 
}
Просмотр кода

  Результаты не будут работать ошибки следующим образом:

   SpringApplication.run (App.class, арг); параметр приложения в качестве источника, инициализируется пружинные контейнеры, этот параметр не обязательно является способ, в котором работает сам класс может быть другой тип, например:

  App.java

пакет com.edu.spring.springboot; 

импорт org.springframework.boot.SpringApplication;
импорт org.springframework.context.ConfigurableApplicationContext; 

общественный  класс App 
{ 
    
    общественных  статический  недействительный основной (String [] арг) 
    { 
        
        ConfigurableApplicationContext контекст = SpringApplication.run (App2. класс , арг); 
        context.getBean (Runnable. класс ) .run (); 
        System.out.println (context.getBean (User. Класс )); 
        
    } 
}
Просмотр кода

  App2.java

пакет com.edu.spring.springboot; 

импорт org.springframework.context.annotation.Bean;
импорт org.springframework.context.annotation.ComponentScan; 

@ComponentScan 
общественного  класс App2 
{ 
    @Bean 
    Runnable createRunnable () { 
        возвращение () -> {System.out.println ( "ботинки весны запускаются" );}; 
    } 

}
Просмотр кода

  Пользователь может также получить Runnable и результаты боба являются следующим:

   Если в это время метод создаст Runnable написано в App.java не получит боб, ошибку программы. Как было указано источник App2.java. ComponentScan с пакетом сканирования, или суб-пакет, источник так, чтобы поместить самый наружный пакет. источник SpringBootApplication можно добавлять аннотации или ComponentScan.

рекомендация

отwww.cnblogs.com/javasl/p/11827829.html