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

posted @   WXY_WXY  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示