Spring框架基础知识(05)

简介: Spring框架基础知识

接下来,就可以把读取到的值赋值给类中的2个属性,可以通过@Value注解来实现:


// 以下注解的参数是配置文件的名称
@PropertySource("jdbc.properties")
public class JdbcProperties {
    @Value("${url}") // 在注解参数的大括号的值,是jdbc.properties配置中等于号左侧的名称
    private String url;
    @Value("${driver}")
    private String driver;
    // 生成以上2个属性的Getters & Setters
}


最后,整个的读取过程是由Spring框架来完成的,所以,以上JdbcProperties类还应该被Spring框架所管理,可以采取组件扫描的做法,则创建SpringConfig类,用于指定组件扫描的包:

// 以下注解参数配置的就是组件扫描的包,同时,请保证JdbcProperties类是在这个包或其子孙包中的
@ComponentScan("cn.tedu.spring")
public class SpringConfig {
}

然后,在JdbcProperties类的声明之前,补充添加@Component注解,使得Spring框架扫描到这个类时,能明确的知道“这个类是组件类”,从而创建该类的对象:


@Component
// 以下注解的参数是配置文件的名称
@PropertySource("jdbc.properties")
public class JdbcProperties {
    @Value("${url}") // 在注解参数的大括号的值,是jdbc.properties配置中等于号左侧的名称
    private String url;
    @Value("${driver}")
    private String driver;
    // 生成以上2个属性的Getters & Setters
}


全部完成后,可以自定义某个类,用于测试运行:


package cn.tedu.spring;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class SpringTests {
  public static void main(String[] args) {
  // 1. 加载配置类,得到Spring容器
  AnnotationConfigApplicationContext ac 
    = new AnnotationConfigApplicationContext(SpringConfig.class);
  // 2. 从Spring容器中获取对象
  JdbcProperties jdbcProperties
    = (JdbcProperties) ac.getBean("jdbcProperties");
  // 3. 测试
  System.out.println(jdbcProperties.getUrl());
  System.out.println(jdbcProperties.getDriver());
  // 4. 关闭
  ac.close();
  }
}


注意:在类似于jdbc.properties这样的配置文件中,如果某个属性的名称是username,且最终项目是在Windows操作系统的平台上运行时,读取到的值将是“当前登录Windows系统的系统用户名称”,而不是jdbc.properties文件中配置的属性值!所以,一般推荐在编写jdbc.properties这类配置文件时,各属性之前最好都添加一些特有的前缀,使得属性名一定不与某些关键名称发生冲突,例如:


project.jdbc.url=jdbc:mysql://localhost:3399/db_name

project.jdbc.driver=com.mysql.jdbc.Driver

project.jdbc.username=root

project.jdbc.password=1234


并且,在使用@Value注解时,也配置为以上各个等于号左侧的完整名称:


@Component
@PropertySource("jdbc.properties")
public class JdbcProperties {
  @Value("${project.jdbc.url}")
  private String url;
  @Value("${project.jdbc.driver}")
  private String driver;
  @Value("${project.jdbc.username}")
  private String username;
  @Value("${project.jdbc.password}")
  private String password;
    // Getters & Setters
}

最后,使用Spring框架时,如果属性的值是由Spring框架进行赋值的,Spring框架会自动的处理数据类型的转换,所以,在声明属性时,声明为所期望的类型即可,例如,在配置文件中存在:


project.jdbc.initialSize=5

project.jdbc.maxTotal=20


这2个属性分别表示“初始化连接数”和“最大连接数”,应该是数值类型的,在类中声明属性时,就可以使用int或Integer类型:


@Value("${project.jdbc.initialSize}")

private int initialSize;

@Value("${project.jdbc.maxTotal}")

private int maxTotal;


当然,必须保证类型的转换是可以成功的,例如数字5既可以转换为String,又可以是int或Integer,所以,声明以上initialSize时,这几个数据类型都是可用的,根据使用需求进行选取即可!


另外,还有另一种做法读取**.properties**类型的文件,就是使用@Autowired注解为Environment类型的属性自动赋值:


@Component
@PropertySource("jdbc.properties")
public class JdbcProperties {
  @Autowired
  private Environment environment;
  public Environment getEnvironment() {
  return environment;
  }
  public void setEnvironment(Environment environment) {
  this.environment = environment;
  }
}


最终,测试运行:


package cn.tedu.spring;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class SpringTests {
  public static void main(String[] args) {
  // 1. 加载配置类,得到Spring容器
  AnnotationConfigApplicationContext ac 
    = new AnnotationConfigApplicationContext(SpringConfig.class);
  // 2. 从Spring容器中获取对象
  JdbcProperties jdbcProperties
    = (JdbcProperties) ac.getBean("jdbcProperties");
  // 3. 测试
  System.out.println(jdbcProperties.getEnvironment().getProperty("project.jdbc.url"));
  System.out.println(jdbcProperties.getEnvironment().getProperty("project.jdbc.driver"));
  System.out.println(jdbcProperties.getEnvironment().getProperty("project.jdbc.username"));
  System.out.println(jdbcProperties.getEnvironment().getProperty("project.jdbc.password"));
  System.out.println(jdbcProperties.getEnvironment().getProperty("project.jdbc.initialSize"));
  System.out.println(jdbcProperties.getEnvironment().getProperty("project.jdbc.maxTotal"));
  // 4. 关闭
  ac.close();
  }
}


可以看到,使用这种做法时,Spring框架会把读取到的所有配置信息都封装到了Environment类型的对象中,当需要获取某个配置值时,调用Environment对象的getProperty()方法再获取,同时,getProperty()方法返回的是String类型的数据,如果希望的数据类型不是String,则需要开发人员自行转换类型!


一般,还是推荐使用@Value注解逐一读取各配置值,使用起来更加灵活一些!


抽象类与接口的区别


1. 共同点


都可以包含抽象方法;


2. 区别


抽象类是一种“类”,是使用class作为关键字来声明的;而接口是另一种数据,是使用interface作为关键字来声明的;

抽象类中可以有各种权限不同、修饰符不同的属性,也可以包含普通方法、抽象方法,或者完全没有普通方法,或者完全没有抽象方法;而接口中的所有成员都是public的,所有属性都是static、final的,在JDK 1.8之前,所有的方法都是抽象的;

普通的类与抽象类的关系是“继承”的关系,当普通的类继承了抽象类后,就有义务重写抽象类中的抽象方法,在Java语句中,类之间的继承是1对1的关系;普通的类与接口的关系是”实现“的关系,当普通的类实现了接口后,也有义务重写接口中的所有抽象方法,类与接口的实现关系是1对多的,即1个类可以同时实现若干个接口;接口与接口之间也可以存在继承关系,且是1对多的关系,即某1个接口可以同时继承若干个接口;

3. 使用心得 / 装


类,是描述”类别“的;接口,是描述形为模式、行为特征、规范、标准的!


类与类之间是is a的关系;类与接口之间是has a的关系。


public class Person { public String name; }
public class Student extends Person {}
public class Teacher extends Person {}
public class Animal { }
public class Cat extends Animal {}
public interface 学习 { void 学习(某参数); }
public interface 授课 {}
public interface 驾驶 { void 驾驶(某参数); }
public class Person implements 学习, 授课, 驾驶 {}
Person 张三 = new Person();
Person 李四 = new Person();


附1:Eclipse常用快捷键

屏幕快照 2021-11-22 下午6.47.58.png


目录
相关文章
|
12天前
|
数据采集 监控 前端开发
二级公立医院绩效考核系统源码,B/S架构,前后端分别基于Spring Boot和Avue框架
医院绩效管理系统通过与HIS系统的无缝对接,实现数据网络化采集、评价结果透明化管理及奖金分配自动化生成。系统涵盖科室和个人绩效考核、医疗质量考核、数据采集、绩效工资核算、收支核算、工作量统计、单项奖惩等功能,提升绩效评估的全面性、准确性和公正性。技术栈采用B/S架构,前后端分别基于Spring Boot和Avue框架。
|
25天前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
37 4
|
27天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
132 1
|
22天前
|
Java API 数据库
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
31 0
|
16天前
|
前端开发 Java 数据库连接
Spring 框架:Java 开发者的春天
Spring 框架是一个功能强大的开源框架,主要用于简化 Java 企业级应用的开发,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,并由Pivotal团队维护。
37 1
Spring 框架:Java 开发者的春天
|
9天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
24 2
|
8天前
|
消息中间件 NoSQL Java
springboot整合常用中间件框架案例
该项目是Spring Boot集成整合案例,涵盖多种中间件的使用示例,每个案例项目使用最小依赖,便于直接应用到自己的项目中。包括MyBatis、Redis、MongoDB、MQ、ES等的整合示例。
53 1
|
16天前
|
Java 数据库连接 开发者
Spring 框架:Java 开发者的春天
【10月更文挑战第27天】Spring 框架由 Rod Johnson 在 2002 年创建,旨在解决 Java 企业级开发中的复杂性问题。它通过控制反转(IOC)和面向切面的编程(AOP)等核心机制,提供了轻量级的容器和丰富的功能,支持 Web 开发、数据访问等领域,显著提高了开发效率和应用的可维护性。Spring 拥有强大的社区支持和丰富的生态系统,是 Java 开发不可或缺的工具。
|
1月前
|
NoSQL Java Redis
redis的基本命令,并用netty操作redis(不使用springboot或者spring框架)就单纯的用netty搞。
这篇文章介绍了Redis的基本命令,并展示了如何使用Netty框架直接与Redis服务器进行通信,包括设置Netty客户端、编写处理程序以及初始化Channel的完整示例代码。
38 1
redis的基本命令,并用netty操作redis(不使用springboot或者spring框架)就单纯的用netty搞。
|
22天前
|
人工智能 开发框架 Java
总计 30 万奖金,Spring AI Alibaba 应用框架挑战赛开赛
Spring AI Alibaba 应用框架挑战赛邀请广大开发者参与开源项目的共建,助力项目快速发展,掌握 AI 应用开发模式。大赛分为《支持 Spring AI Alibaba 应用可视化调试与追踪本地工具》和《基于 Flow 的 AI 编排机制设计与实现》两个赛道,总计 30 万奖金。
下一篇
无影云桌面