模拟Spring装载bean的方式

Spring有一个ClassPathXmlApplicationContext。来获取bena的实例。

下面模拟一下。

新建一个类叫:CoolbiClassPathXmlApplicationContext.java

代码如下:

package com.test.spring;

import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.XPath;
import org.dom4j.io.SAXReader;

public class CoolbiClassPathXmlApplicationContext
{
	
	private ArrayList<BeanDefinition> beanDefines = new ArrayList<BeanDefinition>();
	
	private HashMap<String,Object> beans = new HashMap<String,Object>();
	
	public CoolbiClassPathXmlApplicationContext(String configLocation)
	{
		this.readXML(configLocation);
		this.initBean();
	}

	private void initBean()
	{
		for(BeanDefinition bean : beanDefines)
		{
			if(bean.getClassName()!=null && !"".equals(bean.getClassName().trim()))
			{
				try
				{
					beans.put(bean.getId(), (Class.forName(bean.getClassName())).newInstance());
				} catch (InstantiationException e)
				{
					e.printStackTrace();
				} catch (IllegalAccessException e)
				{
					e.printStackTrace();
				} catch (ClassNotFoundException e)
				{
					e.printStackTrace();
				}
			}
		}
	}
	
	public Object getBean(String beanName)
	{
		return beans.get(beanName);
	}

	private void readXML(String configLocation)
	{
		SAXReader saxReader = new SAXReader();   
        Document document=null;   
        try{
         URL xmlpath = this.getClass().getClassLoader().getResource(configLocation);
         document = saxReader.read(xmlpath);
         Map<String,String> nsMap = new HashMap<String,String>();
         nsMap.put("ns","http://www.springframework.org/schema/beans");//加入命名空间
         XPath xsub = document.createXPath("//ns:beans/ns:bean");//创建beans/bean查询路径
         xsub.setNamespaceURIs(nsMap);//设置命名空间
         List<Element> beans = xsub.selectNodes(document);//获取文档下所有bean节点 
         for(Element element: beans){
            String id = element.attributeValue("id");//获取id属性值
            String clazz = element.attributeValue("class"); //获取class属性值        
            BeanDefinition beanDefine = new BeanDefinition(id, clazz);
            beanDefines.add(beanDefine);
         }   
        }catch(Exception e){   
            e.printStackTrace();
        }
	}

}

 

 

 

 

 

Claude Code Auto Memory 的 Storage Location,SAP ABAP 项目里的本地记忆仓库应该怎么理解 本文介绍了 SAP ABAP 项目中 Claude Code 的 auto memory 机制,重点探讨了其存储位置的设计原理。auto memory 不是存储在项目目录中,而是默认位于 ~/.claude/projects/<project>/memory/,其中 <project> 基于 Git 仓库路径推导,确保同一仓库下的所有工作目录和分支共享记忆。记忆目录包含入口文件 MEMORY.md(仅加载前 200 行)和详细主题文件,这种分层设计类似 CDS View 架构思想。文章还分析了按 Git 仓 阅读详情

相关推荐

STM32电机库(ST-MC-Workbench)实战指南——三电阻电流采样电路参数配置详解

本文详细解析了STM32电机库(ST-MC-Workbench)中三电阻电流采样电路的参数配置方法,涵盖电阻选型、放大增益计算、滤波时间优化等关键步骤。通过实战案例和调试技巧,帮助工程师快速掌握电流采样技术,提升电机控制系统的精度与稳定性。特别针对ST-MC-Workbench界面参数设置提供了详细指导。

weixin_29186249的博客 505

SpringBoot八种bean的加载方式

2.xml:context+注解(@Component+4个@Bean3.配置类+扫描+注解(@Component+4个@Bean)@Bean定义FactoryBean接口@Configuration注解的proxyBeanMethods属性4.@Import导入bean的类@Import导入配置类5.AnnotationConfigApplicationContext调用register方法6.@Import导入ImportSelector接口。

weixin_60719453的博客 8156

实战解析:从Innovus到Calibre的LVS错误排查全流程

本文详细解析了从Innovus到Calibre的LVS错误排查全流程,涵盖物理验证关键步骤与工具链协同。通过实战案例分享,重点解决器件不匹配、连接性错误等常见问题,并提供GDS导出规范、网表修正策略等实用技巧,帮助工程师高效完成芯片设计物理验证。

9o8p7i6u5y的博客 1037

【Spring】Bean的八种加载方式

一、XML方式声明bean 配置文件 1.在xml中声明自定义的bean <?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.springfra

Hello World! 2426

10倍开发者的 Dify 魔法书:从零构建全栈 AI 应用

“不懂底层算法,也能开发爆款 AI 应用吗?” 答案是:绝对可以。 Dify 正在重新定义 AI 应用的开发范式——通过可视化的低代码平台,将原本需要数周的开发周期压缩到几小时。无论你是前端、后端、产品经理,还是渴望破局的独立开发者,这都是你不可错过的红利。 我们将手把手教你利用 Dify 快速接入百模大战,零代码搭建企业级知识库,并一键发布你的专属 AI 助手、智能客服和自动化工作流。 告别重复造轮子,掌握 Dify,一个人就是一支 AI 团队。现在上车,开启你的 10 倍速开发之旅!

davidwang456的专栏 683

Multisim14.0仿真应用设计(十六)74LS138译码器应用仿真

74LS138为3线-8线译码器。

zhusl6688的博客 2982

Spring加载Bean的多种方式

这种方式在早起的项目中很常见,但是由于容易导致配置文件的爆炸式增长,致使其难以维护,现在的使用已经越来越少。</在Java代码中可以获取名为person的bean。这样我们可以轻松获取到bean。

圆师傅的博客 578

JEDEC 标准半导体功率循环热阻测试(JESD51 系列)

【代码】JEDEC 标准半导体功率循环热阻测试(JESD51 系列)

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 468

spring中bean的装载

一:spring 对bean的装载方式 spring 对bean的装载方式存在三种: 在xml中进行显式配置; 在java中进行显式配置; 隐式的bean发现机制和自动装配; 二:自动化装配bean spring 从两个角度来实现自动化装配: 组件扫描:spring会自动发现应用上下文中所创建的bean; 自动装配:spring自动满足bean之间的依赖; 1.创建可被发现的bean (@...

片羽时光的博客 2505

SI案例分享--考虑ESD保护二极管的差分线阻抗仿真

PCB设计中的cut out参考面早已是SI评估中常用的阻抗优化方式,通过合理的仿真建模,可以提供合适的设计参考,并保持与测试结果的高度一致性。

一只豌豆象的博客 1437

飞牛fnNAS搭建个人小账本

本文介绍了如何在飞牛NAS上部署ezBookkeeping个人记账应用。该开源工具支持多平台使用,具备双因素认证、多级分类等功能。文章详细讲解了Docker激活、镜像下载、容器部署等步骤,并展示了账户管理、交易记录等基础操作。同时指导用户通过ZeroTier实现远程访问,方便随时随地使用个人记账系统。该方案既保障了数据隐私,又提供了专业记账功能,适合对财务隐私敏感的用户。

dgnankai的专栏 782

Spring的内部实现原理模拟———丑九怪

Spring的内部实现原理模拟以及其中的AOP———丑九怪Spring中Ioc的模拟Spring中AOP的模拟 Spring中Ioc的模拟 这篇随笔主要讨论Spring内部的模拟与实现,以下是大致内容: 首先在Spring中有一个BeanFactory来装载生成存储着所有类对象的Map<String, BeanDefinition>,其中键值为类全称,值为类BeanDefinitio...

丑九怪的博客 254

制作3D地形图的方法-使用GlobalMapper和3ds Max软件

打开GlobalMapper软件,在菜单栏中选择“文件”>“打开数据文件”,然后选择相应的高程数据文件。在菜单栏中选择“渲染”>“渲染设置”,根据需要进行设置,如分辨率和输出格式。选择地形对象,点击菜单栏中的“渲染”>“材质编辑器”,然后根据需要调整材质属性,如颜色、纹理和光照等。在菜单栏中选择“工具”>“高程栅格和网格”>“创建地形网格”。在菜单栏中选择“文件”>“导出”>“导出栅格格式”。打开3ds Max软件,在菜单栏中选择“文件”>“导入”,然后选择之前导出的地形数据文件。步骤3:导出地形网格。

JqlScala的博客 1535

简单模拟spring装载注入bean原理

简单模拟spring装载注入bean原理前言:自己工作时间也将近9个月了,但还没系统学习过spring的知识,近来跟着马士兵老师的spring2.5的视频学,一步一个脚印的向前走。主要步骤:一 将需要被加载的类放入beans.xml中二 通过jdom读取xml配置三 通过反射机制,将beans.xml中对应类加载进来beans.xml文件如下:<beans> <bean id="userDA

dazengq的专栏 1711

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

spring管理bean的原理

Spring容器默认情况下,当服务启动时,解析配置文件,实例化文件中的所有类。   我们直接使用spring时,获取spring注入的bean是这样的,         ApplicationContext ctx = new ClassPathXmlApplicatio

chiperfect的专栏 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java 普通类实现spring bean的自定装载

工作需要做一个定时器,但无法实现spring bean的装载,总是报空指针 写一个SpringContextUtils类实现ApplicationContextAware接口实现import java.util.Map; import org.springframework.beans.BeansException; import org.springframework.context.Appli

miaoao611的博客 2027

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

深入学习Spring框架之二构造器注入方式装配Bean

这一节我们来看看怎么使用Spring创建我们的Bean对象。     容器是Spring的核心,Spring的容器有两种类型:Bean工厂,由BeanFactory接口定义,是最简单的容器;以及应用上下文,由ApplicationContext定义。Bean工厂对于大多数应用来说太低级了,因此应用上下文更为受欢迎。     应用上下文又可以分为以下几种类型:         ClassPat

帅得山崩地裂的专栏 2462

Spring中的Bean

文章目录Bean标签作用属性Bean的生命周期实例化Bean的三种方式 Bean标签 作用 用于配置对象让spring来创建 默认情况下它调用的是类中的无参构造函数。如果没有无参构造函数则不能创建成功 属性 id:给对象在容器中提供一个唯一标识,用于获取对象 class:指定类的全限定类名,用于反射创建对象。默认情况下调用无参构造函数 scope:指定对象的作用范围 singleton:默认值,单例的 prototype:多例的 request:WEB项目中,Spring创建一个Bean

qq_45126061的博客 135

Spring源码学习<二> 《手写模拟spring加载Bean的过程》

包结构图:spring包下代表的是模拟spring的源码 定义@CompontentScan,@Compontent,@Autowired,@Scope package com.spring; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation...

weixin_52632318的博客 231

Spring笔记——模拟spring的bean管理原理以及依赖注入原理

有点时间,正好看了spring的教程,就试着写点东西模拟了下spring的这个简单过程!  强力推荐传智播客,里面的视频资源很nice! 搭建spring环境,通过junit测试效果! service包下的几个类,都比较简单 , PersonServiceDaoImpl: package com.silence.service.bean; import com.silenc

Enjoy my life! 1269

手写spring- 创建简单bean容器

文章目录目标设计简易实现 目标 springbean容器的目标是用于定义 存放 和获取bean 设计 使用map来存放bean . map的key为 bean的名称, value为 bean的定义信息 bean的定义: BeanDefinition . 用于获取这个bean的一些属性信息. 例如下图截取spring源码中, 部分的方法, 获取该bean是否是抽象的, 是否是单例的, 是否是原型的, 是否是懒加载的, 并且提供了一些set和get方法来设置bean 的属性和获取bean 的属性. 在

Java持续实践 1058

【设计模式】模拟Spring Bean工厂模拟(IoC)

Spring配置文件:applicatonContext.xml

430

【手撸Spring】第一节:初探Spring,了解Spring容器,实现一个简单的Bean容器

初探Spring,了解Spring容器

weixin_43100952的博客 238

Spring源码阅读——简单模拟Spring的控制反转IOC和依赖注入(Bean的加载和获取)

package bean.modeled; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * Created by yuyufeng on 2016/11/18. */ public cla

yyf的博客 1479
上一篇: 100多个很有用的JavaScript函数以及基础写法大集合
下一篇: 自己用到的东西
coolservices
博客等级 码龄19年 2粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值