实现简单Spring基于XML的配置程序

这篇具有很好参考价值的文章主要介绍了实现简单Spring基于XML的配置程序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

定义一个容器,使用ConcurrentHashMap 做为单例对象的容器

  1. 先解析beans.xml
  2. 得到第一个bean对象的信息,id,class,属性和属性值
  3. 使用反射生成对象,并赋值
  4. 将创建好的bean对象放入到singletonObjects集合中
  5. 提供getBean(id)方法可以返回对应的bean对象

monster bean

public class Monster {
    private Integer id;
    private String name;
    private String skill;

    public Monster() {
    }


    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public String getSkill() {
        return skill;
    }

    public void setSkill(String skill) {
        this.skill = skill;
    }

    @Override
    public String toString() {
        return "Monster{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", skill='" + skill + '\'' +
                '}';
    }
}

package com.sparrow.spring.application;

import com.sparrow.spring.bean.Monster;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.File;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;

/**
 * @Author: 诉衷情の麻雀
 * @Description: TODO
 * @DateTime: 2023/7/24 8:09
 **/
public class SpaApplicationContext {
    private ConcurrentHashMap<String, Object> singletonObjects = new ConcurrentHashMap<>();


    //构造器 接收一个容器的配置文件
    public SpaApplicationContext(String iocBeanXmlFile) throws Exception {
        //1. 得到类加载路径
        String path = this.getClass().getResource("/").getPath();

        //2.创建SaxReader
        SAXReader saxReader = new SAXReader();

        //3.得到Document对象
        Document document = saxReader.read(new File(path + iocBeanXmlFile));

        //4.得到rootElement
        Element rootElement = document.getRootElement();

        List<Element> elements = rootElement.elements("bean");
        for (Element bean : elements) {
            String id = bean.attributeValue("id");
            String classFullPath = bean.attributeValue("class");
            Integer monsterId = null;
            String name = "";
            String skill = "";
            //遍历bean下面的property属性
            List<Element> property = bean.elements("property");
            for (Element elementProperty : property) {
                //如果是id把值存起来
                if ("id".equalsIgnoreCase(elementProperty.attributeValue("name"))) {
                    monsterId = Integer.valueOf(elementProperty.attributeValue("value"));
                } else if ("name".equalsIgnoreCase(elementProperty.attributeValue("name"))) {
                    name = elementProperty.attributeValue("value");
                } else if ("skill".equalsIgnoreCase(elementProperty.attributeValue("name"))) {
                    skill = elementProperty.attributeValue("value");
                }

                //利用反射 根据类的全路径 进行实例化
                Class<?> aClass = Class.forName(classFullPath);
                Monster o = (Monster) aClass.newInstance();
                o.setId(monsterId);
                o.setName(name);
                o.setSkill(skill);
                
                //放入容器中
                singletonObjects.put(id, o);
            }


        }
    }

    public Object getBean(String id) {
        return singletonObjects.get(id);
    }
}

beans.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 class="com.sparrow.spring.bean.Monster" id="monster01">
        <property name="id" value="1"/>
        <property name="name" value="白骨精"/>
        <property name="skill" value="吃唐僧"/>
    </bean>
    <bean class="com.sparrow.spring.bean.Monster" id="monster02">
        <property name="id" value="2"/>
        <property name="name" value="老鼠精"/>
        <property name="skill" value="吸血"/>
    </bean>

</beans>
public class Test {
    public static void main(String[] args) throws Exception {
        SpaApplicationContext spaApplicationContext = new SpaApplicationContext("beans.xml");
        Monster monster02 = (Monster) spaApplicationContext.getBean("monster02");
        Monster monster01 = (Monster) spaApplicationContext.getBean("monster01");
        System.out.println(monster02);
        System.out.println(monster01);
    }
}

实现简单Spring基于XML的配置程序,Spring,spring,xml,java文章来源地址https://www.toymoban.com/news/detail-605087.html

到了这里,关于实现简单Spring基于XML的配置程序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Spring进阶系列丨第四篇】学习Spring中的Bean管理(基于xml配置)

    在之前的学习中我们知道,容器是一个空间的概念,一般理解为可盛放物体的地方。在Spring容器通常理解为BeanFactory或者ApplicationContext。我们知道spring的IOC容器能够帮我们创建对象,对象交给spring管理之后我们就不用手动去new对象。 那么Spring是如何管理Bean的呢? 简而言之,

    2024年02月05日
    浏览(59)
  • spring的应用 xml配置实现定时任务

    创建qiuckstart的maven文件 把依赖配置改改 jdk1.8 以及12 再删掉一些不必要的配置 引入spring依赖坐标 和java同一个目录下创建resources 作为 资源根    结构如图:    spring.xml 配置: 从官网复制的 Core Technologies 复制完点击自动加载依赖 从而消除报错

    2023年04月23日
    浏览(27)
  • Spring Boot中整合MyBatis(基于xml方式&基于注解实现方式)

    在Spring Boot中整合MyBatis时,你需要导入JDBC(不需要手动添加)、Druid的相关依赖、MySQL相关依赖。 JDBC依赖:在Spring Boot中整合MyBatis时,并不需要显式地添加JDBC的包依赖。这是因为,当你添加 mybatis-spring-boot-starter 依赖时,它已经包含了对JDBC的依赖。 mybatis-spring-boot-starter 是

    2024年02月15日
    浏览(44)
  • 【Spring Boot】使用XML配置文件实现数据库操作(一)

    SQL映射文件就是我们通常说的mapper.xml配置文件,主要实现SQL语句的配置和映射,同时实现Java的POJO对象与数据库中的表和字段进行映射关联的功能。 1.1 mapper.xml的结构 下面就来详细介绍mapper.xml文件的结构。首先看一个完整的mapper.xml示例:

    2024年02月10日
    浏览(45)
  • Spring:xml 配置

    在 Spring 中,配置 bean 实例一般使用 xml 配置 方式或 注解(Annontation) 方式进行配置。 在 xml 配置中分为三种方式,分别为反射模式、工厂方法模式和 Factory Bean 模式。 反射模式 :指通过指定 bean 的 class 属性值来创建对象(最为常用,前面的文章一直使用该模式) 工厂方法

    2024年02月16日
    浏览(24)
  • Spring Boot入门(09):如何使用MyBatis的XML配置方式实现MySQL的增删改查操作?

            想要快速高效地开发Java Web应用程序,选择使用Spring Boot和MyBatis无疑是明智之举。本篇文章将教你使用MyBatis的XML配置方式,结合MySQL数据库,实现常见的增删改查操作,让你的应用程序更加实用和强大。跟随本文一起来探索MyBatis在Spring Boot中的力量吧!        

    2024年02月11日
    浏览(53)
  • 【Spring 篇】基于XML的Spring事务控制详解

    Spring框架作为Java开发中的瑞士军刀,提供了许多方便而强大的功能,其中之一就是事务管理。事务是数据库操作中的关键概念,它确保一系列操作要么全部成功,要么全部失败。今天我们将深入探讨基于XML配置的Spring事务控制,以帮助那些初学者更好地理解和应用这一关键功

    2024年01月17日
    浏览(33)
  • Spring Boot入门(09):使用MyBatis的XML配置方式访问MySQL实现增删改查 | 超级详细,建议收藏

            想要快速高效地开发Java Web应用程序,选择使用Spring Boot和MyBatis无疑是明智之举。本篇文章将教你使用MyBatis的XML配置方式,结合MySQL数据库,实现常见的增删改查操作,让你的应用程序更加实用和强大。跟随本文一起来探索MyBatis在Spring Boot中的力量吧!        

    2024年02月13日
    浏览(36)
  • spring配置文件解读——applicationContext.xml

    spring的配置文件-applicationContext.xml_听着晴天看星晴的博客-CSDN博客

    2024年02月11日
    浏览(30)
  • spring基于XML方式的组件管理

    依赖注入是一种处理对象间依赖关系的技术。在Spring中,依赖注入有构造方法注入和设值注入两种方式。 设值注入是将依赖作为成员变量,通过主调类的setter方法注入依赖。 构造方法注入则是在Bean的构造方法中注入依赖。 本次我们将通过具体例子来讲解这两种方式。 果汁

    2024年02月02日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包