springboot为属性赋值三种方式,看这个就够了

  • Post author:
  • Post category:其他

环境:

  1. IntelliJ IDEA 2020.1.3
  2. 创建springboot项目添加web依赖

1. @Value为属性赋值

业务实现方式1:controller层实现

1.1 编辑YMl文件

格式:

xxxx:
	字段名:赋值
jdbc:
  driver: 链接mysql
  name: root用户名
  password: root密码

1.2 测试@Value为属性赋值

添加注解:@Value(value=”${xxxx.字段名}”)

package cn.tedu.demo111.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class JDBCController {
    /**
     * 1.为对象的属性赋值.
     * 利用{@value} 注解从spring容器中取值
     * spl表达式
     */
    @Value(value="${jdbc.driver}")
    private String driver;	//驱动名称
    @Value(value="${jdbc.name}")
    private String name;	//用户名信息
    @Value(value="${jdbc.password}")
    private String password;//密码

    @RequestMapping("/getMsg")
    @ResponseBody
    public String getMsg() {

        return "服务器返回数据"+driver+"|"+name+"|"+password;

    }
}

1.3 访问测试:

在这里插入图片描述

2. 批量为属性赋值@ConfigurationProperties

业务实现方式2:controller+service层
如果对象中属性个数较多.使用@value注解时可读性弱.

2.1 pom.xml

添加属性注入依赖(随着版本升级可不加)

<!--添加属性注入依赖  -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

2.2编辑YML文件

server:
  port: 8091
  servlet:
    context-path: /   #默认的发布路径就是 /

jdbc:
  jdbcName: 用户名
  jdbcDriver: 驱动名

2.3编辑service层

添加注解:@ConfigurationProperties(prefix =“jdbc”)

package cn.tedu.demo112.service;

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

@Service
@ConfigurationProperties(prefix ="jdbc")
public class JDBCServiceB {

    //规定:如果采用批量赋值的形式,
    //一定要添加set方法.
    private String jdbcName;
    private String jdbcDriver;

    @Override
    public String toString() {
        return "JDBCServiceB{" +
                "jdbcName='" + jdbcName + '\'' +
                ", jdbcDriver='" + jdbcDriver + '\'' +
                '}';
    }

    public String getJdbcName() {
        return jdbcName;
    }
    public void setJdbcName(String jdbcName) {
        this.jdbcName = jdbcName;
    }
    public String getJdbcDriver() {
        return jdbcDriver;
    }
    public void setJdbcDriver(String jdbcDriver) {
        this.jdbcDriver = jdbcDriver;
    }
}

注意:

  1. 规定:如果采用批量赋值的形式,一定要添加set方法.

2.4编辑controller层

package cn.tedu.demo112.controller;

import cn.tedu.demo112.service.JDBCServiceA;
import cn.tedu.demo112.service.JDBCServiceB;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class JDBCController{

//    //1.测试@Value为属性赋值
//    @Autowired
//    JDBCServiceA jdbcServiceA;
//
//    @ResponseBody
//    @RequestMapping("/jdbcTestA")
//    public JDBCServiceA jdbcTesetA(){
//        System.out.println(jdbcServiceA);
//        return jdbcServiceA;
//    }

    //2.测试批量赋值操作
    @Autowired//自动装配
    JDBCServiceB jdbcServiceB;

    @ResponseBody
    @RequestMapping("/jdbcTestB")
    public JDBCServiceB jdbcTestB() {
        //重写toString()方法打印结果:JDBCServiceB{jdbcName='用户名', jdbcDriver='驱动名'}
        System.out.println(jdbcServiceB);//默认打印对象的toString方法
        //对象转化JSON串时调用了对象的get方法,所以get方法必须加
        return jdbcServiceB;
    }
}

注意:

  1. 打印对象默认打印对象的toString方法
  2. 对象转化JSON串时调用了对象的get方法
  3. 再强调下@RestController注解就是@Controller+@ResponseBody的组合注解

2.5访问测试

http://localhost:8091/jdbcTestB
在这里插入图片描述

3. 制定配置文件为属性赋值

业务实现方式3:工具类+测试类
结构图
在这里插入图片描述

3.1制定文件jdbc.properties

jdbc1.jdbcName=root
jdbc1.jdbcDriver=root

在这里插入图片描述

3.2编辑工具类pojo

@Value为属性赋值
或者
添加注解:@PropertySource(value = “指定文件位置”) (添加依赖)

这里结合批量赋值方式实践:

package cn.tedu.demo112.pojo;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

@Component//交给Spring管理
@PropertySource(value = "classpath:/properties/jdbc.properties")
@ConfigurationProperties(prefix ="jdbc1")
public class User1 {
    private String jdbcName;
    private String jdbcDriver;

    @Override
    public String toString() {
        return "User1{" +
                "jdbcName='" + jdbcName + '\'' +
                ", jdbcDriver='" + jdbcDriver + '\'' +
                '}';
    }

    public void setJdbcName(String jdbcName) {
        this.jdbcName = jdbcName;
    }

    public void setJdbcDriver(String jdbcDriver) {
        this.jdbcDriver = jdbcDriver;
    }
}

注意:
开发中难免会遇到这个这个注解 @Component

  1. @controller 控制器(注入服务)
    用于标注控制层,相当于struts中的action层
  2. @service 服务(注入dao)
    用于标注服务层,主要用来进行业务的逻辑处理
  3. @repository(实现dao访问)
    用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件.
    与@Mapper的区别???
  4. @component (把普通pojo实例化到spring容器中,相当于配置文件中的)
    泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。

3.3编辑测试类

package cn.tedu.demo112;

import cn.tedu.demo112.pojo.User;
import cn.tedu.demo112.pojo.User1;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class Demo112ApplicationTests {

//    @Autowired
//    private User user;
    @Autowired
    private User1 user1;

//    @Test
//    public void testUser(){
//        System.out.println(user);
//
//    }

    @Test
    public void testUser1(){
        System.out.println(user1);
    }
}

3.4打印结果:

在这里插入图片描述

4. 总结:

以上三种方式实现方式都是不同的,当然也可以用同一种方式去实现
1.访问层代码实现
特点:不具耦合性,更简单阐述知识点
2. 分层实现,自动装配属性注入,页面访问
特点:分层实现
注意:采用批量赋值的形式,一定要添加set方法;打印对象默认打印对象的toString方法;对象转化JSON串时调用了对象的get方法
3. 测试打印
这里用到 @Component注解


版权声明:本文为weixin_43187081原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。