spring-2
1.springboot的基础规范
1 2 3 4 5 6 7 8 9 10 11 | <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version> 2.2 . 2 </version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> |
如果是Spring开发的,都会是spring开头;如果是第三方开发的,将会是第三方命名开头。
2.Starter机制原理
在项目的Pom文件中,一般都要引入<parent>,引入之后,我们再引入spring的相关依赖,都不需要在指定版本号了,有没有想过这是为什么?
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.6.6</version> <relativePath/> <!-- lookup parent from repository --> </parent>
---》点进spring-boot-starter-parent
里面还存在一个<parent>,然后再点进spring-boot-dependencies
可以看到里面规定了所有的依赖,并且用<dependencyManagement>标签进行版本管理,如果不知道这个标签的作用,自己百度查。
3.springboot的自动配置
在spring和mybatis的整合中,我们需要配置sqlSessionFactory对象,为了调用getMapper生成mapper对象。但是在springboot的整合中,有没有想过,这些bean的创建为什么都不需要了。
spring-mybatis的整合:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!--set注入,把数据库连接池付给了dataSource属性--> <property name="dataSource" ref="myDataSource" /> <!--mybatis主配置文件的位置 configLocation属性是Resource类型,读取配置文件 它的赋值,使用value,指定文件的路径,使用classpath:表示文件的位置 --> <property name="configLocation" value="classpath:mybatis.xml" /> </bean>
在springboot中:
springboot中的mybatis-spring-boot-starter依赖中,已经通过@Bean进行了配置,在项目启动的时候,自动会注入到IOC容器中。
在引申出另一个问题,我们springboot的默认加载包是当前包及其子目录。那有没有想过这些依赖中的对象是怎么加入到IOC容器的。
springboot会加载所有的jar包,然后得到jar包中含有一个META-INFO文件夹,里面包含一个spring.factories文件,里面包含了需要读取的类名,将之读取到IOC容器中。springboot只用开启@EnableAutoConfiguration注解即可。(SpringBootApplication中就包含)
4.springboot的属性绑定
springboot默认会读取resource目录下的application.properties文件,但是如果你想读取其他的文件,可以通过@PropertySource注解
@SpringBootApplication @PropertySource("application1.properties") public class DemoApplication { public static void main(String[] args) { ConfigurableApplicationContext run = SpringApplication.run(DemoApplication.class, args); System.out.println(run.getBean(OrderService.class)); } }
属性绑定:类中的字段必须和配置文件的key相同,其次要把他生成一个bean,所以加入Component,当然可以不用这种方式,下面会详细展开
@ConfigurationProperties @Component public class Properties { String passward; public String getPassward() { return passward; } public void setPassward(String passward) { this.passward = passward; } }
@Component public class OrderService { // @Value("${passward}") // String passward; @Autowired private Properties properties; public void test(){ System.out.println(properties.getPassward()); } }
可以通过加入前缀的方式,只会读取配置文件该前缀的配置项,@ConfigurationProperties(prefix = "wxy")
也可以通过@EnableConfigurationProperties(Properties.class)开启读取配置类的方式,配置类就可以不用加入@Component了。
5.springboot读取配置文件的优先级
1、config/application.properties(项目根目录中config目录下)
2、config/application.yml
3、application.properties(项目根目录下)
4、application.yml(项目根目录下)
5、resources/config/application.properties(项目resources目录中config目录下)
6、resources/config/application.yml
7、resources/application.properties(项目的resources目录下)
8、resources/application.yml
参考:https://blog.csdn.net/sinat_28527463/article/details/119171151
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix