目录
环境:
- IntelliJ IDEA 2020.1.3
- 创建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;
}
}
注意:
- 规定:如果采用批量赋值的形式,一定要添加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;
}
}
注意:
- 打印对象默认打印对象的toString方法
- 对象转化JSON串时调用了对象的get方法
- 再强调下@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
- @controller 控制器(注入服务)
用于标注控制层,相当于struts中的action层 - @service 服务(注入dao)
用于标注服务层,主要用来进行业务的逻辑处理 - @repository(实现dao访问)
用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件.
与@Mapper的区别??? - @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 版权协议,转载请附上原文出处链接和本声明。