SpringBoot基础知识
本文记录spring boot的相关基础知识与基本配置。
Spring Boot是基于Spring5.0以上的一些库的集合,简化spring应用的搭建与开发过程。Srping Boot需要JDK1.8以上支持。
Spring的几种注解
@Configuration
java bean 配置
1 |
|
@Bean
定义java bean, 可以在配置中通过ref的方式配置bean与bean之间的依赖
1 |
|
1 |
|
@ComponentScan
从定义的路径中扫描所有标识了需要装配的类,自动装配到spring的bean容器中。
自动装配的类包括标识了以下注解的bean:
@Controller,@Service,@Repository,@Component
1 |
|
1 |
|
其他参数:
- basePackageClasses
补充扫描该类所属package中所有符合规则的bean,所配置的class不需要有对应的注解,可以是普通类@ComponentScan(value="com.chibao.test",basePackageClasses=UserInfoDao.class)
- includeFilters
定义过滤器,这样就只有符合过滤器要求的bean才被装配,也可以自动以过滤类(实现TypeFilter接口)@ComponentScan(value="com.chibao.test",includeFilters={@Filter(type=FilterType.ASSIGNABLE_TYPE,classes= {UserInfoDaoImpl.class})})
@PropertySource @PropertySources
将参数加载到spring的enviroment中PropertySource的路径中如果涉及到其他环境参数,那么其他环境参数的加载必须在前面(不一定是同一个类中,但需要在前面已经加载了),使用${参数名}进行引用1
2
3
4
5
6
7
8
9@PropertySource("classpath:/config/config.properties")
@PropertySource("classpath:${config_path}")
public class UserController {
@Autowired
Environment env;
public void test() {
System.out.println(env.getProperty("testname"));
}
}@Import
将多个分开的容器的配置合并到一个以上代码中,会将SubScanConfig中配置的bean都合并到MainScanConfig中,同样如果SubScanConfig.class已经在定义的扫描范围内,也会被合并进来,不需要再Import1
2
3
4
5
6@ComponentScan(value="com.chibao.test")
@Import(SubScanConfig.class)
@Configuration
@PropertySource("classpath:config/config_base.properties")
public class MainScanConfig {
}
spring boot的核心功能
- 独立运行的 Spring 项目
Spring Boot 可以以 jar 包的形式独立运行 - 内嵌 Servlet 容器
Spring Boot 可选择内嵌 Tomcat、Jetty 或者 Undertow。 - 提供 starter 简化 Maven 配置
Spring 提供了一系列的 starter pom 来简化 Maven 的依赖加载。 - 自动配置 Spring
Spring Boot 会根据在类路径中的 jar 包、类,为 jar 包里的类自动配置 Bean - 准生产的应用监控
Spring Boot 提供基于 http、ssh、telnet 对运行时的项目进行监控 - 无代码生成和 xml 配置
提供各种注解减少xml配置
*此章节部分摘抄至网络
搭建spring boot应用
可以通过spring官网提供的脚手架,新建spring boot应用,依赖包可以用maven或者gradle等。
如果需要离线使用或者内网使用,可以用maven等下载依赖后将所有jar包复制到内网项目中。
通过@SpringBootApplication启动spring boot应用
1 |
|
@SpringBootApplication是@Configuration、@EnableAutoConfiguration、@ComponentScan三个注解的复合注解,效果一样
1 |
|
- @EnableAutoConfiguration主要实现@Import(EnableAutoConfigurationImportSelector.class)
待确认:在spring实例化bean的过程中,如果被实例化的bean构造方法使用了Autowired的bean或报空指针,如Environment
1
2
3
4
5
6
7
8@Controller
public class UserController {
@Autowired
Environment env;
public UserController() {
System.out.println(env.getProperty("testname"));
}
}SpringApplicationRunListener
监听spring boot 的生命周期,需要在spring.factories中配置:org.springframework.boot.SpringApplicationRunListenerApplicationListener
实现ApplicationListener后,通过onApplicationEvent方法监听消息,在springboot启动的时候,可以通过ConfigurableApplicationContext.addApplicationListener添加监听器1
context.addApplicationListener(context.getBean(SpringRunListener.class));
ApplicationContextInitializer
CommandLineRunner
用于在应用启动后(springboot已经装配完所有的bean)加载数据,多个CommandLineRunner可以通过@Order注解进行排序1
2
3
4
5
6
7@Component
@Order(value = 1)
public class AppCommandLineRunner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
}
}
SpringBoot基础知识
http://blog.colorccm.com/2020/09/14/it/springboot/