1、@Configuration注解与@Bean注解
*
* @Configuration注解相当<beans>标签
* @Bean相当于<bean>标签
* id相当于默认的方法名,如果 @Bean标签中指定了name属性值,那么id就相当于name属性值,即:id=“方法名 | name属性值”
* class相当于返回的实例User对象,即:class = “方法返回实例”/** * <beans .....> * <been id="user" class="com.shiory.springbootdemo01.entity.User" /> * </beans> */ @Configuration // 代表当前类是一个配置类 public class UserConfig { @Bean // 构建一个实例,放到Spring容器中 public User user(){ return new User("张三",23); } @Bean(name = "user1") // 构建一个实例,放到Spring容器中 public User user1(){ return new User("李四",24); } }
测试
@RestController public class HelloController { @Autowired private User user; @GetMapping("/user") public User getUser(){ return user; } }
2、 @SpringBootApplication注解
1、@SpringBootApplication注解是一个组合注解。用于启动类之上
进入@SpringBootApplication注解中可看到以下注解
其中最主要的是下面三个注解
@SpringBootConfiguration @EnableAutoConfiguration @ComponentScan
2、@SpringBootConfiguration注解就是@Configuration注解,表示启动类也是一个配置类。
3、@EnableAutoConfiguration注解,是实现自动装配的注解(重要)
SpringBoot工程启动时,会去运行一个SpringFactoriesLoader的类,其次加载META-INF/spring.factories配置类(已经开启的配置类,在pomxml文件中导入的starter依赖),然后通过SpringFactoriesLoader类中的load方法,以for循环的方式一个一个的加载。这样就实现了自动装配。
好处:无需编写大量的整合信息,只需要按照SpringBoot提供好的约定导入相应的starter依赖即可
坏处:比如导入了一个starter依赖,会自动的吧相关依赖导入,可能需要手动排除一些依赖:如排除QuartzAutoConfiguration自动装配:@SpringBootApplication(exclude = {QuartzAutoConfiguration.class})
4、@ComponentScan注解,包扫描注解。
该注解由于是在启动类上,默认是扫描启动类同包以及子包下带注解的内容,也可手动指定扫描包: