目录
3.1 @SpringBootConfiguration注解
3.2 @EnableAutoConfiguration注解
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");
}
@Override
public 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