spring命名空间注入和XML自动装配、引入外部配置文件

news2024/11/20 13:40:17

Spring

  • p命名空间注入
  • util命名空间注入
  • 基于XML的自动装配
    • 根据名称自动装配
  • Spring引入外部属性配置文件


p命名空间注入

作用:简化配置。

使用p命名空间注入的前提条件包括两个:
● 第一:在XML头部信息中添加p命名空间的配置信息:xmlns:p=“http://www.springframework.org/schema/p”
● 第二:p命名空间注入是基于setter方法的,所以需要对应的属性提供setter方法。

Customer.java

package com.w.spring6.bean;

public class Customer {
    private String name;
    private int age;

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

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

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

spring-p.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" xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">


    <bean id="customerBean" class="com.w.spring6.bean.Customer" p:name="zhangsan" p:age="20"/>

</beans>

测试程序:

@Test
public void testP(){
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-p.xml");
    Customer customerBean = applicationContext.getBean("customerBean", Customer.class);
    System.out.println(customerBean);
}

运行结果:
在这里插入图片描述

util命名空间注入

使用util命名空间可以让配置复用。
使用util命名空间的前提是:在spring配置文件头部添加配置信息。如下:

<?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:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">

MyDataSource1.java

package com.w.spring6.jdbc;

import java.util.Properties;

public class MyDataSource1 {
    private Properties properties;

    public void setProperties(Properties properties) {
        this.properties = properties;
    }

    @Override
    public String toString() {
        return "MyDataSource1{" +
                "properties=" + properties +
                '}';
    }
}

MyDataSource2.java

package com.w.spring6.jdbc;

import java.util.Properties;

public class MyDataSource2 {
    private Properties properties;

    public void setProperties(Properties properties) {
        this.properties = properties;
    }

    @Override
    public String toString() {
        return "MyDataSource2{" +
                "properties=" + properties +
                '}';
    }
}

spring-util.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" xmlns:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util https://www.springframework.org/schema/util/spring-util.xsd">

    <util:properties id="prop">
        <prop key="driver">com.mysql.cj.jdbc.Driver</prop>
        <prop key="url">jdbc:mysql://localhost:3306/spring</prop>
        <prop key="username">root</prop>
        <prop key="password">123456</prop>
    </util:properties>

    <bean id="dataSource1" class="com.w.spring6.jdbc.MyDataSource1">
        <property name="properties" ref="prop"/>
    </bean>

    <bean id="dataSource2" class="com.w.spring6.jdbc.MyDataSource2">
        <property name="properties" ref="prop"/>
    </bean>

</beans>

测试程序:

@Test
public void testUtil(){
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-util.xml");

    MyDataSource1 dataSource1 = applicationContext.getBean("dataSource1", MyDataSource1.class);
    System.out.println(dataSource1);

    MyDataSource2 dataSource2 = applicationContext.getBean("dataSource2", MyDataSource2.class);
    System.out.println(dataSource2);
}

在这里插入图片描述

基于XML的自动装配

Spring还可以完成自动化的注入,自动化注入又被称为自动装配。它可以根据名字进行自动装配,也可以根据类型进行自动装配。

根据名称自动装配

UserDao.java

package com.w.spring6.dao;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class UserDao {

    private static final Logger logger= LoggerFactory.getLogger(UserDao.class);
    public void insert(){
        //System.out.println("数据库正在保存信息");
        logger.info("数据库正在保存信息");
    }

}

VipDao.java

package com.w.spring6.dao;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class VipDao {

    private static final Logger logger= LoggerFactory.getLogger(VipDao.class);
    public void insert(){
        logger.info("数据库正在保存vip信息");
    }
}

UserService.java

package com.w.spring6.service;

import com.w.spring6.dao.UserDao;
import com.w.spring6.dao.VipDao;

public class UserService {

    private UserDao userDao;
    private VipDao vipDao;

//    public void setAbc(VipDao vipDao){
//        this.vipDao=vipDao;
//    }

    public void setVipDao(VipDao vipDao){
        this.vipDao=vipDao;
    }

    //set注入的话,必须提供一个set方法
    //spring容器会调用这个set方法,来给userDao赋值
/*    //自己写的不符合javabean规范
    public void setMySQLUserDao(UserDao xyz){
        this.userDao=xyz;
    }*/

    //idea自动生成的符合javabean规范
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public void saveUser(){
        userDao.insert();
        vipDao.insert();

    }
}

spring-autowire.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="userService" class="com.w.spring6.service.UserService" autowire="byName"/>

    <bean id="userDao" class="com.w.spring6.dao.UserDao"/>

    <bean id="vipDao" class="com.w.spring6.dao.VipDao"/>

</beans>

测试程序:

    @Test
    public void testAutowireByName(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-autowire.xml");
        UserService userService = applicationContext.getBean("userService", UserService.class);
        userService.saveUser();
    }

运行结果:
在这里插入图片描述

Spring引入外部属性配置文件

在类路径下新建jdbc.properties文件,并配置信息

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/spring
username=root
password=123456

在spring配置文件中引入context命名空间,配置使用jdbc.properties文件

<?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 http://www.springframework.org/schema/context/spring-context.xsd">
<!--
引入外部的properties文件
第一步:引入context命名空间
第二步:使用标签location属性来指定属性配置文件的路径

-->

    <context:property-placeholder location="jdbc.properties"/>

        <bean id="dataSource" class="com.w.spring6.jdbc.MyDataSource">
            <property name="driver" value="${jdbc.driverClass}"></property>
            <property name="url" value="${jdbc.url}"></property>
            <property name="username" value="${jdbc.username}"></property>
            <property name="password" value="${jdbc.password}"></property>
        </bean>

</beans>

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

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

相关文章

88.Linux系统下关于fork的经典练习

题目描述 下列程序输出几个A&#xff1f; 运行结果 输出6个A 根据代码段仔细执行&#xff0c;注意for循环的i的值即可得出答案 下列程序输出几个A&#xff1f; (这个printf后面是不带\n也就是说不刷新缓冲区) 运行结果 输出8个A&#xff0c;要注意到此程序的printf语句没有…

Python制作国旗头像

今天教大家用几行代码快速实现一个国庆风头像&#xff0c;效果是这样的 素材&#xff1a;一张头像、一张国旗图片 思路&#xff1a;将国旗图片的每个像素点的透明度从左至右&#xff0c;从上到下逐次递减后&#xff0c;将其盖在头像上面就形成了最终的效果图。 完整代码&…

个人app编程的好处及条件

1.概要 2.个人app编程目标 开发手机软件&#xff0c;类似微信、qq等软件应用&#xff0c;解决人们日常生活问题 例如&#xff1a; 1&#xff09;你可以&#xff0c;自己开发一个网站&#xff0c;管理自己的日常生活照片&#xff0c;防止哪一天手机掉了或丢了&#xff0c;照片…

安装Node的包管理 工具Nvm之后,不能正确下载在所需要的node版本

使用命令行&#xff1a;nvm install 14.14.0 下面一直都是再运行中&#xff0c;没有任何反应 解决方法为&#xff1a; 增加nvm的下载镜像&#xff0c;一般使用淘宝的镜像 以下是在 Windows 上设置 NVM 下载镜像的步骤&#xff1a; 查看当前 NVM 配置&#xff1a; 在命令提示…

4种最常用的LLM应用文本分块策略

在构建 LLM 应用程序时&#xff0c;分块&#xff08;Chunking&#xff09;是将大块文本分解成更小的片段的过程。 这是一项重要的技术&#xff0c;一旦我们使用LLM嵌入内容&#xff0c;它有助于优化我们从矢量数据库返回的内容的相关性。 在这篇博文中&#xff0c;我们将探讨它…

什么是网络中的服务质量 (QoS)?

什么是服务质量&#xff08;QoS&#xff09; 服务质量&#xff08;QoS&#xff09;是网络中用于管理质量并确定数据流量传输优先级的机制。它确保不同类型的数据流量&#xff0c;如语音、视频和数据&#xff0c;获得适当的服务水平。其主要目标是使网络和组织能够对流量进行优…

亚马逊是如何风控虚假交易操控评论的?稳定的测评系统的重要性。

稳定的亚马逊测评系统重不重要&#xff1f; 亚马逊平台对测评行为的打击力度十分严格&#xff0c;堪称所有电商平台中最严格的一个。许多人可能会好奇&#xff0c;采用的是真人测评&#xff0c;由真实的客户群体购买产品后进行评价&#xff0c;这种模式难道也会存在风险吗&…

数电发票接口服务商怎么选择?

自2023年11月1日起&#xff0c;除了港澳台、西藏外&#xff0c;全国范围内都开展了数电票开票试点&#xff0c;对于那些已经习惯使用传统税控开票接口的企业&#xff0c;如今在数电发票的试点下&#xff0c;原本的税控开票接口如同老去的侠客&#xff0c;曾经的荣光已经不再。在…

JavaFX增删改查其他控件01界面展示

界面展示 小技巧 增删改查思路--查 底层select * from 表 where sname like %% --1.拿文本框的关键字 --2.调模糊查询的方法 myShow("")--删 底层 delete from tb_stu where sid? --1.想方设法拿学号 --1.先拿到用户所选中的学生对象 Student --2.调用方法传对象.g…

【1】Gradele概述

目录 Gradle为什么选择Gradle&#xff1f;支持的语言和框架兼容的集成开发环境许可证 兼容性JavaKotlinGroovyAndroid Gradle 与 Maven 比较灵活性性能用户体验依赖管理 个人主页: 【⭐️个人主页】 需要您的【&#x1f496; 点赞关注】支持 &#x1f4af; Gradle 【官网指南】…

【链表】数据查找和合并

获取链表中间位置的数据 #include <stdio.h> #include <stdlib.h>/* 定义链表的结构体 */ struct Node {int data;struct Node *next; };/* 获取链表中处于中间位置的元素并打印出来*/ void printMiddle(struct Node *head) {struct Node *slow_ptr head;struct …

【Linux】--进程信号

信号 1.信号入门 程序员设计进程的时候&#xff0c;早就已经设计了对信号的识别能力&#xff01;&#xff01;&#xff01;&#xff01;进程在没有收到信号的时候&#xff0c;其实它早就已经知道一个信号该怎么处理了&#xff01;因为信号可能随时会产生&#xff0c;所有在信…

鲲鹏920的架构分析

*本文信息主要来源于书籍《鲲鹏处理器架构与编程》以及论文《Kunpeng 920: The First 7-nm Chiplet-Based 64-Core ARM SoC for Cloud Services》 * 笔者已然写了一篇上述论文的分析博客&#xff0c;但尚觉论文内容对chiplet架构描述不够清晰&#xff0c;因此查阅《鲲鹏处理器…

Flutter笔记 - 关于 fit 属性以及相关知识的总结

Flutter笔记 关于 fit 属性以及相关知识的总结 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/13434451…

lenovo联想小新 Air-14 2019 AMD平台API版(81NJ)原装出厂Windows10系统

下载链接&#xff1a;https://pan.baidu.com/s/1HCC66EH4UOcgofRx5_v1oA?pwdlgqw 提取码&#xff1a;lgqw 原厂系统自带所有驱动、出厂主题壁纸、系统属性专属LOGO标志、Office办公软件、联想电脑管家等预装程序 所需要工具&#xff1a;16G或以上的U盘 文件格式&#xf…

关于Google Play应用商店的优化技巧1

作为Google Play商店ASO策略的一部分&#xff0c;我们需要查明并优化有助于应用排名的各种因素。在这里将介绍几个可以增强我们列表并增加在搜索中被发现的机会的技巧。 1、优化标题和描述字段。 在创建有效的Google Play商店列表时&#xff0c;我们应该考虑的第一个元素是应用…

易货:一种绿色、高效的商业模式

随着社会经济的发展和人民生活水平的提高&#xff0c;人们手中闲置的物品越来越多&#xff0c;如何将这些物品盘活&#xff0c;成为了一个亟待解决的问题。易货商业模式应运而生&#xff0c;它不仅可以将闲置物品变成财富&#xff0c;还可以为企业和个人带来更多的商机和资源。…

【题解】2023-11-11 B层模拟赛T1

宣传一下 算法提高课整理 CSDN个人主页&#xff1a;更好的阅读体验 原题链接 CF461B 题目描述 一棵树有 n n n 个节点&#xff0c; n − 1 n − 1 n−1 条边。树上的节点有两种&#xff1a;黑&#xff0c;白节点。 Tyk 想断掉一些边把树分成很多部分。 他想要保证每个部…

【优选算法系列】【专题二滑动窗口】第二节.1004. 最大连续1的个数 III和1658. 将 x 减到 0 的最小操作数

文章目录 前言一、最大连续1的个数 III 1.1 题目描述 1.2 题目解析 1.2.1 算法原理 1.2.2 代码编写二、将 x 减到 0 的最小操作数 2.1 题目描述 2.2 题目解析 2.2.1 算法原理 2.2.2 代码编写总结 前言 一、最大连…

迈巴赫S480升级流星雨大灯 最高配的数字大灯

“流星雨”数字大灯&#xff0c;极具辨识度&#xff0c;通过260万像素的数字微镜技术&#xff0c;实现“流星雨”仪式感与高度精确的光束分布&#xff1b;在远光灯模式下&#xff0c;光束精准度更达之前84颗LED照明的100倍&#xff0c;更新增坡道照明功能&#xff0c;可根据导航…