在SpringApplication类中有SpringApplication和Run方法他们的作用是什么呢!
解析注解:@SpringBootApplication 结论是
在SpringBoot学习中:@SpringBootApplication = (默认属性)@Configuration + @EnableAutoConfiguration + @ComponentScan。
package com.springboot.springboot0907; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Springboot0907Application { public static void main(String[] args) { SpringApplication.run(Springboot0907Application.class, args); } }
一起来分解上面的代码吧:
分开解释@Configuration,@EnableAutoConfiguration,@ComponentScan。
1 @Configuration:提到@Configuration就要提到他的搭档@Bean。使用这两个注解就可以创建一个简单的spring配置类,可以用来替代相应的xml配置文件。
<beans> <bean id = "car" class="com.test.Car"> <property name="wheel" ref = "wheel"></property> </bean> <bean id = "wheel" class="com.test.Wheel"></bean> </beans>
相当于:
@Configuration public class Conf { @Bean public Car car() { Car car = new Car(); car.setWheel(wheel()); return car; } @Bean public Wheel wheel() { return new Wheel(); } }
@Configuration的注解类标识这个类可以使用Spring IoC容器作为bean定义的来源。@Bean注解告诉Spring,一个带有@Bean的注解方法将返回一个对象,该对象应该被注册为在Spring应用程序上下文中的bean。
@EnableAutoConfiguration:能够自动配置spring的上下文,试图猜测和配置你想要的bean类,通常会自动根据你的类路径和你的bean定义自动配置。
@ComponentScan:会自动扫描指定包下的全部标有@Component的类,并注册成bean,当然包括@Component下的子注解@Service,@Repository,@Controller。
@Configuration的注解类标识这个类可以使用Spring IoC容器作为bean定义的来源。@Bean注解告诉Spring,一个带有@Bean的注解方法将返回一个对象,该对象应该被注册为在Spring应用程序上下文中的bean。
@SpringApplication:是自动配置原理的核心下篇文章介绍,这里介绍了这个注解的定义和来源:进入下面这张图的主题了解SpringApplication类的介绍
关键在下面的代码他有两个值得注意的地方SpringApplication和Run方法
SpringApplication.run(Springboot0906Application.class, args);
在标记的地方点击进去
public class SpringApplication { public static final String BANNER_LOCATION_PROPERTY_VALUE = "banner.txt"; public static final String BANNER_LOCATION_PROPERTY = "spring.banner.location"; private static final String SYSTEM_PROPERTY_JAVA_AWT_HEADLESS = "java.awt.headless"; private static final Log logger = LogFactory.getLog(SpringApplication.class); static final SpringApplicationShutdownHook shutdownHook = new SpringApplicationShutdownHook(); private Set<Class<?>> primarySources; private Set<String> sources; private Class<?> mainApplicationClass; private Mode bannerMode; private boolean logStartupInfo; private boolean addCommandLineProperties; private boolean addConversionService; private Banner banner; private ResourceLoader resourceLoader; private BeanNameGenerator beanNameGenerator; private ConfigurableEnvironment environment; private WebApplicationType webApplicationType; private boolean headless; private boolean registerShutdownHook; private List<ApplicationContextInitializer<?>> initializers; private List<ApplicationListener<?>> listeners; private Map<String, Object> defaultProperties; private List<BootstrapRegistryInitializer> bootstrapRegistryInitializers; private Set<String> additionalProfiles; private boolean allowBeanDefinitionOverriding; private boolean allowCircularReferences; private boolean isCustomEnvironment; private boolean lazyInitialization; private String environmentPrefix; private ApplicationContextFactory applicationContextFactory; private ApplicationStartup applicationStartup;
public class SpringApplication 关面中所有的方法在SpringApplication 这个类中
单你点击进去会锁定方法中
public static ConfigurableApplicationContext run(Class<?> primarySource, String... args) { return run(new Class[]{primarySource}, args); }
代码不需要你看懂你只需记得以下结论:
SpringApplication类的作用
这个类主要做了以下四件事情
1.推断应用的类型是普通的项目还是Web项目
2.查找并加载所有可用初始化器,设 置到initializers属性中.
3 找出所有的应用程序监听器,设置到listeners属性中
4.推断并设置main方法的定义类,找到运行的主类
Run方法
1 判断项目类型
2 推断当前主类
3 设置监听器 获取上下文 全面接管SpringMvc配置
4 找到运行主类
这也是这节课的总结下次博客带你走进@SpringApplication注解中了解自动配置原理
下篇文章的链接
SpringBoot中“@SpringBootApplication“自动配置原理《第七课》_星辰镜的博客-CSDN博客