2013-05-03 115 views
0

我需要通過Java反射api實例化幾個類,並在實例化的類中調用'a'方法(方法調用不是通過反射)。我知道反射確實影響了應用程序的性能,但我不太確定它在網絡環境中的效果如何!與使用反射實例化Action類的Struts框架一樣,我的框架也獲得了文件中配置的字符串的類名,我在不同的請求中讀取並實例化了該字符串。對於每個類只有一個實例併爲每個請求調用其方法的想法如何? 示例,在Web環境中通過反射實例化對象

package com.app.events; 
public class event1 implements iEvent { 
    public event1() { 
    } 

    public void doprocess(Object info) { 
     // do necessary events 
    } 
} 
package com.app.events; 
public class event2 implements iEvent { 
    public event1() { 
    } 

    public void doprocess(Object info) { 
     // do necessary events 
    } 
} 

config.xml 
<events> 
    <event>com.app.events.Event2</event> 
    <event>com.app.events.Event1</event> 
</events> 
// servlet init 
String clazName = parseXMLFile(); // not every time but only once, I have the bean 
Class claz = Class.forName(clazName); 

// how about this? 
// I save this instance for later requests 
events.put(request.getParameter("event"), claz.newInstance()); 

// later requests,I retrieve the event from the map and invoke its method, 
// just a rough code... 
events.get(request.getParameter("event")).doprocess(info); 

回答

0

首先,首先尊重Java命名約定。類是CamelCased,方法是camelCased。

使用單個實例非常好。例如,這就是servlet所做的,以及Struts1操作和Spring bean(默認情況下)。但是這應該被記錄下來,因爲它會強制每個接口的實現都是線程安全的(最好是無狀態的),除非你的框架確保一次只有一個線程使用每個實例,這會大大降低你的性能應用。

創建很多很多年前很慢的實例。現在不再是了,所以我會每次創建一個新實例,除非有一個實例很重要(因爲初始化一個實例可能會很慢)。