第三章,springboot 部分注解讲解,和多配置文件加载方式[通俗易懂]

第三章,springboot 部分注解讲解,和多配置文件加载方式[通俗易懂]第三章,springboot 部分注解讲解,和多配置文件加载方式

大家好,又见面了,我是你们的朋友全栈君。

 

 

 一,@PropertySource

package com.example.springboot;


import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;

@PropertySource("classpath:person.properties") //此注解可以加载制定的配置文件
//@ConfigurationProperties(prefix="person")
public class Person {
}

二,@ImportResource 注解 :导入spring 的配置文件,让配置文件中的内容生效

实验:

这里我们做的实验是类似单体spring的在控制器中注入service层类一样的功能。

首先我们新建一个service包。

第三章,springboot 部分注解讲解,和多配置文件加载方式[通俗易懂]

public class HelloService {
}

然后新建个beans.xml,把HelloService注入进来:

第三章,springboot 部分注解讲解,和多配置文件加载方式[通俗易懂]

这里idea可以新建spring文件:新建–》 点开下图分选项即可

第三章,springboot 部分注解讲解,和多配置文件加载方式[通俗易懂]

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="helloservice" class="com.example.springboot.service.HelloService"></bean>

</beans>

然后在测试了类中测试:

@RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationTests {
    @Autowired
    ApplicationContext ioc;
    @Test
    public void contextLoads() {
    }

    @Test
    public void testHelloService(){
        //打印ioc容器中是否包含helloService
        System.out.println(ioc.containsBean("helloservice"));
    }
}

打印结果是false,也就是我们ioc中没有helloService,因为这里的beans.xml没有起作用,我们记得在单体spring 中,我们在需要注入的类上回加上注解@Serivce,但是这里没有。因为是我们字节新建的配置文件,spring不能自动识别,所以需要在主程序上加上如下:

我们在主程序中加入以下代码:

 

@ImportResource(locations = {"classpath:beans.xml"})
@SpringBootApplication
public class Application {

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

}

然后运行测类就会打印true了。

 


三,使用配置类管理容器组件。

springboot推荐使用全注解方式管理bean。

即,使用java类管理需要添加的组件。

这里首先新建一个config组件管理类:

第三章,springboot 部分注解讲解,和多配置文件加载方式[通俗易懂]

package com.example.springboot.config;


import com.example.springboot.service.HelloService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration    //指明当前类是一个配置类,就是来代替之前的spring配置文件(即<bean>)
public class MyAppConfig {
    //将方法的返回值添加到容器中,容器中这个组件默认的id就是方法名
    @Bean
    public HelloService helloService(){
        System.out.println("配置类给容器添加组件了");
        return new HelloService();
    }
}

 然后把之前在主程序中的

@ImportResource(locations = {"classpath:beans.xml"})

给注释掉。

然后在测试类中修改下id,因为配置类的方式id默认是方法名,注意我这里的方法名S是大写的。

测试类:

package com.example.springboot;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationTests {
    @Autowired
    ApplicationContext ioc;
    @Test
    public void contextLoads() {
    }

    @Test
    public void testHelloService(){
        //打印ioc容器中是否包含helloService
        System.out.println(ioc.containsBean("helloService"));
    }
}

然后运行就可以了。

 


五:Profile

1,多profile文件

情景:我们有生产和测试环境,两者的配置通常不一样,所以这里可以写两个配置文件,一个用于生产,一个用于测试。

测试:这里新建两个配置文件:

第三章,springboot 部分注解讲解,和多配置文件加载方式[通俗易懂]

第三章,springboot 部分注解讲解,和多配置文件加载方式[通俗易懂]

第三章,springboot 部分注解讲解,和多配置文件加载方式[通俗易懂]

这里以启动的服务端口好为例,我新建了两个,加上默认的application.properties,共三个端口好,三个都是设置不一样。这里先启动看看用的是哪个?

第三章,springboot 部分注解讲解,和多配置文件加载方式[通俗易懂]

8082端口也就是使用的是springboot自动生产的配置文件中的端口好。下面我们怎么要把我们新建的生效呢?

这里只需要在默认的application.properties中加入下面代码就行了(注意在第几行加入后面才会生效,前面的配置用的是默认的)

spring.profiles.active=dev
server.port=8082

然后启动,端口好就成了:

第三章,springboot 部分注解讲解,和多配置文件加载方式[通俗易懂]

 

2,在yml文件格式中修改

首先注释掉在三个properties文件中的修改。

然后在yml文件中加入以下内容:

第三章,springboot 部分注解讲解,和多配置文件加载方式[通俗易懂]

server:
  port: 8089
#设置激活哪个文档块
spring:
  profiles:
    active: prod

#yml 在这里有点优势,在同个文件中可以分文档块,所以就可以不用分文件了,
---
  #第一个文档块
server:
  port: 8088

spring:
  profiles: dev
---
  #第二个文档块
server:
     port: 8087

spring:
    profiles: prod

然后启动就有:

第三章,springboot 部分注解讲解,和多配置文件加载方式[通俗易懂]

 


六,配置文件的加载位置

有先后顺序:由第高到低,

-file:./config/

-file:./

-classpath:/config/

-classpath:/

这种配置可以形成互补配置,一级一级的 找下来。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/105999.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 空格符号代码_java空格符号代码

    空格符号代码_java空格符号代码html空格符号代码&nbsp;:一个字符的半角的不断行的空格,如果需要在网页中插入多个空格,可以将“&nbsp;”代码写多遍;&ensp;:一个字符的半角的空格,也可以将“&ensp;”写多遍来插入多个空格;&emsp;:两个字符的全角的空格,也可以将“&emsp;”写多遍来插入更多的空格;&thinsp;:小于一个字符的空格;说明:单词后面的分号记得带上,是不能省略的,它也是html代码中的一部分。二、为什么要…

  • IKAnalyzer2012FF + Lucene4.9 TokenStream contract violation: reset()/close() call missing

    IKAnalyzer2012FF + Lucene4.9 TokenStream contract violation: reset()/close() call missing异常信息如下:

  • 软件著作权的代码要求_软件著作权 源代码

    软件著作权的代码要求_软件著作权 源代码软件著作权源代码文档格式要求分类:专利申请常见问题发表时间:2020-10-27软件著作权源代码文档格式要求是什么?软件著作是计算机软件,在申请保护时需要提交软件的源代码。源代码是有格式要求的,以文档形势提交,那么这份源代码文档格式要求是什么呢?需要注意哪些问题呢?本文你详细介绍。常见的源代码包含:C语言,VB,C++,JAVA,.NET等。提交的代码必须是源代码的开头载入程序,第30页必…

  • 面试中如何回答JVM垃圾回收机制[通俗易懂]

    面试中如何回答JVM垃圾回收机制[通俗易懂]JVM中的垃圾回收了解吗首先是如何标记存活对象,主要有两个算法,分别是引用计数法和可达性分析算法。引用计数法:给一个对象添加一个引用计数器,当一个地方引用它时,计算器+1,不引用的时候-1,当引用计数器为0时说明该对象可回收。但是一旦出现互相引用的情况,就会出现无法回收的现象。所以JVM采用的是可达性分析算法。可达性分析算法:首先会标记所有GCroot能够直接关联的对象。GCro…

  • armv8处理器有哪些_arm是精简指令集

    armv8处理器有哪些_arm是精简指令集ARMv8是ARM版本升级以来最大的一次改变,ARMv8的架构继承以往ARMv7与之前处理器技术的基础,除了现有的16/32bit的Thumb2指令支持外,也向前兼容现有的A32(ARM32bit)指令集,扩充了基于64bit的AArch64架构,除了新增A64(ARM64bit)指令集外,也扩充了现有的A32(ARM32bit)和T32(Thumb232bit)指令集;ARMv8拥有两种…

    2022年10月16日
  • 织梦CMS首页调用分类信息栏目及列表方法

    织梦CMS首页调用分类信息栏目及列表方法

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号