反射

Java反射及依赖注入简单模拟

泪湿孤枕 提交于 2019-12-18 18:46:59
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一、编写Dao类 package cn.com.songjy.annotation; import java.util.Date; public class MyDao { public String time(){ return "你好,现在的时间是:" + new Date(); } } 二、编写属性文件【my.properties,类似spring的配置文件】并将MyDao类配置到其中,如下: myDao=cn.com.songjy.annotation.MyDao 三、编写读取属性配置文件的类 package cn.com.songjy.annotation; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class PropertiesUtil { private static InputStream in = PropertiesUtil.class.getClassLoader() .getResourceAsStream("my.properties"); public

C#的反射笔记

大城市里の小女人 提交于 2019-12-14 21:34:09
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> GetMembers ;成员,包括所有的get_和set_方法,以及GetHashCode() .ctor() GetType()等方法 以及public的成员属性 GetProperties public成员属性 GetMethods 所有的方法,不包括.ctor(),包括ToString Equals() GetHashCode() GetType()和默认的get_和set_方法 GetFields(BindingFlags.NonPublic|BindingFlags.Instance|BindingFlags.Static) 返回私有字段。 来源: oschina 链接: https://my.oschina.net/u/2457585/blog/708770

Day21——反射

不问归期 提交于 2019-12-14 07:44:04
文章目录 反射 1. 动态语言 2. 静态语言 3. 反射(Reflection): 1. 概述 2. 理解 3. 反射机制提供的功能 4. 反射的优缺点 5. 反射相关的常用 API 6. Class 类 1. 概述 2. Class 的创建方式(获取 Class 类的实例) 3. Class 类常用方法 4. 可以有 Class 对象的类型 5. Java 内存 6. 类的加载过程 1. 类的初始化 2. 类加载器的作用 3. 类加载器的类型 7. 获取运行时类的完整结构 7. Class对象的作用 1. 创建类的对象 2. 创建时需求 3. 对于没有无参构造器的类创建对象 4. 调用指定的方法 8. 性能对比分析 9. 获取泛型信息: 4. 反射操作注解 1. ORM 反射 1. 动态语言 是一类在运行时可以改变其结构的语言:例如细腻的函数、对象、甚至代码可以被引进,已有的函数可以被 删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构; 主要动态语言:Object-C、C#、JavaScript、PHP、Python等; 2. 静态语言 与动态语言相对应,运行时结构不可变的语言就是静态语言。如Java、C、C++; Java不是动态语言,但Java可以称为“准动态语言”。即Java有一定的动态性,我们可以利用反射机制获得类似动态语言的特性

java基础-反射浅析(磨砺营马剑威java)

徘徊边缘 提交于 2019-12-10 20:43:28
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 【威哥说】本文里波波老师将带领大家一起学习一下什么是反射,文中暂且没有详细给大家介绍反射如何去获取类中的所有属性和方法,更多的是介绍什么场景下会使用到反射,使用反射有什么好处和缺点,大家有自己的理解也可以相互探讨。 反射,一种计算机处理方式。是程序可以访问、检测和修改它本身状态或行为的一种能力。 这是百度百科里的一个说法,我曾经还看到一个对反射的描述为:在运行状态中,对于任意一个class类,都能知道此类的所有属性和方法,对于任意一个对象都能对他的属性和方法进行调用。那在我的理解来看,就是动态的获取一个类的所有属性和方法。这个可以理解为反射的概念,或者说作用。 那么反射的使用在那些场景中呢?应用场景如下:当程序写完之后,如果想添加功能,没法直接创建对象(注意:此处是因为一个完整的程序代码已经成型了,封装好了,你无法直接创建对象),但是一般程序会在定义结构时为了扩展而对外提供接口,所以我们通过实现这个接口,并在使用时告诉程序类名称,然后去通过反射找到class文件,并针对其中的元素进行操作;第二就是为了适应变化,你传入什么类型,我对什么类型进行具体的操作,这类一般用于数据解析。 一般应用: 1、比如java中连接数据库操作时,内部的连接操作已经写好了,如果密码发生变化,我们不需要改变原有的代码逻辑

反射

£可爱£侵袭症+ 提交于 2019-12-08 14:00:36
新建一个控制台应用程序 Bike中的代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 反射 { public class Bike : ICar { public void Light() { Console.WriteLine("我有1个灯"); } public void Wheel() { Console.WriteLine("我有2个轮子"); } } } View Code Car中的代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 反射 { public class Car : ICar { public void Light() { Console.WriteLine("我有8个灯"); } public void Wheel() { Console.WriteLine("我有4个轮子"); } } } View Code Factory中的代码 using

new和反射产生java内部类的实例化详解

自作多情 提交于 2019-12-07 15:48:37
前两天看到一道口试题,是关于内部类的知识,觉得很有意思。 这道题是这样的: 根据注释填写(1),(2),(3)处的代码 public class Test{ ?????? public static void main(String[] args){ ????????????? // 初始化Bean1 ????????????? (1) ????????????? bean1.I++; ????????????? // 初始化Bean2 ????????????? (2) ????????????? bean2.J++; ????????????? //初始化Bean3 ????????????? (3) ????????????? bean3.k++; ?????? } ? ?????? class Bean1{ ????????????? public int I = 0; ?????? } ? ?????? static class Bean2{ ????????????? public int?J = 0; ?????? } } public class Bean{ ?????? public class Bean3{ ????????????? public int k = 0; ?????? } } ? 这实在就是实例化内部类对象的题。 从上面的题可以看出

跨站脚本攻击XSS

青春壹個敷衍的年華 提交于 2019-12-06 06:54:47
XSS简介 跨站脚本攻击,英文全称是Cross Site Scrit,本来缩写是CSS,但是为了和层叠样式表(Cascading Style Sheet, CSS)有所区别,所以在安全领域叫做"XSS". XSS攻击,通常是指黑客通过"HTML注入"篡改了网页,插入了恶意的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击.在一开始,这种攻击的演示案例是跨域的,所以叫做"跨站脚本".但是发展到今天,是否跨域已经不再重要. 那么什么是XSS呢?看看下面的例子: 假设一个页面把用户输入参数直接输出到页面上: <?php $input = $_GET["param"]; echo "<div>".$input."</div>"; ?> 在正常情况下,用户向param提交的数据会展示到页面中,比如提交: http://www.a.com/test.php?param=这是一个测试! 但是如果提交一段HTML代码: http://www.a.com/test.php?param=<script>alert(/xss/)</script> 会发现,alert(/xss/)在当前页面执行了. 用户输入的Script脚本已经被写入页面中,而这显然是开发者所不希望看到的.上面这个例子,就是XSS的第一种类型: 反射型XSS . XSS根据效果的不同可以分成如下几类. 反射型XSS

Golang反射机制的实现分析——reflect.Type类型名称

你离开我真会死。 提交于 2019-12-05 00:44:29
现在越来越多的java、php或者python程序员转向了Golang。其中一个比较重要的原因是,它和C/C++一样,可以编译成机器码运行,这保证了执行的效率。在上述解释型语言中,它们都支持了“反射”机制,让程序员可以很方便的构建一些动态逻辑。这是C/C++相对薄弱的环节,而Golang却有良好的支持。本系列,我们将通过反汇编Golang的编译结果,探究其反射实现的机制。 (转载请指明出于breaksoftware的csdn博客) 为了防止编译器做优化,例子中的源码都通过下面的指令编译 go build -gcflags "-N -l" [xxxxxx].go 类型名称 基本类型 package main import ( "fmt" "reflect" ) func main() { t := reflect.TypeOf(1) s := t.Name() fmt.Println(s) } 这段代码最终将打印出1的类型——int。 main函数的入口地址是main.main。我们使用gdb在这个位置下断点,然后反汇编。略去一部分函数准备工作,我们看到 0x0000000000487c6f <+31>: mov %rbp,0xa0(%rsp) 0x0000000000487c77 <+39>: lea 0xa0(%rsp),%rbp 0x0000000000487c7f <+47>

JAVA的内省(introspector)与反射(reflection)

我是研究僧i 提交于 2019-12-04 11:18:44
很多朋友在深入的接触 JAVA 语言后就会发现这样两个词:反射 (Reflection) 和内省 (Introspector) ,经常搞不清楚这到底是怎么回事,在什么场合下应用以及如何使用?今天把这二者放在一起介绍,因为它们二者是相辅相成的。 反射 <?xml:namespace prefix = o /?> 相对而言,反射比内省更容易理解一点。用一句比较白的话来概括,反射就是让你可以通过名称来得到对象 ( 类,属性,方法 ) 的技术。例如我们可以通过类名来生成一个类的实例;知道了方法名,就可以调用这个方法;知道了属性名就可以访问这个属性的值。 还是写两个例子让大家更直观的了解反射的使用方法: // 通过类名来构造一个类的实例 Class cls_str = Class.forName( "java.lang.String" ); // 上面这句很眼熟,因为使用过 JDBC 访问数据库的人都用过 J Object str = cls_str.newInstance(); // 相当于 String str = new String(); // 通过方法名来调用一个方法 String methodName = "length" ; Method m = cls_str.getMethod(methodName, null ); System.out.println( "length

golang实现web中间件的一些思考

此生再无相见时 提交于 2019-12-04 02:20:07
最近陆续看了golang的Martini框架,也试用了,这个山寨自node.js的Express框架和最新的koa框架的golang框架, 同样具有低耦合的特点,不过还是担忧其性能,因为核心采用了reflect反射技术。 golang的http包用Hander、handerfuc这些来解决中间件的问题,比如说验证,日志等,采取的是一层层封装的方式, 好比洋葱。这样写出来的代码的缺点是耦合度高。如果中间件的顺序或者名字变换,则有很多代码需要改动。 为了降低依赖,则需让代码不要直接引用前一层的名称,加入第三方的一个间接层。reflect可行,但是reflect反射是基于对对象毫不了解,采取笨办法逐步找出对象类型(结构体)的各个函数的名称然后调用。 如果采取以下方法似乎可以更好解决这个问题: 每个待添加的组件都遵守一个简单的接口约定,比如将需要导出为外界调用的函数都保持在一个类似函数指针数组的数据结构中,这样,框架对于要启用的组件会知道如何去利用,有利于两者的协同。然后,若启用该组件,则可将这个数组和别的组件的数组放在一起,web应用依次调用。这种比较底层的方式,效率或者可以更高。 为进一步考虑提高效率,若组件运行时间比较长,可采用gorutine + channel 的方式,来达到各个中间件filter 模式并行执行的效果? golang的net