一、JavaConfig
(一) IoC 和 DI
1、XML配置IoC
① 创建一个类:SomeBean.class
② 编写项目里配置:01ior.xml ==> <bean id = "someBean" class = "...">
③ 启动Spring
ApplicationContext ctx = new ClassPathXmlApplicationContext("calsspath:01oir.xml");
ctx.getBean("someBean",someBean.class);
2、JavaConfig配置IoC
① 创建一个配置类
@Configuration
public class JavaConfig{
@Bean
public class someBean(){
return new someBean();
}
}
② 启动Spring
ApplicationContext ctx = new AnnotationConfigurationApplicationContext(JavaConfig.class);
ctx.getBean("someBean",someBean.class);
3、注解简化配置
@Component @Autowired
@Configuration :表示该类是 Spring 的配置类;
@ComponentScan :开启组件扫描器;
补充
① @Scope("prototype") :多例;
② @Bean中的属性:name:bean中name,取别名;
initMethod:初始化方法;
destroyMethod:销毁方法;
(二)SpringTest加载配置类
1、JUnit4
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(①/②) ①XML:“classpath:xml文件路径”; ②配置类:classes = {配置类1.class,配置类2.class,......}
2、JUnit5
@SpringJUnitConfig(配置类.class):测试方法不用 public 修饰;
(三)配置类的导入
1、XML方式:<import resource = "classpath:applicationContext.xml" />
2、配置类方式:
主配置类:
@Configuration
@Import(OtherJavaConfig.class) // 在主配置类中关联次配置类
public calss JavaConfig(){...}
次配置类:
@Configuration
public calss OtherJavaConfig(){...}
测试:
@SpringJUnitConfig(classes = JavaConfig.class)
public class IoCTest(){...}
二、SpringBoot入门
(一)项目创建
1、SpringBoot 工程
创建好会自动生成一个启动类和测试类@SpringbootApplication @SpringBootTest
2、Maven --> SpringBoot
① 添加依赖
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.3.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
② 编写 Controller 代码
③ 编写启动程序
(二)入门案例分析
1、父子工程
<dependencyManagement> <pluginManagement> 约定好版本号 父:<packaging>pom</packaging>
2、Spring-Boot-Starter
可以直接使用,免去了各种配置,回内嵌很多包,依赖(传递性)
spring-boot-starter:核心启动器,提供了自动配置,日志和 YAML 配置支持。
spring-boot-starter-aop:支持使用 Spring AOP 和 AspectJ 进行切面编程。
spring-boot-starter-test:支持使用 JUnit ,测试 Spring Boot 应用。
spring-boot-starter-web:支持使用 Spring MVC 构建 Web 应用,包括 RESTful 应用,使用
Tomcat 作为默认的嵌入式容器。
spring-boot-starter-logging:提供了对日志的支持,默认使用 Logback。
3、打包独立运行
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
使用 maven 的 package 命令进行打包;
使用命令 java -jar xxx.jar 运行 jar 包(--server.port=80)。
(三)参数配置
application.properties / application.yml 习惯放在 resource 文件夹下面
1、自定义properties 文件
SpringBoot 不会去解析 : db.properties ===> jdbc.username = root JavaConfig 配置:
@Configuration
@PropertySource("calsspath:db.properties")
public class JavaConfig{
@Value("${jdbc.username}")
private String username;
@Bean
public MyDataSource myData(){...}
}
2、配置在application.properties
会自动解析
3、优化@Value过长
把前缀编写到 @ConfigurationProperties 属性上,且设置类属性与需要绑定的参数名相同,可实现自动绑定,但是注意,若使用测试类加载贴有@Configuration 的配置类,则需要在配置类添@EnableConfigurationProperties 注解;若是使用测试类加载贴有 @SpringBootApplication 的配置类,则不需要。
@Component
@ConfigurationProperties(prefix="jdbc")
public class MyDataSource {
private String username;
}
4、Environment 对象绑定对象
当要绑定的参数过多时,直接在配置类中注入 Spring 的 Environment 对象, 这样就不需要贴上在字段或者形参上太多的 @Value 注解,相对比较简洁。
三、自动装配原理
1- @SpringBootApplication :注解内部是3大注解功能的集成
2- @ComponentScan :开启组件扫描
3- @SpringBootConfiguration :作用等同于 @Configuration 注解, 也是用于标记配置类@EnableAutoConfiguration :内部导入 AutoConfigurationImportSelector,该类中有个getCandidateConfigurations 方法,读取 jar 包中 META-INF/spring.factories 文件中配置类,再根据条件进行加载和配置,比如:AOP,PropertyPlaceholder,FreeMarker,HttpMessageConverter,Jackson,DataSourceDataSourceTransactionManager,DispatcherServlet,WebMvc 等等
SpringApplication.run(..)的作用
-
启动 Spring Boot 应用
-
加载自定义的配置类,完成自动配置功能
-
把当前项目配置到嵌入的 Tomcat 服务器
-
启动嵌入的 Tomcat 服务器