㈠ 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