当前位置:   article > 正文

入门SpringBoot之几种配置注入方式_1. 请简述一下 spring boot 中如何实现注入配置参数的方法?

1. 请简述一下 spring boot 中如何实现注入配置参数的方法?

SpringBoot比SpringMVC在依赖包的管理上更加省时省力
配置注入也和之前的SpringMVC方法有所不同

示例:在配置文件Myconfig中获取到JDBC的连接配置信息

1.首先使用IDEA创建一个Maven的项目
在pom.xml文件中添加这些简单的配置即可,如果有额外需要
可以去Maven Repository的网站上去获取配置信息:https://mvnrepository.com/

	<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.0.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>		//使用阿里的数据源即可
            <artifactId>druid</artifactId>
            <version>1.1.12</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.16</version>
        </dependency>
    </dependencies>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

在这里插入图片描述
添加完之后IDEA会自动提示你导入jar包,点击import后会自动下载这些依赖包
此时需要的环境就已经搭好了,比配置SpringMVC快了不知多少倍
在这里插入图片描述
可以看见已经将需要的包下载到本地库里了_

2.创建一个SpringBootDemo主类,在类之前添加@SpringBootApplication注解,声明此程序为SpringBoot应用程序

package edu.xatu;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringBootDemo {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootDemo.class, args);		//此方法用来启动程序,命令行参数也可以不传
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

3.接下来写一个简单的控制反转层,这一步完了就可以在网页上看见out方法里面的字符串

package edu.xatu;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class MyController {
    @GetMapping("out")          //设置此方法使用get方法请求  并配上路径   在访问网址的时候就可以跳转此方法
    @ResponseBody       			//直接响应到客户端		也就是可以直接在网页上看到
    public String out() {
        return "Hello Spring Boot";
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

4.接下来直接启动应用程序即可:
会在控制台下看见输出了这些信息:端口号,版本信息等
在这里插入图片描述
5.接下来打开浏览器输入 http://localhost:8080/out
就会跳转至刚刚写的那个控制层的out()方法
在这里插入图片描述
6.接下来写一个配置类获取到jdbc的配置信息
在resouces下创建一个jdbc.properties的配置文件
在这里插入图片描述
并在里面添加配置如下
在这里插入图片描述
7.接下来创建配置信息类,

package edu.xatu.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

@Configuration      //声明该类为配置类
@PropertySource("classpath:jdbc.properties")    	//指明配置文件位置  会自动去resouces下找到此文件
public class Myconfig {
     @Value("${jdbc.driverclass}")       //使用EL表达式获取到对应的值  	会为属性自动注入对应的值
     private String driverClass;
     @Value("${jdbc.url}")
     private String url;
 	 @Value("${jdbc.username}")
	 private String username;
 	 @Value("${jdbc.password}")
	 private String password;

    @Bean
    public DataSource dataSource() {
        DruidDataSource druidDataSource = new DruidDataSource();

        druidDataSource.setDriverClassName(driverClass);
        druidDataSource.setUrl(url);
        druidDataSource.setUsername(username);
        druidDataSource.setPassword(password);
        return druidDataSource;
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

8.配置信息都写完了,但是怎么样才能看到是否获取到配置信息呢,调试
在控制层里面作如下修改,后Debug主类
在这里插入图片描述
接下来跟启动的时候一样,在浏览器中输入端口号,跳转至out()方法
在这里插入图片描述
在这里插入图片描述
可以看见已经成功获取到配置信息
但是有没有发现在配置类里面的东西过于复杂,如果配置信息过多的话,会让人看的眼花缭乱

接下来做如下修改

9.创建一个专有的获取配置信息的类DBprop,之前的配置信息是放在jdbc.properties文件中,使用的时候需要指定下路径,这里有一个简单的方法,将jdbc.properties文件改名为application.properties,因为springBoot的默认配置文件就叫这个名字,这样就省去了使用注解指定路径的形式
在这里插入图片描述
此类会在实例化的时候自动调用get,set方法为属性赋值
@Component 注解同时也会实例化此类

package edu.xatu.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@ConfigurationProperties(prefix = "jdbc")   //prefix定义配置文件中属性  在配置文件中指定了属性的类型,理解为前缀也可以
@Component      		//自动实例化
public class DBprop {
    private String driverClass;
    private String url;
    private String username;
    private String password;

    public String getDriverClass() {
        return driverClass;
    }

    public void setDriverClass(String driverClass) {
        this.driverClass = driverClass;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

和之前的配置类相比,这样就简洁明了了很多
并且可以直接给方法传入已经实例化的DBprop,然后使用get方法就方便了很多

package edu.xatu.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;

@Configuration      //声明配置类
public class Myconfig {

    @Bean
    public DataSource dataSource(DBprop prop) {
        DruidDataSource druidDataSource = new DruidDataSource();

        druidDataSource.setDriverClassName(prop.getDriverClass());
        druidDataSource.setUrl(prop.getUrl());
        druidDataSource.setUsername(prop.getUsername());
        druidDataSource.setPassword(prop.getPassword());
        return druidDataSource;
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

这样也是可以和最开始的那种方法得到同样的结果

10.当然也可以使用另外一种方法实例化DBprop
在DBprop中删除掉@Component 注解
在配置类之前添加@EnableConfigurationProperties(DBprop.class)此注释也是可以的
在这里插入图片描述
在这里插入图片描述
这样也是可以得到和最开始一样的效果

11.当然还有一种吊炸天的方法,可以做到连之前实例化配饰属性的DBprop都可以不要,配置类方法里面的东西都不要,直接返回一个实例化的对象即可,和上面配置方法类似,只是这次将注解加到了方法前面,意味着只为此方法服务

但是得记住一点,内部装配还是要用默认的get,set方法,那么意味着就得符合命名规范啦,所以就得更改application.properties中的属性名称

之前使用的是这样的get方法:
在这里插入图片描述
所以就得按照国际通用的命名规范做出修改如下:
在这里插入图片描述
这样会使代码更加简洁明了,可读性更高
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/90472
推荐阅读
相关标签
  

闽ICP备14008679号