㈠ C#中的序列化与反射
序列化是将对象状态转换成可保持或传输的格式。
反序列化是将流转换为对象。
序列化和反序列化的作用是:使数据能够被轻松的存储和传输。
在.net框架里提供了这样两个类:
BinaryFormatter:使用二进制格式化程序进行序列化。
SoapFormatter:以xml格式化
XmlSerializer类
DotNet中的序列化方法有三种:XML 序列化、SOAP 序列化和二进制序列化。若是序列化到文件的话,前两者生成的是 XML 文件,二进制序列化生成二进制文件。
比如我做一个软件的配置信息,或者网站的配置,就像数据库连接地址等,我们的配置信息是一个类来管理的,而在磁盘上对应一个xml文件来存储这个配置信息,程序开始运行的时候,读取这个xml,我们需要反序列化这个xml为配置类的一个实例,程序中我们就可以运用这个配置类的实例了,而当我们设置程序的时候,我们更改的是该实例的一些属性,最后保存,我们就是通过序列化该对象到那个配置的xml文件,这就是最常见的序列化与反序列化
反射是动态生成类的实例,这样可以根据需要实例化哪个类,不必写死了,比如我们的网站如果可以在后台里设置是用什么类型的数据库,就要用到反射,根据配置文件,用户选的是哪种类型的数据库,我们就通过反射实例化哪种类型数据库管理类
㈡ 求大神帮我看看啊,.NET中通过反射创建DAL层的实例,return得到的值是null,配置文件里的值能够读到。。
首先,请您先理解一下反射的基本原理.否则我下述的代码您可能有点摸不着头脑.
反射是.NET中的重要机制,通过反射,可以在运行时获得程序或程序集中每一个类型(包括类、结构、委托、接口和枚举等)的成员和成员的信息。有了反射,即可对每一个类型了如指掌。另外还可以直接创建对象,即使这个对象的类型在编译时还不知道。
反射的基本过程如下,请您务必阅读.完毕后我将给你写出对应的代码.
(1)使用Assembly定义和加载程序集,加载在程序集清单中列出模块,以及从此程序集中查找类型并创建该类型的实例。
(2)使用Mole了解包含模块的程序集以及模块中的类等,还可以获取在模块上定义的所有全局方法或其他特定的非全局方法。
(3)使用ConstructorInfo了解构造函数的名称、参数、访问修饰符(如pulic 或private)和实现详细信息(如abstract或virtual)等。
(4)使用MethodInfo了解方法的名称、返回类型、参数、访问修饰符(如pulic 或private)和实现详细信息(如abstract或virtual)等。
(5)使用FiedInfo了解字段的名称、访问修饰符(如public或private)和实现详细信息(如static)等,并获取或设置字段值。
(6)使用EventInfo了解事件的名称、事件处理程序数据类型、自定义属性、声明类型和反射类型等,添加或移除事件处理程序。
(7)使用PropertyInfo了解属性的名称、数据类型、声明类型、反射类型和只读或可写状态等,获取或设置属性值。
(8)使用ParameterInfo了解参数的名称、数据类型、是输入参数还是输出参数,以及参数在方法签名中的位置等。
//加载程序集(dll文件地址),使用Assembly类
Assembly assembly = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory + "Bin/App_Code.dll");
//获取类型,参数(名称空间+类)
Type type = assembly.GetType("assembly_name.assembly_class");
//创建该对象的实例,object类型,参数(名称空间+类)
object instance = assembly.CreateInstance("assembly_name.assembly_class");
//设置Show_Str方法中的参数类型,Type[]类型;如有多个参数可以追加多个
Type[] params_type = new Type[1];
params_type[0] = Type.GetType("System.String");
//设置Show_Str方法中的参数值;如有多个参数可以追加多个
Object[] params_obj = new Object[1];
params_obj[0] = "jiaopeng";
//执行Show_Str方法
object value = type.GetMethod("Show_Str", params_type).Invoke(instance, params_obj);
㈢ 框架=设计模式 反射 配置文件的理解
一、抄IoC(Inversionofcontrol):控制反转1、IoC:概念:控制权袭由对象本身转向容器;由容器根据配置文件去创建实例并创建各个实例之间的依赖关系核心:bean工厂;在Spring中,bean工厂创建的各个实例称作bean二、AOP(Aspect-OrientedProgramming):...
㈣ 写一个Properties格式的配置文件,配置类的完整名称,写一个程序,读取这个Properties配置文件,并用反射..
我今天也遇到跟你一样的问题,纠结了两天,现在弄明白了,异常提示找不到这个类,说明你的配置文件出了问题,name = com.heima.changjaijie.Eight.DemoClass,需要进到你的DemoClass类里,选中DemoClass,鼠标右键点 Qualifield Name,也就是复制它的类路径,然后粘贴在你的配置文件name等号右边,注意还要加上回车换行再保存!
㈤ 配置文件和反射功能
你怎么把他俩弄一块去了?
没什么直接关系,这个是互用关系,估计你是在看数据库的无缝迁移部分.
我猜测一下给你介绍吧,比如你配置文件里有一个字段可以配置 DataBase="SqlServer" 这样你就必须有一个 SqlServer.*.dll 或 SqlServer.dll 或相关联的库,然后程序读入配置信息,通过配置的 SqlServer 来动态引用这个库,如下:
private static Assembly GetFileAssembly()
{
if (FileAssembly.Count == 0)
{
GetDalFileInfo();
FileAssembly.Add(Assembly.LoadFrom(BinPath + "Bin\\" + DALName + ".dll"));
return FileAssembly[0];
}
else
{
return FileAssembly[0];
}
}
其他未关联部分不用考虑,这部分代码主要是说明动态引用一个库文件.
然后通过这个库文件,来制定一个执行指定的类下面的制定方法,需要反射出改库的名称空间及类名,如下:
private static void ReflectionOrder()
{
Type DALClass = GetFileAssembly().GetType(DALName + ".Order");
m_Order.Add((IDAL.IOrder)Activator.CreateInstance(DALClass));
}
上面代码是获得指定名称空间的 Order 类,并保存为 IOrder 接口类.
然后主程序就可以通过接口访问这个类或类中的成员.
现在说的这个没有涉及到数据库迁移部分.但是已经完成了数据库迁移所需要的必备条件.
如果你想将数据库从 SqlServer 转为 MySql 的话,第一,你要写一个 MySql.*.dll 或 MySql.dll 或相关连的类库,然后类库中分别提供与 SqlServer 相同的类,然后所有相同的类都要继承自相应的接口并实现制定的方法等.
最后的操作就是重新初始化一次你缓存了接口类的数据.
我水平比较低,而且说话总喜欢唠叨,你就讲究着看吧..
㈥ spring反射机制的xml配置文件在哪
jdom或者dom4j。网络上一找一大堆。下面我们就来说说java的反射和内省:
反射:Java Reflection
Java反射机制具有的版功能:
1、 在运行时权判断任意一个对象所属的类
2、 在运行时构造任意一个类的对象
3、 在运行时判断任意一个类具有的成员标量和方法
4、 在运行时调用任意一个对象的方法
生成动态代理
通俗的说:
反射就是让你可以通过名称来得到对象 ( 类,属性,方法 ) 的技术。
例如我们可以通过类名来生成一个类的实
㈦ java的反射机制用处在哪
java的反来射机制就是增加程序自的灵活性,避免将程序写死到代码里,典型应用是Spring
例如: 实例化一个 person()对象, 不使用反射, new person(); 如果想变成 实例化 其他类, 那么必须修改源代码,并重新编译。
使用反射: class.forName("person").newInstance(); 而且这个类描述可以写到配置文件中,如 **.xml, 这样如果想实例化其他类,只要修改配置文件的"类描述"就可以了,不需要重新修改代码并编译。
㈧ java 用反射将properties里面的class配置文件 ,类加载取出
static Class<?>forName(String className) 得到 class
Method getDeclaredMethod(String name, Class<?>... parameterTypes) Returns a Method object that reflects the specified declared method of the class or interface represented by this Class object.
Method[] getDeclaredMethods() Returns an array of Method objects reflecting all the methods declared by the class or interface represented by this Class object.
㈨ JAVA中反射是什么
JAVA中反射是动态获取信息以及动态调用对象方法的一种反射机制。
Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。而这也是Java被视为动态语言的一个关键性质。
Java反射的功能是在运行时判断任意一个对象所属的类,在运行时构造任意一个类的对象,在运行时判断任意一个类所具有的成员变量和方法,在运行时调用任意一个对象的方法,生成动态代理。
(9)反射编程配置文件扩展阅读:
JAVA中反射实例:
1、Class superClass=clazz.getSuperclass();//获取父类。
System.out.println("getSuperclass:"+superClass)。
2、Class[] interfaces=clazz.getInterfaces();//获取实现接口。
System.out.println("getInterfaces:"+interfaces.length)。
3、Constructor[] cons=clazz.getConstructors();//构造方法。
System.out.println("getConstructors:"+cons.length)。
参考资料来源:网络: JAVA反射机制
㈩ java编写 使用反射技术结合读取Properties格式的配置文件,实现在一个程序中可以调用任何一个java类的run方
//Test.java
import java.util.*;
import java.io.*;
import java.lang.reflect.*;
public class Test {
public static void main(String[] args) throws Exception {
in = Test.class.getClassLoader().getResourceAsStream("prop.properties");
Properties pro = new Properties();
pro.load(in);
in.close();
String className = pro.getProperty("class");
Class c = Class.forName(className);
Object o = c.newInstance();
Method m = c.getMethod("run");
m.invoke(o);
}
}
//Demo.java
public class Demo {
public void run() {
System.out.println("run() method has been invoked");
}
}
//prop.properties
class=Demo