返回顶部
首页 > 资讯 > 后端开发 > Python >浅析Spring工厂的反射和配置文件
  • 164
分享到

浅析Spring工厂的反射和配置文件

Spring工厂Spring反射Spring配置 2023-05-14 17:05:12 164人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录反射和配置文件Talk is cheap, show me the code.测试实体类对象工厂类(类似spring工厂的简单实现)总结反射和配置文件 学习 Spring 的时候

反射和配置文件

学习 Spring 的时候,虽然可以知道是通过反射和配置文件的方式来获取 JavaBean 对象,但是一直没有机会自己尝试一次,探究以下内部原理,虽然有人推荐阅读源码,但是可能还是感觉学的不好,一直没有尝试过。现在刚好学习设计模式刚好遇到了这部分的内容了,感觉自己对这个有了一个较好的理解了。

设计模式中,为了满足开闭原则,大都引入了抽象层,如工厂方法模式、抽象工厂模式等。客户端针对抽象层编程,而在程序运行的时候再指定其子类,根据里氏代换原则和面向对象的多态性,子类对象再运行时将覆盖父类对象。如果需要对系统进行扩展,只需要修改子类类名即可。在具体实现时,通过引入配置文件可以使得用户再不修改客户端任何代码的前提下增加或替换子类,

其基本实现过程过程为:

  1. 客户端针对抽象层编程,客户端代码中不能出现具体的类名,即客户端不直接实例化对象。
  2. 引入纯文本格式的配置文件,通常是 XML 文件,将具体类类名存储在配置文件中。
  3. 通过 DOM(Document Object Model,文档对象模型)、SAX(Simpleapi for XML)等 XML 解析技术获取存储在配置文件中类名。
  4. 在客户端代码中通过反射机制根据类名创建对象,用反射所创建的对象代替父类对象的引用,程序运行时,将调用子类方法来实现业务功能。
  5. 如果需要扩展功能,只需要添加一个新的子类继承抽象父类,再修改配置文件,重新运行程序即可;如果需要替换功能,只需要另一个子类类名替换存储再配置文件中的原有子类类名。无论是扩展还是替换都无须修改既有类库和客户端源码,完全符合开闭原则。

Talk is cheap, show me the code.

直接通过代码来理解上面的内容吧。

<?xml version="1.0" encoding="UTF-8"?>
<beans>
	<bean>com.reflect.Dog</bean>
</beans>

测试实体类

package com.reflect;

public class Dog {
	private String name;
	private Integer age;
	
	public Dog() {}
	
	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;
	}

	@Override
	public String toString() {
		return "Dog [name=" + name + ", age=" + age + "]";
	}
}

对象工厂类(类似Spring工厂的简单实现)

package com.reflect;

import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.*;

public class Factory {
	public static Object getBean() {
		try {
			Document doc = DocumentBuilderFactory
					.newInstance()
					.newDocumentBuilder()
					.parse("src/beans.xml");
			
			//获取包含类名的文本节点
			nodeList nodeList  = doc.getElementsByTagName("bean");
			Node node = nodeList.item(0).getFirstChild();
			String name = node.getNodeValue();
			
			//通过类名生成实例对象并将其返回
			Class<?> clazz = Class.forName(name);
			return clazz.newInstance();
		} catch (Exception e) {
			e.printStackTrace();
			return null; 
		} 
	}
}

测试类

package com.reflect;

public class Test {
	public static void main(String[] args) {
		Dog dog = null;
		dog = (Dog)Factory.getBean();
		dog.setName("小黑");
		dog.setAge(12);
		System.out.println(dog.toString());
	}
}

项目目录结构
注意这里需要使用 dom4j 的jar包,下载导入即可!

在这里插入图片描述

运行结果

在这里插入图片描述

现在需求变了,不想使用 Dog 类,而要使用 HuntDog 类,只要增加 HuntDog 类, 并继承 Dog 类即可,项目源码不需要改动,满足开闭原则。

package com.reflect;

public class HuntDog extends Dog {
	private String name;
	private Integer age;
	
	public HuntDog() {}
	
	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;
	}

	
	@Override
	public String toString() {
		return "HuntDog [name=" + name + ", age=" + age + "]";
	}

	public void say() {
		System.out.println("Hello, I am HuntDog: "+this.toString());
	}
}

修改 XML 如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans>
	<bean>com.reflect.HuntDog</bean>
</beans>

修改后的运行结果

在这里插入图片描述

总结

这个例子使用反射和配置文件,写了一个满足开闭原则的代码,这点和 Spring的对象工厂思想很像(Spring 的设计思想很优美,很庞大,这里只是我个人的理解),对于初学 Spring的人应该有一定的帮助(比如说我,哈哈)。
好了,大体来说这个例子非常的简单,但是已经足够了,我觉得如果能用简单的例子讲好一个复杂的东西也是很厉害的,我也是在慢慢学习,希望可以继续进步,加油!

到此这篇关于浅析Spring工厂的反射和配置文件的文章就介绍到这了,更多相关Spring工厂反射配置内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 浅析Spring工厂的反射和配置文件

本文链接: https://lsjlt.com/news/203337.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 浅析Spring工厂的反射和配置文件
    目录反射和配置文件Talk is cheap, show me the code.测试实体类对象工厂类(类似Spring工厂的简单实现)总结反射和配置文件 学习 Spring 的时候...
    99+
    2023-05-14
    Spring工厂 Spring反射 Spring配置
  • Spring工厂的反射和配置文件源码分析
    这篇文章主要介绍了Spring工厂的反射和配置文件源码分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Spring工厂的反射和配置文件源码分析文章都会有所收获,下面我们一起来看看吧。反射和配置文件学习 Spr...
    99+
    2023-07-05
  • Java中dom4j怎么读取配置文件实现抽象工厂+反射
    本篇内容主要讲解“Java中dom4j怎么读取配置文件实现抽象工厂+反射”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中dom4j怎么读取配置文件实现抽象工厂+反射”吧!在Java中也可...
    99+
    2023-06-17
  • GraalVm的反射配置辅助工具agentlib配置及使用
    目录前言关于agentlib工具配置文件使用前言 Graalvm通过静态分析提前编译来为Java应用程序构建高度优化的本机可执行文件,这就需要在编译时就知道所有的程序类型,而java...
    99+
    2024-04-02
  • 深入浅析Hibernate中的配置文件
    今天就跟大家聊聊有关深入浅析Hibernate中的配置文件,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。首先我们看一下hibernate的主配置文件<!DOCTYPE hibe...
    99+
    2023-05-31
    hibernate te
  • Spring配置文件的拆分和整合过程分析
    目录一、Spring配置文件拆分:二、Spring配置文件整合:一、Spring配置文件拆分: 在实际应用里,随着应用规模的增加,系统中 Bean 数量也大量增加,导致配置文件非常庞...
    99+
    2024-04-02
  • Spring Boot配置文件实例分析
    今天小编给大家分享一下Spring Boot配置文件实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一...
    99+
    2024-04-02
  • Spring使用注解和配置文件配置事务
    本文实例为大家分享了Spring使用注解和配置文件配置事务的具体代码,供大家参考,具体内容如下 需求图: 使用注解配置事务: package com.atguigu.spring...
    99+
    2024-04-02
  • 浅析windows7预读文件的功能和设置
      浅析Windows7预读文件的功能和设置:在对win7版操作系统文件进行整理的过程中,系统文件以及程序都会是Ghost win7操作系统(雨林木风ghost win7系统下载)用户的主要针对对象。那么在win7版操作...
    99+
    2023-06-05
    win7 预读文件 文件 功能 预读 windows7
  • git怎么修改配置文件?方法浅析
    Git是目前最流行的版本控制工具之一,可以有效地管理项目中的代码变更,协作开发、版本管理、代码发布等,使软件开发变得更加高效和便捷。在使用Git过程中,我们需要配置一些参数,以满足个性化的需要和项目管理要求。本文将重点介绍Git的配置文件以...
    99+
    2023-10-22
  • MyBatis的核心配置文件以及映射文件
    目录二、Mybatis映射文件三、将映射文件配置到mybatis核心配置文件中一、核心配置文件 Mybatis核心配置文件在resources资源目录下(如下图),其中主要核心是连接...
    99+
    2023-05-19
    MyBatis 核心配置 MyBatis 映射
  • 怎么配置MyBatis的SQL映射文件
    配置MyBatis的SQL映射文件通常需要以下步骤: 创建一个XML文件,用于存放SQL映射配置。这个文件通常以.xml为扩展名...
    99+
    2024-04-08
    MyBatis
  • Spring 加载多个xml配置文件的原理分析
    目录示例spring-configlication.xml:spring-config-instance-factory.xmljava示例代码实现AbstractRefreshab...
    99+
    2024-04-02
  • Spring配置文件的详细介绍
    目录 1. Spring的配置文件的命名 2. Spring配置文件中有什么 3. set注入 4. 构造注入 1. Spring的配置文件的命名 答:Spring的配置文件是放在resources文件夹下面的,一般我们都会给他起一个...
    99+
    2023-09-18
    spring set注入 构造注入 bean标签 java
  • 详细介绍Spring的配置文件
    目录1. Spring的配置文件的命名2. Spring配置文件中有什么3. set注入4. 构造注入1. Spring的配置文件的命名 答:Spring的配置文件是放在resour...
    99+
    2022-11-13
    Spring 配置文件
  • hibernate中配置文件工作原理的示例分析
    这篇文章主要为大家展示了“hibernate中配置文件工作原理的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“hibernate中配置文件工作原理的示例...
    99+
    2024-04-02
  • spring-boot如何读取props和yml配置文件
    这篇文章主要介绍spring-boot如何读取props和yml配置文件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!最近微框架spring-boot很火,笔者也跟风学习了一下,废话不多说,现给出一个读取配置文件的例...
    99+
    2023-05-30
    spring boot props
  • 如何使用 Python 解析 Spring 框架中的配置文件?
    Spring 框架是一个广泛使用的 Java 应用程序框架,它的主要特点是将业务逻辑与底层代码分离。在 Spring 中,应用程序的配置文件扮演着至关重要的角色,它们描述了应用程序的各种设置和配置,如数据库连接、日志设置、Web 应用程序上...
    99+
    2023-09-04
    文件 关键字 spring
  • 如何使用 PHP 解析 Spring 框架中的配置文件?
    Spring 是一个流行的 Java 开发框架,被广泛应用于企业级应用开发中。在 Spring 框架中,配置文件起着至关重要的作用,因为它们描述了应用程序中各个组件之间的关系,并提供了各种配置选项,以满足不同应用程序的需求。本文将介绍如何使...
    99+
    2023-07-02
    spring 文件 javascript
  • spring@value注入配置文件值失败的原因分析
    目录spring@value注入配置文件值失败的原因spring配置文件@Value注解注入失败或为null解决方案代码示例问题解析问题拓展spring@value注入配置文件值失败...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作