ForumFactory的实例化问题,

03-10-27 zsn
请高手指教。

public abstract class ForumFactory {

private static Object initLock = new Object();

private static String className = "com.jivesoftware.forum.database.DbForumFactory";

private static ForumFactory factory = null;

/**

* Returns a concrete ForumFactory instance. Permissions corresponding

* to the Authorization will be used. If getting the factory fails, null

* will be returned.

*

* @param authorization the auth token for the user.

* @return a concrete ForumFactory instance.

*/

public static ForumFactory getInstance(Authorization authorization) {

//If no valid authorization passed in, return null.

if (authorization == null) {

return null;

}

if (factory == null) {

synchronized(initLock) {

if (factory == null) {

// Note, the software license expressely forbids

// tampering with this check.

//LicenseManager.validateLicense("Jive Forums Basic", "2.0");

String classNameProp =

JiveGlobals.getJiveProperty("ForumFactory.className"); //-----[1]问题在这里

if (classNameProp != null) {

className = classNameProp;

}

try {

//Load the class and create an instance.

Class c = Class.forName(className);

factory = (ForumFactory)c.newInstance();

}

catch (Exception e) {}.........

}

public abstract Forum getForum(long forumID) //---[2]问题在这里

throws ForumNotFoundException, UnauthorizedException;

}

1.这里是调用一个类的实例方法, 可是在静态的jive-config.xml中并没有这用的节点,我想是在程序的初始化是写入了。请问这个写入程序在那里?

2. 在globl.jsp中

if (authToken == null) {

authToken = AuthorizationFactory.getAnonymousAuthorization();

isGuest=true;

}

这里想得到一个匿名的权限token,可是这里直接调用AuthorizationFactory

它是没有被实做的抽象类,这里的getAnonymousAuthorization并没有被实做,得到是null,这样写有何意义那?

请大家指点一二,刚开始看jive,总有些疑问。

niRvana&sexPistol
2003-10-27 22:24
我也今天开始看。有机会交流一下。我说说对你两个问题的理解:

1.如果没有在jive_config.xml中配置ForumFactory.className节点的话,将直接创建com.jivesoftware.forum.database.DbForumFactory。

if (classNameProp != null) {

className = classNameProp;

}

这一句说明classNameProp==null是使用default的classname。

2.authToken = AuthorizationFactory.getAnonymousAuthorization();

注意到getAnonymousAuthorization()是一个public static的方法,这样做就并没有任何问题。

zsn
2003-10-28 09:19
谢谢你的答复,今天好好想了一下发现我问题真是比较幼稚,呵呵

1只是jive的设计者多种形式解决问题的方式。这也提醒我以后要为每个关键设定值建立缺省备用值

2。这也是jive中值得学习的方式,抽象类的实例化是在自己内部定义的。

public static Authorization getAnonymousAuthorization() {

loadAuthorizationFactory(); //---"1

return factory.createAnonymousAuthorization();//---"2

}

"1自己找到了自己的子类"com.jivesoftware.forum.database.DbAuthorizationFactory";

"2,这个方法已经被是实作了

猜你喜欢