经过前几天的准备终于可以进入源码了
Spring配置有三种方式:
- XML配置
- 注解配置
- Java-based配置
Spring5后推荐我们使用Java-based配置的方式,因此本篇文章以Java-based配置为切入点开始源码的阅读
有对Java-based配置不了解的小伙伴,可以参考官方文档
好了,废话少说让我们进入正题
首先右键Spring工程创建基于Gradle的module,如下图
module命名及路径配置,配置好后在build.gradle添加spring-context依赖
接着在创建好的工程创建Java配置
package stu.springsource.learn.javacode;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean
public MyService myService() {
return new MyServiceImpl();
}
}
package stu.springsource.learn.javacode;
public interface MyService {
String doStuff(String msg);
}
package stu.springsource.learn.javacode;
public class MyServiceImpl implements MyService {
@Override
public String doStuff(String msg) {
return msg;
}
}
最后创建main函数读取Java配置
package stu.springsource.learn.javacode;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class AppConfigTest {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
MyService m = context.getBean(MyService.class);
String hello_stuff = m.doStuff("hello stuff");
System.out.println(hello_stuff);
}
}
我们可以看到,基于Java配置与基于XML配置,总体上步骤是差不多的都是,线读取配置,然后从容器中获取Bean,最后调用Bean,不同的是读取配置的类由ClassPathXmlApplicationContext换成了AnnotationConfigApplicationContext
最后附上AnnotationConfigApplicationContext类图
今天先到这,明天我们接着分析AnnotationConfigApplicationContext类图上每个类的作用