目录
1.Spring如何加载我们的类的
2.Spring注解驱动发展史与核心注解介绍
2.1 Spring驱动发展简史
2.2 @Configuration和@Bean注解
2.3 @Import以及相关注解
3.看看SpringBoot的启动的入口
3.1 @SpringBootConfiguration注解
3.2 @EnableAutoConfiguration注解
4.SpringBoot自动配置原理
1.Spring如何加载我们的类的
相信在刚开始学习Spring的时候,我们都学过如何用spring的配置来指定类之间的关系,例如:
<bean id="englishMessageProvider" class="innerspring.com.decoupled.EnglishMessageProvider"/><bean id="standardOutMessageService" class="innerspring.com.decoupled.StandardOutMessageService"p:messageProvider-ref="englishMessageProvider"/>
后面的class就是我们自己实现的业务类,例如:
package innerspring.com.decoupled;public class EnglishMessageProvider implements IMessageProvider {public EnglishMessageProvider(){System.out.println(" --> EnglishMessageProvider: constructor called");}@Overridepublic String getMessage() {return "Hello World!";}
}
我们在使用的时候只要这么写就行了:
public class HelloWorldSpringDI {public static void main(String... args) {ApplicationContext ctx = new ClassPathXmlApplicationContext("spring/app-context.xml");IMessageService mr = ctx.getBean("standardOutMessageService", IMessageService.class);mr.execute();}
}
初次接触Spring的时候,通过上面的代码,并且仔细研究ClassPathXmlApplicationContext的代码,可以逐步梳理出Ioc、AOP等的完整过程,虽然复杂,如果花时间多就足以将其完整搞清楚是如何加载的。
不过呢使用XML的方式有一个很大的问题,就是如果我们的类非常多非常复杂,这时候xml的配置就无比庞大,而如果我修改了版本或者实现等等,此时维护xml文件就是个灾难。
为此Spring发展的一个重要途径就是推广使用注解,减少xml等配置的内容。例如上面我们定义的bean:
<bean id="englishMessageProvider" class="innerspring.com.decoupled.EnglishMessageProvider"/>
这里的关键是class里指定的类的路径和类名,而前面的id就是类名的小写,所以我们只要找到类就完全能自己创建出这么一个类来。
那不用配置又该如何找到我们的类呢?方法是用注解+包扫描
凡是用过SpringBoot的同学应该都知道,我们写了一个服务之后,都需要在头部加上这么一个注解,例如@C