注解-反射-XML配置原理

news2024/11/18 22:47:12

java刚开始原本是直接在方法中创建对象执行程序等,部分代码重复率高,后来就发展成方法封装调用,再后来出现的像spring框架等,引入了XML配置,使得程序更加简洁,方便等,其中XML配置也是基于java反射机制,再后来为了去除XML配置就采用了注解的方式,但其也是基于java反射机制。

反射机制

反射机制说白了就是用Class对象在程序运行时通过字符串动态地去实现创建对象,判断方法,对象类型等。其以下功能都来自己于Class对象实现。

Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键。

Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。

反射技术大量用于Java设计模式和框架技术,最常见的设计模式就是工厂模式和单例模式。

单例模式(Singleton):这个模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。在很多操作中,比如建立目录 数据库连接都需要这样的单线程操作。这样做就是为了节省内存空间,保证我们所访问到的都是同一个对象。

工厂模式(Factory):工厂模式利用Java反射机制和Java多态的特性可以让我们的程序更加具有灵活性。用工厂模式进行大型项目的开发,可以很好的进行项目并行开发。  

注解

Annotation接口中有这么一句话 "The common interface extended by all annotation types. "。也就是所有的注解都继承于 java.lang.annotation.Annotation 接口。

@interface不是接口是注解类,在jdk1.5之后加入的功能,使用@interface自定义注解时,由编译程序自动编译继承了java.lang.annotation.Annotation接口,由编译程序自动完成其他细节,我们通过反编译可以看到

 其中,@Retention(RetentionPolicy.RUNTIME),括号内的值决定使用@Test注解的保留策略。

具体详看:Java自定义注解解析_51CTO博客_java 自定义注解

注解配置原理

继承Annotation 接口后,也还是属于接口,注解在Java内部其实就是一个接口,对于每个注解都会生成一个动态代理类,准确的说只有通过反射获取到注解时,Java才会生成这个动态代理类,对于每个使用的地方,会使用化该动态代理类。

具体详看:

七、动态代理实现分析_动态代理生成对象_老去的90后的博客-CSDN博客

https://www.cnblogs.com/ajianbeyourself/p/14560581.html

xml配置实现创建对象原理

spring通过ioc(控制反转)的方式读取配置文件中的信息然后通过反射实现对象的创建,其实就是通过获取xml文件字符串,使用反射机制,用Class对象创建对象。

具体详看:读取xml文件并通过反射创建一个对象_xml反射创建对象_qq_45411328的博客-CSDN博客

其中文章参考以下链接:

二、Java注解&反射和动态代理_java注解与动态代理_耀耀zz的博客-CSDN博客

用最直接的大白话来聊一聊Java中的反射机制 - 哔哩哔哩

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

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

相关文章

java 线程安全和多线程

文章目录 前言一、ThreadLocal是什么?二、synchronized 和 ReentrantLock 都是 Java 中提供的可重入锁,二者的主要区别有以下 5 个:三、线程安全的集合类有哪些?四、说一下你对CompletableFuture的理解四、项目中是如何创建线程池…

R语言生物群落(生态)数据统计分析与绘图(从数据整理到分析结果展示)

R 语言作的开源、自由、免费等特点使其广泛应用于生物群落数据统计分析。生物群落数据多样而复杂,涉及众多统计分析方法。以生物群落数据分析中的最常用的统计方法回归和混合效应模型、多元统计分析技术及结构方程等数量分析方法为主线,通过多个来自经典…

C++类和对象三

文章目录 类和对象三初始化列表用途与特性 explicit关键字再谈构造函数static成员static的特性 友元友元函数友元函数特性 友元类友元类特性 内部类概念特性 匿名对象拷贝对象时的一些编译器优化 类和对象三 初始化列表 初始化列表:以一个冒号开始,接着…

【源码解析】Spring Bean生命周期源码解析

Spring启动核心 AbstractApplicationContext#refresh,Spring刷新容器的核心方法。最关键的就是 AbstractApplicationContext#invokeBeanFactoryPostProcessors,扫描BeanAbstractApplicationContext#finishBeanFactoryInitialization,生成Be…

【MySql】InnoDB一棵B+树可以存放多少行数据?

文章目录 背景一、怎么得到InnoDB主键索引B树的高度?二、小结三、最后回顾一道面试题总结参考资料 背景 InnoDB一棵B树可以存放多少行数据?这个问题的简单回答是:约2千万。为什么是这么多呢?因为这是可以算出来的,要搞…

[C语言实现]带你手撕带头循环双链表

目录 什么是双链表? 带头结点的优势: 双链表的实现: 什么是循环双链表? 众所周知,顺序表的插入和删除有时候需要大量移动数据,并且每次开辟空间都可能会浪费大量内存和CPU资源,于是我们有了链表,我们之…

【实用篇】SpringCloud01

SpringCloud01 1.认识微服务 随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢? 1.0.学习目标 了解微服务架构的优缺点 1.1.单体架构 单体架构&#xff…

基于复旦微 JFM7K325T 全国产FPGA的高速数据采集、图像处理方案

板卡概述 PCIE-XM711 是一款基于 PCIE 总线架构的高性能数据预处理 FMC载板,板卡采用复旦微的 JFM7K325T FPGA 作为实时处理器,实现 各个接口之间的互联。该板卡可以实现 100%国产化。 板卡具有 1 个 FMC(HPC)接口,1 路…

这10道测试用例面试题,面试官肯定会问到

前言 软件测试面试中,测试用例是非常容被问到的一个点,今天小编就给大家把最常见的测试用例方面的问题给大家整理出来,希望对大家的面试提供帮助。 1、 什么是测试用例‍ 答:测试用例的设计就是如何覆盖所有软件表现出来的状态…

硬盘有多少图片取决我的网速, Python获取硬盘少女图集

目录 前言开发环境:案例实现的步骤:代码展示尾语 💝 前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 图片数据在网络中随处可见, 如果需要一些图片素材 一睹为快把! ! ! 开发环境: 解释器: python 3.8 编辑器: pycharm 2022.3 专业版 内置模块使用 os &g…

CH341的I2C接口编程说明

CH341的I2C接口特性: 1、支持I2C速度20K/100K/400K/750K; 2、默认不支持设备的ACK应答监测,即忽略ACK状态;强制支持需修改软件; 引脚序号功能说明24SCL23SDA Windows系统SPI通讯接口函数 HANDLE WINAPI CH341OpenD…

Piccolo傻瓜式环境配置

首先下载Piccolo的代码 Piccolo下载网址点击Code然后点击Download ZIP。可能有点慢,总共要下139M。 下载CMAKE CMAKE下载网址下载完后安装CMAKE 构建环境 将下来的Piccolo-main压缩包解压为Piccolo-main文件夹。打开CMAKE,如下图进行目录选择&…

Linux - 第19节 - 网络基础(传输层二)

1.TCP相关实验 1.1.理解listen的第二个参数 在编写TCP套接字的服务器代码时,在进行了套接字的创建和绑定之后,需要调用listen函数将创建的套接字设置为监听状态,此后服务器就可以调用accept函数获取建立好的连接了。其中listen函数的第一个参…

LeetCode - 1049 最后一块石头的重量 II (0-1背包)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/130935119 LeetCode:1049. 最后一块石头的重量 II 题目:有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合,从中选…

人脸识别3:C/C++ InsightFace实现人脸识别Face Recognition(含源码)

人脸识别3:C/C InsightFace实现人脸识别Face Recognition(含源码) 目录 1. 前言 2. 项目安装 (1)项目结构 (2)配置开发环境(OpenCVOpenCLbase-utilsTNN) (3)部署TNN模型 (4&a…

【C++】手把手教你模拟实现string类

模拟实现string 前言类的成员变量构造函数析构函数size和length[ ] 重载迭代器赋值运算符重载和拷贝构造函数拷贝构造函数赋值运算符重载现代式写法 reserve 和 resizereserveresize 字符串追加push_backappend insertpos位置插字符pos位置插字符串 erase>> 和 <<&…

Linux---用户权限(权限位、chowd、chown)

1. 权限位 序号1&#xff0c;表示文件、文件夹的权限控制信息 序号2&#xff0c;表示文件、文件夹所属用户 序号3&#xff0c;表示文件、文件夹所属用户组 权限细节总共分为10个槽位&#xff1a; 举例&#xff1a;drwxr-xr-x&#xff0c;表示&#xff1a; 这是一个文件夹&…

如何使用Metasploit进行后渗透攻击?

后渗透攻击&#xff08;PostExploitation&#xff09;是整个渗透测试过程中最能够体现渗透测试团队创造力与技术能力的环节。前面的环节可以说都是在按部就班地完成非常普遍的目标&#xff0c;而在这个环节中&#xff0c;需要渗透测试团队根据目标组织的业务经营模式、保护资产…