spring在诞生之初就开始了一统江湖的征程,而这个征程之中, xml的繁琐配置一直是一个障碍,而JDK1.5之后,java的注解是解决这个问题的一个大杀器, 从2.5开始,spring开始了消灭XML的征程,开始引入大量的注解,springboot不仅继承了spring、springMVC注解,本身也提出了更多的注解;
这些注解更加灵活、简便的注入资源,简化结构、解耦代码;
而注解本身具有一定的逻辑功能,通过各种不同的注解加载不同的功能模块,尤其是在框架之中,通过初始化注解能够将对象实例化、资源注入、路由映射等功能强势加载;
一般情况下我们只会默认使用这些注解达到某些功能,往往不求甚解,但其实掌握并理解这些注解对于理解整个springboot框架十分重要,不仅可以加深对框架的认识,也会加深对注解的认识, 以及对于如何实现自己的注解也十分有意义
一、入口注解:@SpringBootApplication
在进行springboot框架的时候,执行main方法时总会看到class头上一定顶着这样一个注解,这就像一个标签, springboot在扫描的时候会扫描这个标签,表示入口执行方法:
此注解所在的类需与service、dao层为同一级,springboot才会扫描到所有该层注解
1、@SpringBootApplication是一个复合注解,包括@ComponentScan,和@SpringBootConfiguration,@EnableAutoConfiguration。
(1)、@ComponentScan:扫描当前包及其子包下被@Controller(控制器),@Service(服务层),@Repository(DAO层)以及@Component(注入普通bean,类似于xml中的bean配置)注解标记的类并纳入到spring容器中进行管理。 是以前的<context:component-scan>(spring使用在xml中使用的标签,用来扫描包配置的平行支持)
(2)、@SpringBootConfiguration:继承自@Configuration,二者功能也一致,标注当前类是配置类,并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到srping容器中,并且实例名就是方法名。
(3)、@EnableAutoConfiguration:作用启动自动的配置, @EnableAutoConfiguration注解的意思就是Springboot根据你添加的jar包来配置你项目的默认配置,比如根据spring-boot-starter-web ,来判断你的项目是否需要添加了webmvc和tomcat,
就会自动的帮你配置web项目中所需要的默认配置。
同样,如果maven中添加了mybatis或jpa数据源连接包,会默认通过配置文件加载数据源,如果没有配置数据源则会报出异常
package com.beans;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
ConfigurableApplicationContext context =SpringApplication.run(Application.class,args);
Cat cat = context.getBean(Cat.class);
System.out.println(cat);
}
}
package com.test;
public class Cat {
}
(1)、我们在com.test中建立一个test类(与启动类不在同一级),在扫描的时候,
发现返回一个null,正是因为 @ComponentScan只会扫描该注解类以以及以下包中的类,如果要包含某个扫描包,
可以添加:(scanBasePackages = "com.test")指定扫描路径;当然,这样说明了@SpringbootApplication为什么要放在包的同一级
(2)、@SpringBootConfiguration注解其实和@Configuration功能一致,前者继承后者,和@Bean注解结合使用,其主要功能等同于spring配置文件.xml中的<beans><bean></bean></beans>