【SpringBoot知识点预备】| Xml 和 JavaConfig

news2024/11/18 23:47:24

目录

一:Xml 和 JavaConfig

1. JavaConfig

2. @ImportResource注解

3. @PropertyResource注解


一:Xml 和 JavaConfig

1. JavaConfig

(1)为什么要使用 Spring Boot?

①因为Spring、SpringMVC 的使用需要大量的配置文件 (xml文件),还需要配置各种对象,把使用的对象放入到spring容器中才能使用对象,需要了解其他框架配置规则;在未编写真正的业务代码时,就已经编写了大量的配置文件!

SpringBoot 就相当于不需要配置文件的Spring+SpringMVC,常用的框架和第三方库都已经配置好了,拿来就可以使用了,所以使用SpringBoot开发效率高。

(2)Xml 和 JavaConfig

Spring 使用 Xml 作为容器配置文件, 在 3.0 版本以后加入了 JavaConfig,使用 java 类做配置文件使用。

(3)什么是 JavaConfig?

JavaConfig: 使用Java类作为Xml配置文件的替代, 是配置spring容器的纯java的方式。 在这个java类这可以创建java对象,把对象放入spring容器中(注入到容器)。

优点:

①可以使用面向对象的方式, 一个配置类可以继承配置类,可以重写方法;

②避免繁琐的 xml 配置;

使用JavaConfig需要两个注解的支持:

@Configuration : 放在一个类的上面,表示这个类是作为配置文件使用的。

@Bean:声明对象,把对象注入到容器中。

pom.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.zl</groupId>
    <artifactId>study-springboot-001</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>

    <dependencies>
        <!--引入spring依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.1</version>
        </dependency>
        <!--引入junit依赖-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <!-- 配置编译插件 -->
    <build>
        <plugins>
            <!-- 编译插件 -->
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <!-- 插件的版本 -->
                <version>3.5.1</version>
                <!-- 编译级别 -->
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <!-- 编码格式 -->
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>


    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

</project>

Student类

package com.zl.springboot.pojo;

public class Student {
    private String name;
    private Integer age;
    private String sex;

    public Student() {
    }

    public Student(String name, Integer age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}

第一种:使用传统的XML配置文件的方式管理Bean

spring.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="studentBean" class="com.zl.springboot.pojo.Student">
        <property name="name" value="张三"/>
        <property name="age" value="18" />
        <property name="sex" value="男"/>
    </bean>
</beans>

单元测试:

package com.zl.springboot.test;

import com.zl.springboot.pojo.Student;
import javafx.application.Application;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringBootTest {
    @Test
    public void test01(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
        Student studentBean = applicationContext.getBean("studentBean", Student.class);
        System.out.println(studentBean);
    }
}

第二种:使用JavaConfig来管理Bean对象

创建一个Java类,在类上引入@Configuration注解,在方法上引入@Bean注解

@Configuration:表示当前类是作为配置文件使用的,就是用来配置容器的;位置:在类的上面;SpringConfig这个类就相当于spring.xml配置。
@Bean: 创建方法,方法的返回值是对象。 在方法的上面加入@Bean,把方法的返回值对象就注入到容器中;位置:在方法的上面;把对象注入到spring容器中, 作用相当于<bean>标签;若@Bean不指定对象的名称,默认是方法名就是id。

package com.zl.springboot.config;

import com.zl.springboot.pojo.Student;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration // 当前类作为配置文件使用
public class SpringConfig {
    @Bean // 不指定默认id是方法名
    // @Bean("myStudent") // 也可以自己指定id
    public Student createStudent(){
        Student student = new Student();
        student.setName("李四");
        student.setAge(19);
        student.setSex("女");
        return student; // 返回这个对象
    }
}

单元测试:

创建AnnotationConfigApplicationContext对象,参数就是我们的SpringConfig类的.class。

②还是调用getBean方法,方法参数默认就是上面的方法名,或者使用自己指定的。

    @Test
    public void test02(){
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfig.class);
        // 使用默认的,id就是方法名
        Student student = applicationContext.getBean("createStudent", Student.class); 
        // 使用自己指定的id
        Student student = applicationContext.getBean("myStudent", Student.class); /
        System.out.println(student);
    }

2. @ImportResource注解

@ImportResource作用:导入其他的xml配置文件, 例如:把前面的spring.xml核心配置导入SpringConfig类(配置spring容器的纯java方式)当中。等同于在XML中:

<!--导入其它配置文件-->
<import resources="其他配置文件"/>

@ImportResource源码:有两个数组参数,value和locations,互为别名,效果是等价的

package org.springframework.context.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.beans.factory.support.BeanDefinitionReader;
import org.springframework.core.annotation.AliasFor;

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
public @interface ImportResource {
    @AliasFor("locations")
    String[] value() default {};

    @AliasFor("value")
    String[] locations() default {};

    Class<? extends BeanDefinitionReader> reader() default BeanDefinitionReader.class;
}

Cat类

package com.zl.springboot.pojo;

/**
 * @Author:朗朗乾坤
 * @Package:com.zl.springboot.pojo
 * @Project:spring-boot
 * @Date:2023/3/2 18:54
 */
public class Cat {
    private String cardId;
    private String name;
    private Integer age;

    public Cat() {
    }
    public Cat(String cardId, String name, Integer age) {
        this.cardId = cardId;
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Cat{" +
                "cardId='" + cardId + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public String getCardId() {
        return cardId;
    }

    public void setCardId(String cardId) {
        this.cardId = cardId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

catbean.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="studentBean" class="com.zl.springboot.pojo.Cat">
        <property name="cardId" value="1111" />
        <property name="name" value="大红" />
        <property name="age" value="8" />
    </bean>
</beans>

把catbean.xml核心配置,通过@ImportResource注解引入到SpringConfig类当中

单元测试:

通过new AnnotationConfigApplicationContext(SpringConfig.class),调用getBean方法,id是Cat的id,也能成功创建Bean,说明成功把spring.xml文件引入到SpringConfig当中了。

    @Test
    public void test03(){
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfig.class);
        Cat catBean = applicationContext.getBean("catBean", Cat.class);
        System.out.println(catBean);
    }

3. @PropertyResource注解

@PropertyResource作用: 读取xxx.properties属性配置文件。使用属性配置文件可以实现外部化配置 ,在程序代码之外提供数据。等同于在xml中:

<!--引入外部配置文件-->
<properties resource="jdbc.properties"/>

步骤:

①在resources目录下,创建properties文件, 使用k=v的格式提供数据

②在PropertyResource 指定properties文件的位置

③使用@Value(value="${key}")

config.properties属性配置文件

tiger.name=东北虎
tiger.age=3

Tiger类:使用注解式开发

package com.bjpowernode.vo;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component("tiger") // 交给Spring容器管理
public class Tiger {

    @Value("${tiger.name}") // 进行赋值
    private String name;
    @Value("${tiger.age}")
    private Integer age;

    @Override
    public String toString() {
        return "Tiger{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

在SpringConfig类当中引入包扫描和使用@PropertyResource注解引入外部属性文件

 单元测试:

    @Test
    public void test05(){
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfig.class);
        Tiger tiger = applicationContext.getBean("tiger", Tiger.class);
        System.out.println(tiger);
    }

如果此时出现了中文乱码,进行以下设置:

其实以下注解就等同与在xml配置中配置以下信息

@Configuration // 代表xml配置
@ImportResource(value = "classpath:catbean.xml") // 导入其它xml配置
@PropertySource(value = "classpath:config.properties") // 引入外部属性配置文件
@ComponentScan(basePackages = "com.zl.springboot.pojo") // 扫描包,带有@Component注解的就可以被创建出来

与上面是等价的 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
    
    <import resource="classpath:catbean.xml" />
    <context:property-placeholder location="classpath:config.properties" />
    <context:component-scan base-package="com.zl.springboot.pojo" />
</beans>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/554378.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java EE】Springboot

Springboot Springboot 核心功能SpringBoot的相关好处 Springboot 核心功能 1、 可独立运行的Spring项目&#xff1a;Spring Boot可以以jar包的形式独立运行。 2、 内嵌的Servlet容器&#xff1a;Spring Boot可以选择内嵌Tomcat、Jetty或者Undertow&#xff0c;无须以war包形…

python cuda torch验证是否成功安装,版本是否匹配

1 、首先查看自己的显卡型号 根据nvcc-smi查到自己的显卡型号,如下图所示。 本人的电脑显卡型号为:GeForce GT 730 2、查看显卡算力 可以通过以下链接查找 http://www.5ityx.com/cate100/155907.html 可以看到我的显卡算力是3.5 备注:你的显卡计算力必须保证在3.5以上。如…

Kali-linux破解纯文本密码工具mimikatz

mimikatz是一款强大的系统密码破解获取工具。该工具有段时间是作为一个独立程序运行。现在已被添加到Metasploit框架中&#xff0c;并作为一个可加载的Meterpreter模块。当成功的获取到一个远程会话时&#xff0c;使用mimikatz工具可以很快的恢复密码。本节将介绍使用mimikatz工…

使用Python获取公众号下所有的文章

我比较喜欢看公众号&#xff0c;有时遇到一个感兴趣的公众号时&#xff0c;都会感觉相逢恨晚&#xff0c;想一口气看完所有历史文章。本文主要介绍了使用Python获取公众号下所有的文章&#xff0c;感兴趣的可以了解一下 导出公众号所有文章 随着互联网的不断发展&#xff0c;网…

【源码篇】基于SpringBoot+Jsp的日记记录系统

1、项目介绍 基于SpringBootJsp的日记记录系统所有功能均对用户开放&#xff0c;只有用户角色。 是一款面向用户的系统&#xff0c;用户可以自己注册账号进行登录&#xff0c;管理自己的信息(个人中心)、自由添加日记分类、发布日记来记录自己所遇到有趣的人和事、也可以发表…

BiFormer 实验记录

代码来自文中地址 目录 一、前向传播过程 1、Path Embedding 2、BiFormer Block BRA模块 网络结构 一、前向传播过程 1、Path Embedding 见网络结构部分&#xff0c;4倍下采样 2、BiFormer Block 对应 x x self.pos_embed(x) 对应 x x self.drop_path(self.attn(…

【5.22】七、移动App测试

目录 7.1 移动App测试概述 1. 移动App特性 2. 移动App测试与传统软件测试的区别 7.2 移动App测试要点 7.2.1 UI测试 7.2.2 功能测试 7.2.3 专项测试 7.2.4 性能测试 7.3 移动App测试流程 第三方测试平台 7.4 移动App测试工具 7.1 移动App测试概述 移动App&#xff…

就业内推 | 应届生专场,有华为、思科认证优先,六险一金

01 金科 &#x1f537;招聘岗位&#xff1a;网络工程师 &#x1f537;职责描述&#xff1a; 1、为银行、企业客户提供技术服务&#xff08;包括驻场支持和现场技术支持&#xff09;&#xff1b; 2、驻客户现场配合客户完成思科、华三、华为主流网络设备的配置、管理&#xff1…

基于C++的类UNIX文件系统

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 一、题目要求 使用一个普通的大文件&#xff08;如 c:\myDisk.img &#xff0c;称之为一级文件&#xff09;模拟 UNIX V6的一个文件卷&#xff0c;一个文件卷实际上就是一张逻辑磁盘&#xff0c;磁盘中存储的信息以块为单位。…

小航助学2023年3月GESP_C++一级试卷(含题库答题软件账号)

GESP在线模拟训练系统请点击 电子学会-全国青少年编程等级考试真题Scratch一级&#xff08;2019年3月&#xff09;在线答题_程序猿下山的博客-CSDN博客_小航答题助手 答案:B 第1题以下不属于计算机输入设备的有&#xff08; &#xff09;。 A、键盘B、音箱C、鼠标D、传感器 …

如何使用Python和wxPython构建一个HTML Title提取工具

以下代码可以用于以下场景&#xff1a; 在Web开发中&#xff0c;获取网页中的Title内容&#xff0c;以用于页面SEO。在数据挖掘和分析中&#xff0c;获取包含Title信息的HTML页面&#xff0c;以进行进一步的文本处理和分析。在一些需要从HTML源代码中获取元数据的应用中&#…

STM32单片机语音识别家庭灯光控制系统

实践制作DIY- GC0132-语音识别家庭灯光控制系统 一、功能说明&#xff1a; 基于STM32单片机设计-语音识别家庭灯光控制系统 二、功能介绍&#xff1a; STM32F103C系列最小系统板语音识别模块18650锂电池太阳能充电板LCD1602显示器4个LED灯板对应卧室、厨房、客厅、厕所…

Springboot +spring security,自定义认证器实现验证码功能

一.简介 SpringSecurity 默认是不支持验证码功能的&#xff0c;但是可以自己扩展&#xff0c;这也是使用SpringSecurity的好处之一&#xff0c;原生不支持&#xff0c;我们就自己扩展。 二.思路分析 因为系统默认的有一个DaoAuthenticationProvider 认证处理器&#xff0c;但…

springboot+java高校学生学分置换系统安全开发

本选题具有以下5个方面的意义&#xff1a; &#xff08;1&#xff09;减少人工的繁琐宣传组织统计时间&#xff0c;提高工作效率和工作精确度以扩大比赛的规模[4]。 &#xff08;2&#xff09;将人工阶段难以实现的公开、公正、公平&#xff0c;通过多方监督的方法进行解决。 &…

美陆军面向战场物联网的边缘智能发展综述

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

UVC调用过程部分细节分析

UVC调用过程部分细节分析 文章目录 UVC调用过程部分细节分析概括分析UVC驱动调用过程1.open:ioctl 2.VIDIOC_QUERYCAP3.VIDIOC_ENUM_FMT4.VIDIOC_G_FMT5.VIDIOC_TRY_FMT6.VIDIOC_S_FMT /7.VIDIOC_REQBUFS8.VIDIOC_QUERYBUF9.mmap10.VIDIOC_QBUF11.VIDIOC_STREAMON12.poll13.VID…

基于Java+SpringBoot+vue+element实现校园疫情防控系统详细设计和实现

基于JavaSpringBootvueelement实现校园疫情防控系统详细设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源…

好用又便宜的平替苹果笔有哪些?平价的平板触控笔推荐

苹果的Pencil在最近一直都受到市场的追捧&#xff0c;而苹果原装的那款电容笔&#xff0c;除了性能好&#xff0c;还有就是价格贵了点。当然&#xff0c;你也可以使用这款Apple Pencil&#xff0c;但是&#xff0c;如果你不愿意花费太多的钱&#xff0c;可以选择一个平替的电容…

低功耗红外测距感应模块 引领皂液机的革新应用方案WTU201F2 B004

作为现代社会卫生意识的提升&#xff0c;智能洗手设备在公共场所的普及变得越来越重要。为了满足市场需求&#xff0c;唯创知音推出了全新的WTU201F2 B004红外测距模块&#xff0c;作为皂液机红外感应模块&#xff0c;凭借其低功耗和小体积的特点&#xff0c;这款模组将成为开发…

本地电脑部署微力同步私人网盘,端口映射实现远程访问

✨个人主页&#xff1a;bit me&#x1f447; 目 录 &#x1f43e;1.前言&#x1f490;2. 微力同步网站搭建&#x1f338;2.1 微力同步下载和安装&#x1f337;2.2 微力同步网页测试&#x1f340;2.3 cpolar的安装和注册 &#x1f339;3.本地网页发布&#x1f33b;3.1 Cpolar云端…