入门SpringBoot之几种配置注入方式

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>

在这里插入图片描述
添加完之后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);		//此方法用来启动程序,命令行参数也可以不传
    }
}

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";
    }
}

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;
    }
}

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;
    }
}

和之前的配置类相比,这样就简洁明了了很多
并且可以直接给方法传入已经实例化的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;
    }
}

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

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

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

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

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

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值