springboot的前置知识:通过注解创建对象和读取配置文件

1. JavaConfig

设计思想

  • 使用java类作为xml配置文件的替代,是配置spring容器的纯java的方式
  • 可以创建java对象并把对象注入到spring容器中

注解实现

  • @Configuration : 放在一个类的上面,表示这个类是作为配置文件使用的
  • @Bean:放在返回值是对象的方法上,容器启动时,声明对象,并把对象注入到容器中
  • 上面两个注解配套使用

代码实现

package com.example.springboot.configuration;

import com.example.springboot.model.Student;
import org.springframework.context.annotation.*; @Configuration
public class SpringConfig {
@Bean
public Student getStudent(){
Student student = new Student();
student.setName("橘子");
student.setAge(18);
return student;
} @Bean(name = "student")
public Student getStudentByBeanName(){
Student student = new Student();
student.setName("饺子");
student.setAge(21);
return student;
}
}

测试代码

package com.example.springboot.testspringconfig;

import com.example.springboot.configuration.SpringConfig;
import com.example.springboot.model.Student;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class TestSpringConfig {
@Test
public void testSpringConfig(){
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfig.class);
Student student = (Student) applicationContext.getBean("student");
//未在@Bean中指定对象名称时,从方法名(小驼峰命名规范)来获取对象
//Student student = (Student) applicationContext.getBean("getStudent");
System.out.println("获取到的对象: " + student);
}
}

2. @ImportResource

设计思想

  • 导入其他的xml配置文件, 等于在xml 使用如下import标签
<import resources="其他配置文件"/>

代码实现

  • SpringConfig类
package com.example.springboot.configuration;

import org.springframework.context.annotation.*;

@ImportResource(value = "classpath:applicationContext.xml")
public class SpringConfig { }
  • applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="cat" class="com.example.springboot.model.Cat">
<property name="catCard" value="0010"/>
<property name="catName" value="tomcat"/>
</bean>
</beans>

测试代码

package com.example.springboot.testspringconfig;

import com.example.springboot.configuration.SpringConfig;
import com.example.springboot.model.Cat;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class TestSpringConfig {
@Test
public void testImportResource(){
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfig.class);
Cat cat = (Cat) applicationContext.getBean("cat");
System.out.println("获取到的对象: " + cat);
}
}

3. @PropertyResource

设计思想

  • 读取properties属性配置文件,使用属性配置文件可以实现外部化配置

使用步骤

  • 在resources目录下,创建properties文件, 使用 key=value 的格式提供数据
  • 在@PropertyResource 指定properties文件的位置
  • 使用在待注入值的变量上使用@Value(value="${key}")

需要用的其他注解

  • @Component:用在实体类上
  • @ComponentScan:SpringConfig类上
  • @Value:待注入值的属性上

代码实现

  • SpringConfig类
package com.example.springboot.configuration;

import com.example.springboot.model.Student;
import org.springframework.context.annotation.*; @PropertySource(value = "classpath:food.properties")
@ComponentScan(basePackages = "com.example.springboot.model")
public class SpringConfig {
}
  • food.properties
food.name=饺子
food.price=13
  • JiaoZi类
package com.example.springboot.model;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; @Component("jiaozi")
public class JiaoZi { @Value("${food.name}")
private String name;
@Value("${food.price}")
private double price; @Override
public String toString() {
return "JiaoZi{" +
"name='" + name + '\'' +
", price=" + price +
'}';
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public double getPrice() {
return price;
} public void setPrice(double price) {
this.price = price;
} public JiaoZi(String name, double price) {
this.name = name;
this.price = price;
} public JiaoZi() {
}
}

测试代码

package com.example.springboot.testspringconfig;

import com.example.springboot.configuration.SpringConfig;
import com.example.springboot.model.JiaoZi;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class TestSpringConfig { @Test
public void testPropertiesSource(){
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfig.class);
JiaoZi jiaoZi = (JiaoZi) applicationContext.getBean("jiaozi");
System.out.println("food: " + jiaoZi);
}
}

SpringBoot 01: JavaConfig + @ImportResource + @PropertyResource的更多相关文章

  1. SpringBoot开发使用@ImportResource注解影响拦截器

    问题描述 今天在给SpringBoot项目配置拦截器的时候发现怎么都进不到拦截器的方法里面,在搜索引擎上看了无数篇关于配置拦截器的文章都没有找到解决方案. 就在我准备放弃的时候,在 CSDN 上发现了 ...

  2. SpringBoot 01 概述

    官方文档 https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/ 简介 SpringBoot 是一个 JavaWeb ...

  3. SpringBoot 01 hello world 01

    hello world项目结构: pom中配置的依赖相当于spring boot的可安装插件,需要下载的依赖直接在里边配置. 目前用到的每个注解: 1.主程序中 @SpringBootApplicat ...

  4. SpringBoot系列之Spring容器添加组件方式

    SpringBoot系列之Spring容器添加组件方式 本博客介绍SpringBoot项目中将组件添加到Spring容器中的方法,SpringBoot项目有一个很明显的优点,就是不需要再编写xml配置 ...

  5. MyBatis原理,Spring、SpringBoot整合MyBatis

    1. MyBatis概述 MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可 ...

  6. 【springboot】知识点总结

    [springboot 基础编] 01.SpringBoot>01 - 第一个应用–HelloWorld 02.SpringBoot>02 - 整合 MyBatis 03.SpringBo ...

  7. 编程从入门到放弃(Java)

      1.Java入门篇 1.1 基础入门和面向对象 1.1.1 编程基础 [01] Java语言的基本认识 [02] 类和对象 [03] 类的结构和创建对象 [04] 包和访问权限修饰符 [05] 利 ...

  8. Spring in Action 4th 学习笔记

    约定: 一.@Xxx Class 表示被@Xxx注解的类.同理还有@Xxx注解的字段或方法. 例如:@Bean Method. 二.@Component Class 同时代指 @Controller. ...

  9. Spring Boot2(001):入门介绍和一些官网链接参考

    Spring官方文档比较齐全,学习的过程中可以多参考官方文档,最权威的版本.01.Spring Boot的一些官方链接 01.01 Spring Boot官网 https://spring.io/pr ...

随机推荐

  1. 弹簧高跷题解---双向DP---DD(XYX)​​​​​​​的博客

    三 . 弹簧高跷 时间限制: 1 Sec  内存限制: 128 MB 题目描述.输入.输出          ----------- 方法 这道题用DP是可以解决的.因为每一次跳跃都与前一次跳跃有关, ...

  2. Windows 系统 PostgreSQL 手工安装配置方法

    自从2020年底开始接触 PostgreSQL 以来就喜欢上了这个数据库,个人感觉比 MySQL 好用,多表联合查询性能好很多,同时也不存在 SQLServer 的版权授权费用问题.搭配 .NET 开 ...

  3. 第八十三篇:Vue购物车(四) 总价计算

    好家伙, 1.总价计算 来了,又先是一波分析: 我们用一个计算属性amt 我们把item中被勾选的项用一个过滤器过滤器来 然后用一个循环相加,把商品的价格乘以商品的数量, 把这个总值返回出去, 然后组 ...

  4. FastJson远程命令执行漏洞学习笔记

    FastJson远程命令执行漏洞学习笔记 Fastjson简介 fastjson用于将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean.fastjson.ja ...

  5. 如何使用Postman快速简单的调用快递物流平台快递鸟API接口

    前沿 快递鸟是一家聚合类的第三方快递物流平台,目前该平台提供的产品主要以API为主.由于API不能直观的看到产品效果,需要进行API对接联调成功后才能真实的看到产品的实际效果.但是如果一上来就写代码进 ...

  6. Session认证机制与JWT认证机制

    一.什么是身份认证? 身份认证(Authentication)又称"身份验证"."鉴权",是指通过一定的手段,完成对用户身份的确认.日常生活中的身份认证随处可见 ...

  7. KingbaseES V8R3 集群专用机网关失败分析案例

    ​ KingbaseES R3集群网关检测工作机制: 1.Cluster下watchdog进程在固定间隔时间,通过ping 网关地址监控链路的连通性,如果连通网关地址失败,则修改cluster sta ...

  8. 基于anaconda3的Pytorch环境搭建

    安装anaconda3,版本选择新的就行 打开anaconda prompt创建虚拟环境conda create -n pytorch_gpu python=3.9,pytorch_gpu是环境名称, ...

  9. 多版本并发控制 MVCC

    介绍多版本并发控制 多版本并发控制技术(Multiversion Concurrency Control,MVCC) 技术是为了解决问题而生的,通过 MVCC 我们可以解决以下几个问题: 读写之间阻塞 ...

  10. 【全网最全】springboot整合JSR303参数校验与全局异常处理

    一.前言 我们在日常开发中,避不开的就是参数校验,有人说前端不是会在表单中进行校验的吗?在后端中,我们可以直接不管前端怎么样判断过滤,我们后端都需要进行再次判断,为了安全.因为前端很容易拜托,当测试使 ...