模拟spring的注入和读取配置文件(ApplicationContext.xml)

Jasypt 开源加密库使用教程 Jasypt 加密框架概述 1、Jasypt Spring Boot 为 spring boot 应用程序中的属性源提供加密支持,出于安全考虑,Spring boot 配置文件中的敏感信息通常需要对它进行加密/脱敏处理,尽量不使用明文,要实现这一点,办法有很多,自己手动对敏感信息进行加解密也是可以的。 2、有需求就有人奉献,Jasypt 开源安全框架就是专门用于处理 Spring boot 属性加密的,在配置文件中直接配置密文,然后应用启动的时候,Jasypt 会自动将密码解密成明文供程序使用。 3、 阅读详情

转载自:http://blog.csdn.net/xiangsuixinsheng/article/details/6539324

场景:用户添加到数据库中

传统方式保存实例3个问题:

1/改动数据保存方式,如保存到XML文件中会造成程序变更

2/UserService无法在单实例情况下被重用,因为它的声明在test.java

3/UserService引用其它资源不便

 

[java]  view plain copy
  1. package com.bjsxt.dao;  
  2. import com.bjsxt.model.User;  
  3.   
  4. public interface UserDAO {  
  5.     public void save(User user);  
  6. }  


 

[java]  view plain copy
  1. package com.bjsxt.dao.impl;  
  2. import com.bjsxt.dao.UserDAO;  
  3. import com.bjsxt.model.User;  
  4.   
  5. public class UserDAOImpl implements UserDAO {  
  6.   
  7.     public void save(User user) {  
  8.         //Hibernate  
  9.         //JDBC  
  10.         //XML  
  11.         //NetWork  
  12.         System.out.println("数据保存进数据库:user " + user.getUsername()+" saved!");  
  13.     }  
  14. }  


 

Bean.xml配置文件

[html]  view plain copy
  1. <beans>  
  2.     <bean id="u" class="com.bjsxt.dao.impl.UserDAOImpl" />  
  3.     <bean id="userService" class="com.bjsxt.service.UserService" >  
  4.         <property name="userDAO" bean="u"/>  
  5.     </bean>  
  6. </beans>  



 

BeanFactory接口

[java]  view plain copy
  1. package com.bjsxt.spring;  
  2. //BeanFactory接口取得相对应的Bean对象引用  
  3. public interface BeanFactory {  
  4.     public Object getBean(String id);  
  5. }  


 

模拟ClassPathXmlApplicationContext()取得

[java]  view plain copy
  1. package com.bjsxt.spring;  
  2. import java.lang.reflect.Method;  
  3. import java.util.HashMap;  
  4. import java.util.List;  
  5. import java.util.Map;  
  6.   
  7. import org.jdom.Document;  
  8. import org.jdom.Element;  
  9. import org.jdom.input.SAXBuilder;  
  10. // jdom读取xml文件  
  11. public class ClassPathXmlApplicationContext implements BeanFactory {  
  12.       
  13.     private Map<String , Object> beans = new HashMap<String, Object>();  
  14.       
  15.     //IOC Inverse of Control DI Dependency Injection  
  16.     public ClassPathXmlApplicationContext() throws Exception {  
  17.         SAXBuilder sb=new SAXBuilder();  
  18.           
  19.         Document doc=sb.build(this.getClass().getClassLoader().getResourceAsStream("beans.xml")); //构造文档对象  
  20.         Element root=doc.getRootElement(); //获取根元素  
  21.         List list=root.getChildren("bean");//取名字为bean的所有元素  
  22.         for(int i=0;i<list.size();i++){  
  23.            Element element=(Element)list.get(i);  
  24.            String id=element.getAttributeValue("id");  
  25.            String clazz=element.getAttributeValue("class");  
  26.            Object o = Class.forName(clazz).newInstance();  
  27.            System.out.println("BeanId = " + id);  
  28.           System.out.println("ClassName = " + className);          beans.put(id, o);  
  29.              
  30.            for(Element propertyElement : (List<Element>)element.getChildren("property")) {  
  31.                String name = propertyElement.getAttributeValue("name"); //userDAO  
  32.                String bean = propertyElement.getAttributeValue("bean"); //u  
  33.                Object beanObject = beans.get(bean);//UserDAOImpl instance  
  34.                  
  35.                String methodName = "set" + name.substring(01).toUpperCase() + name.substring(1);  
  36.                System.out.println("method name = " + methodName);  
  37.                  
  38.                Method m = o.getClass().getMethod(methodName, beanObject.getClass().getInterfaces()[0]);  
  39.                m.invoke(o, beanObject);  
  40.            }  
  41.         }    
  42.     }  
  43.   
  44.     public Object getBean(String id) {  
  45.         return beans.get(id);  
  46.     }  
  47. }  


 

[java]  view plain copy
  1. package com.bjsxt.service;  
  2. import org.junit.Test;  
  3.   
  4. import com.bjsxt.dao.UserDAO;  
  5. import com.bjsxt.model.User;  
  6. import com.bjsxt.spring.BeanFactory;  
  7. import com.bjsxt.spring.ClassPathXmlApplicationContext;  
  8.   
  9. public class UserServiceTest {  
  10.   
  11.     @Test  
  12.     public void testAdd() throws Exception {  
  13. //Spring IoC容器的实例化非常简单  
  14.         BeanFactory applicationContext = new ClassPathXmlApplicationContext();  
  15.           
  16.         UserService service = (UserService)applicationContext.getBean("userService");  
  17.           
  18.         User u = new User();  
  19.         u.setUsername("zhangsan");  
  20.         u.setPassword("zhangsan");  
  21.         service.add(u);  
  22.     }  
  23. }  


 

jdom读取结果和输出保存结果

BeanId = u

ClassName = com.bjsxt.dao.impl.UserDAOImpl

BeanId = userService

ClassName = com.bjsxt.service.UserService

method name = setUserDAO

 

数据保存进数据库:user zhangsan saved!

 

 

思考:

BeanFactory与ApplicationContext两接口的比较(用哪个?)

1、功能:

更强大:子接口ApplicationContext提供了更多的附加功能,如:Web整合,支持国际化、事件发布通知等功能。

2、在类创建时间上的不同:

BeanFactory取得Bean是延迟取得,即第一次使用getBean()方法时才创建指定类的对象;

ApplicationContext取得Bean的实例是在自身被窗口初始化的时候就创建全部的类对象了。

 

//Spring IoC容器的实例化非常简单

       BeanFactory applicationContext =newClassPathXmlApplicationContext();

等价

ApplicationContext ctx = newClassPathXmlApplicationContext();


VirtualBox增强功能安装全指南:从下载到配置复制粘贴功能 本文详细介绍了VirtualBox增强功能的完整安装与配置流程,重点解决了虚拟机与主机间复制粘贴、文件拖放等核心协作难题。通过分步指南故障排查,帮助用户在不同操作系统(如Windows、Linux)中实现无缝集成,提升虚拟化工作效率与体验。 阅读详情

相关推荐

YOLO26-seg分割优化:FPN涨点&轻量化篇 |多级特征融合金字塔(HS-FPN),助力小目标检测

​​​​​摘要:本研究对Ultralytics YOLO26进行了全面分析,重点阐述了其关键架构改进及其在实时边缘目标检测中的性能基准测试。YOLO26于2025年9月发布,是YOLO系列最新、最先进的成员,专为在边缘及低功耗设备上实现高效、精确且易于部署的目标而构建。本文依次详述了YOLO26的架构创新,包括:移除了分布焦点损失(DFL);采用端到端的无NMS推理;集成了渐进损失(ProgLoss)与小目标感知标签分配(STAL);以及引入了用于稳定收敛的MuSGD优化器。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 238

使用ApplicaionContext读取配置文件

使用ApplicaionContext读取配置文件 场景: 从配置文件读取某一属性值,减少代码的修改,通过配置文件实现属性值更换 具体实现过程: 1、创建工具类获取ApplicationContext @Component public class SpringContextUtil implements ApplicationContextAware { ...

qq_32657967的博客 1139

DFT笔记 DC/AC mode与Func

DFT scan可以分为DCAC两种,区别如下图。

m0_61544122的博客 5636

Spring5-入门、读取配置文件ApplicationContext

Spring官网:Spring | HomeLevel up your Java code and explore what Spring can do for you.https://spring.io/ GA代表稳定版本 下载地址:JFroghttps://repo.spring.io/ui/native/release/org/springframework/spring/ 下载下来 我这里用已经下载好的5.2.6版本 用idea创建简单的java工程: ..

兴趣是最好的老师 862

配置applicationContext.xml文件

Spring应用程序的上下文配置文件,用于定义Spring容器中bean的创建、初始化、装配管理。在这个文件中,我们可以配置各种bean及其依赖关系,甚至可以定义切面、事务管理、数据源等。每个bean元素都有一个唯一的id属性,用于标识bean实例,还有一个class属性,用于指定bean的实现类。是Spring应用程序的核心配置文件,负责管理配置应用程序中的各种bean。在这个示例中,我们启用了注解驱动的事务管理,这样我们可以在代码中使用。的方法,Spring会自动调用这个方法,将。

技术研究中心 3374

springboot 获取配置文件 @ConfigurationProperties

springboot 配置文件

global_coding的博客 2880

SpringBoot获取application配置文件中参数的三种方式

SpringBoot获取application配置文件中参数的三种方式方式1:使用@Value方式方式2:使用Environment方式方式3:@ConfigurationProperties(prefix = "") 注解 application.properties中配置如下: demo.name=tom demo.serverConfig.address=localhost demo.serverConfig.port=8080 demo.serverConfig.username=bob demo.

没啥简介 6002

手动模拟Spring(二)

1.写在前面 我之前已经手动模拟Spring的源码,但是只是IOC的一小部分,今天打算将剩下的IOC的一部分给模拟完,尽量做到Spring的IOC的容器做到差不多,就是基础的功能有,没有Spring的IOC的源码做的那么好,因为Spring的源码是真的太好了。 2.step4-读取xml配置来初始化bean 前面我模拟Spring的IOC容器,已经可以支持简单的Bean的生成,同时也支持属性的注入了。但是这还完全布不够,我们都知道早期的Spring是支持读取xml文件的。我们先来看下我们步骤三的测试的代

了不起的盖茨比的博客 246

Educoder头歌 Spring 获取对象原理(答案)

结合上两个章节所学知识点,使用Dom4j解析xml反射创建对象,我们自己来编写一个Spring容器ApplicationContext类,通过我们自己容器中的getBean()获取对象。在右侧文件夹中查看books.xml文档信息,然后在编辑器补充代码,获取books.xml文档中的所有书本的信息,以书名---作者的方式输出。这样我们便只需要在beans.xml文件中添加类的配置就可直接对其进行使用了,不需要使用原始的方式new对象了。当我们取得Document对象后,我们就可以获取它的每一个节点了。

2302_77385038的博客 1300

十一、手写Spring框架

Spring IoC容器的实现原理:工厂模式 + 解析XML + 反射机制。我们给自己的框架起名为:myspring(我的春天)

m0_58512767的博客 298

模拟SpringapplicationContext.xml配置文件初始化bean的过程

package com.xiaohao.action; import java.io.File; import java.lang.reflect.Method; import java.util.Collections; import java.util.HashMap; import java.util.Map; import org.dom4j.Document; ...

weixin_34010566的博客 264

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

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

帅得山崩地裂的专栏 2459

Spring5 IOC容器原理与XML配置实战指南

控制反转(IOC)Spring框架的核心设计原则,通过将对象创建依赖管理的控制权交给容器,实现了组件间的解耦。其工作原理基于依赖注入(DI)模式,支持构造器注入、Setter注入等多种方式,大幅提升了代码的可测试性可维护性。在Java企业级开发中,Spring IOC容器常被用于管理服务层组件、数据访问对象等核心业务元素。XML配置作为传统配置方式,仍然在遗留系统维护灵活配置场景中发挥重要作用,支持完整的Bean生命周期管理、作用域控制模块化配置。结合Spring5的优化特性如并行解析、循环依赖检

weixin_33850890的博客 392

模拟Spring源码思想,读取Spring Config配置文件,创建IOC容器,解析spring.xml,创建对象,放入IOC容器,注入依赖

其中,getBeanDefinitionNames() 方法返回一个字符串数组,里面存放了所有在 IOC 容器中注册的 bean 对象的名称。遍历输出这个数组就能够查看当前 IOC 容器中有哪些 bean 对象。

小丁的博客 1090

使用 Spring 实现控制反转依赖注入

控制反转是软件工程中的一个原则,它将对象或程序的某些部分的控制权转移给容器或框架。我们最常在面向对象编程的上下文中使用它。与传统编程相比,传统编程中我们的自定义代码调用库,而IoC使框架控制程序的流程并调用我们的自定义代码。为了实现这一点,框架使用具有附加行为的抽象。如果我们想要添加自己的行为,我们需要扩展框架的类或插入自己的类。将任务的执行与其实现分离更容易在不同实现之间切换程序的更高的模块化更容易通过隔离组件或模拟其依赖项来测试程序,并允许组件通过契约进行通信。

架构师小吴的博客 1178

Spring之容器配置初识

通过前两篇文章的学习,对spring有了初步的认识,并且应该认识到,spring的核心在于控制反转IOC依赖注入DI. spring是怎么达到这个目标呢? 我们都已经知道理利用spring框架,依赖的注入spring容器来进行,那么当然需要一些配置信息来告诉spring怎么注入。这就是spring元数据的配置(即bean的配置)。 综上,spring通过容器元数据的配置来实现基本的功能

我的山水 3577

使用 Spring 进行控制反转依赖注入

使用 Spring 进行控制反转依赖注入

sanhao_的博客 295

尝试手写一个框架(一)手写一个Spring IOC框架

构建一个IOC容器,自定义注解标记类信息,方法信息,属性信息,在通过反射手段,创建对象,实现IOC功能

歪桃的博客 9733

Spring IoC的模拟实现

Spring最重要的两大块,一个是依赖注入,另一个就是切面编程。其中,依赖注入用的范围更广。在WEB编程之中,通过xml来配置各个Bean之间的关系,使得开发过程更符合高内聚,低耦合的要求。 众所周知,使用Spring时,需要定义一个listener在web.xml文件中。当请求到达服务器是,根据listener,就会自动读取配置的applicationContext.xml文件。这个xml文件

卧龙居 1497
上一篇: oracle中varchar2字段转clob字段,并提供读取方法。
下一篇: 模拟Spring注入和读取配置文件信息(支持bean 书写顺序随意)
编程小强
博客等级 码龄15年 24粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值