[乐优商城学习记录]DAY01 学习springboot

本文详细介绍SpringBoot项目的基本搭建流程,包括依赖管理、自动配置原理、启动过程解析,以及如何进行配置属性的绑定和自定义MVC配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 依赖部分

一般pom文件都有这个parent

 <!-- 所有的springboot的工程都以spring父工程为父工程 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.6.RELEASE</version>
    </parent>

这个是springboot的最基本的依赖,包含如下信息:

  1. 对各种常用依赖(并非全部)的版本进行了管理
  2. 引入了很多基本的包了,不需要我们手动去引入

2 @EnableAutoConfiguration注解

可以配合

public static void main(String[] args) {
        SpringApplication.run(HelloController.class, args);
    }

就可以启动一个既像jar又像war的springboot项目
非常类似在linux里面运行 java -jar xxxxxx.jar

3 当你继续引入依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

这时候,SpringBoot根据spring-boot-starter-web这个依赖自动引入对应的jar包,往spring容器里面添加很多bean和配置

4 @ComponentScan注解

当把psvm里面的SpringApplication.run(HelloController.class, args)
与@RestController分开的时候
项目就不行了
原因是:缺少了注解扫描@ComponentScan

配置组件扫描的指令。提供了类似与`<context:component-scan>`标签的作用
通过basePackageClasses或者basePackages属性来指定要扫描的包。
如果没有指定这些属性,那么将从声明这个注解的类所在的包开始,扫描包及子包

在项目使用的时候:一般启动类会放在一个比较浅的包目录中

5@SpringBootApplication注解

  • @SpringBootConfiguration 配置类,一般唯一的以示区分
  • @EnableAutoConfiguration:开启自动配置
  • @ComponentScan:开启注解扫描

6 java形式的配置类

6.1简单的配置属性用@Value

@Configuration
@PropertySource("classpath:jdbc.properties")
public class JdbcConfiguration {
    @Value("${jdbc.url}")
    String url;
    @Bean
    public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl(url);
        .........
        return dataSource;
    }
}

简单类型的数据比如String,Int,Double,Boolean可以用@Value注解

6.2 复杂,万能的配置属性用@ConfigurationProperties

@ConfigurationProperties(prefix = "jdbc")
public class JdbcProperties {
    private String url;
    private String driverClassName;
    // getters 和 setters
}

默认会读取文件名为application.properties
使用3,参数注入

@Configuration
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfiguration {
    @Bean
    public DataSource dataSource(JdbcProperties jdbcProperties) {
        // ...
    }
}

优点:
Relaxed binding:松散绑定
不严格要求属性文件中的属性名与成员变量名一致。支持驼峰,中划线,下划线等等转换,甚至支持对象引导。比如:user.friend.name,可以把配置文件映射成对象

7spring自动装配的底层原理

比较复杂,说不清楚
第一步,启动类

SpringApplication.run(LeyouItemServiceApplication.class, args)

第二步构造函数

public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources){
		getSpringFactoriesInstances(ApplicationContextInitializer.class)
		setInitializers(上面的返回值)
}

第三步 417行

private <T> Collection<T> getSpringFactoriesInstances(Class<T> type,
			Class<?>[] parameterTypes, Object... args) {
		Set<String> names = new LinkedHashSet<>(
		SpringFactoriesLoader.loadFactoryNames(type, classLoader));
	
	}

第四步
FACTORIES_RESOURCE_LOCATION的值是META-INF/spring.factories

private static Map<String, List<String>> loadSpringFactories(@Nullable ClassLoader classLoader) {
	Enumeration<URL> urls = (classLoader != null ?
					classLoader.getResources(FACTORIES_RESOURCE_LOCATION) :
					ClassLoader.getSystemResources(FACTORIES_RESOURCE_LOCATION));
}

第五步
springboot会从依赖包里面找到这个文件
就扫描到这个文件里面的XXXXXXAutoConfiguration配置类文件
第六步 配置文件读取到spring里面,具体有很多细节,

@ConditionalOnWebApplication(type = Type.SERVLET)
@ConditionalOnClass
@ConditionalOnMissingBean
@EnableConfigurationProperties

第七步总结
1引入starter
2修改application.yml
3有时候还可以自动写@Configuration和@Bean

8 配置拦截器

自定义一些MVC配置(包括:拦截器,格式化器, 视图控制器、消息转换器 等等),你应该让一个类实现WebMvcConfigurer,并且添加@Configuration注解

@Component
public class MyInterceptor implements HandlerInterceptor {
	@Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(myInterceptor).addPathPatterns("/**");
    }
}

9 一些需要查看的工具手册

SpringBoot启动器.txt
SpringBoot全局属性.md

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值