注解-反射-XML配置原理

news/2024/12/28 12:13:50/

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.ppmy.cn/news/103625.html

相关文章

权威认可!腾讯云EdgeOne入选Gartner® DDoS缓解方案市场指南

近日,Gartner发布《Market Guide for DDoS Mitigation Solutions》报告,腾讯云EdgeOne入选Gartner DDoS缓解方案市场指南。 “分布式拒绝服务(DDoS)缓解市场包括检测和缓解DDoS攻击并将其作为专用产品提供的供应商。它包括专业供…

【算法】双指针及其使用场景

文章目录 什么时候用双指针?快慢指针碰撞指针滑动窗口法 双指针求最大容积删除有序数组重复数据移除指定元素合并两个有序数组或链表两个数组的交集 什么时候用双指针? 引用 在我们遇到像数组,链表这类数据结构的算法题目的时候&#xff0c…

Java jvm调优

系列文章目录 文章目录 系列文章目录前言JVM 基础面试题11. JDK,JRE以及JVM的关系2. 我们的编译器到底干了什么事?3. 类加载机制是什么?3.1 装载(Load)3.2 链接(Link)验证(Verify)准备(Prepare)解析(Resolve) 3.3 初始化(Initialize) 4. 类加…

keep-alive理解

keep-alive理解 理解定义:作用原理 使用参数*那么在实际开发中我们可以饥饿和路由守卫来实现需要缓存组件的缓存* 理解 定义: 是一个内置组件,当他包裹动态组件时,会缓存不活动的组件实例,而不是销毁他们 keep-alive是…

CH341的I2C接口编程说明

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

「实在RPA·运营商数字员工」为数智化升级打call

提起运营商,人们定不陌生,日常生活中与他人的联络互动以及各种信息平台的登录都离不开运营商的身影。除了提供了基础的通信服务之外,运营商还向用户提供了各种数字化产品和服务,例如云计算、大数据、物联网等,为用户提…

【数据结构】二叉树——链式结构的实现(代码演示)

目录 1 二叉树的链式结构 2 二叉树的创建 3 二叉树的遍历 3.1 前序遍历 3.1.1运行结果: 3.1.2代码演示图: 3.1.3 演示分析: 3.2 中序遍历 3.3 后序遍历 3.4 层序遍历 4 判断是否是完全二叉树 5 二叉树节点的个数 5.1 总个数 5.2 叶子节点…

​​​​Linux Shell 实现一键部署Oracle21 rpm包方式

oracle前言 Oracle开发的关系数据库产品因性能卓越而闻名,Oracle数据库产品为财富排行榜上的前1000家公司所采用,许多大型网站也选用了Oracle系统,是世界最好的数据库产品。此外,Oracle公司还开发其他应用程序和软件。同时&#…