进入到springboot上的引导类上@SpringBootApplication注解的源代码
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
//省略其他代码
}
通过源码可以看到@SpringBootApplication注解是由后面三个注解一起组成的(前面几个是元注解),把这三个注解替换掉引导类上的@SpringBootApplication注解
package org.example;
import org.example.config.MyConfig2;
import org.example.pojo.People;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigurationExcludeFilter;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.TypeExcludeFilter;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.FilterType;
/**
* @author Administrator
*/
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {@ComponentScan.Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@ComponentScan.Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class)})
public class App {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(App.class, args);
System.out.println(context.getBean(MyConfig2.class));
System.out.println(context.getBean(People.class));
}
}
运行,控制台打印
org.example.config.MyConfig2$$EnhancerBySpringCGLIB$$c0bc7d8f@18151a14
org.example.pojo.People@64711bf2
说明项目启动没问题
进入@SpringBootConfiguration注解源代码
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {
@AliasFor(annotation = Configuration.class)
boolean proxyBeanMethods() default true;
}
-
@SpringBootConfiguration是对@Configuration注解的包装,proxyBeanMethods 默认配置 true, full模式(单例Bean)
-
标识是一个配置类,所以 引导类也是配置类
3、@ComponentScan注解作用
-
组件扫描,默认扫描的规则 引导类所在的包及其子包所有带注解的类