JAvaメタデータアプリケーション、コントローラのメタデータ記述を自動的に取得


/**
	 *               
	 * @param packageName
	 * @return
	 */
	public static ArrayList<Class> getControllerListFromPackage(String packageName){
		ArrayList<Class> controllers = new ArrayList<Class>() ;
		Object prolbemObj = null;
		try {
			Class[] classes = ReflectUtil.getClassesFromPackage(packageName);
			for(Class cls : classes){
				prolbemObj = cls ;
				if (SysUtil.isController(cls)){
					controllers.add( cls );
				}
			}				
		}
		catch(Exception e){
			System.out.println("          : " + prolbemObj);
		}
		finally{
			return controllers;
		}		 
	} 
	
	// -------------------------------------------------------
	public static String getAnnoDescription(Anno_Controller anno_ctl){
		if (anno_ctl != null)
			return anno_ctl.description() ;		
		return null ;
	}
	/**
	 *           ,        ,             
	 * @param ctl
	 * @return
	 */
	public static String getControllerAnnoDescription(Class ctl){
		Anno_Controller anno_ctl = ((Anno_Controller) 
				ctl.getAnnotation(Anno_Controller.class)) ;
		String description = getAnnoDescription(anno_ctl);
		if (description != null)
			return description ;
		
		//         
		/**
		 *   java     ,     
			 *        :          
			 *        :        
		 * 
		 *               ,             
		 */
		Class superClass = ctl.getSuperclass();//    
		if ( isController(superClass)){
			return getControllerAnnoDescription(superClass);
		}
		else {
			//           
			return getControllerAnnoDescription(Controller.class);
		}
	}
 
と書く
実行結果
コントローラが見つかりました
class com.sinomagazine.fuseblog.controller.D
説明:クラス:Default、デフォルトコントローラ
[actionIndex::d.do]
[actionIndex::投稿イベントの削除]
---------------------------------
class com.sinomagazine.fuseblog.controller.Default
説明:クラス:Default、デフォルトコントローラ
[actionIndex::index.do]
[actionIndex::デフォルトイベント]
---------------------------------
 
作成の目的:
コントローラのプロファイルを構成したくなくて、CRUD操作のグループごとに少なくとも4つのActionクラスを占有する問題を解決して、コントローラファイルを構成したくなくて、
 
命名規則を使用して、作成されたXMLの煩雑さを低減します...
 
ある友人によると、StrutsのDispatcherActionを使用すると、パラメータを入力することで各actionが1つのクラスになる問題を解決することができるという.
しかし、これはこれまでの开発方式よりも复雑で、配置が难しいようで...いや...
 
PHPのような、不要、または少量の構成しか必要としない開発モデルを実現したい.ここではコントローラを構成するこの自動化を実現したいだけだ.0構成
構想はすでに大体理解して、次第に実現している過程の中で..
 
package com.sinomagazine.fleajava;

import com.sinomagazine.fleajava.core.Interrupt;

/**
 *     
 *  
 * @author   
 * [email protected]
 * 2009-7-3
 */
public class Runner {

	/**
	 *       
	 */
	public static void main(String[] args) throws Exception {   
		Interrupt interrupt = new Interrupt() ;
		interrupt.setControllerPackage("com.sinomagazine.fuseblog.controller");
		interrupt._do("Default", "index");   
    }
}

 
package com.sinomagazine.fuseblog.controller;

import com.sinomagazine.fleajava.controller.Controller;


import com.sinomagazine.fleajava.core.annotation.Anno_Action;
import com.sinomagazine.fleajava.core.annotation.Anno_Controller;
import com.sinomagazine.fleajava.core.annotation.Anno_View;

@Anno_Controller(description=" : Default,     ")
public class Default implements Controller {
	
	@Anno_Action(description="    ")
	@Anno_View(url="index.do")
	public void actionIndex(){
		
	}

}

 
package com.sinomagazine.fuseblog.controller;

import com.sinomagazine.fleajava.controller.Controller;


import com.sinomagazine.fleajava.core.annotation.Anno_Action;
import com.sinomagazine.fleajava.core.annotation.Anno_Controller;
import com.sinomagazine.fleajava.core.annotation.Anno_View;

public class D extends Default implements Controller {
	
	@Anno_Action(description="      ")
	@Anno_View(url="d.do")
	public void actionIndex(){
		
	}
}

 
package com.sinomagazine.fleajava.controller;

import com.sinomagazine.fleajava.core.annotation.Anno_Controller;

@Anno_Controller(description="  : Controller,             ")
public interface Controller {
	/**
	 *        
	 */
	public static String controllerName = null;
	/**
	 *         
	 */
	public static String actionName = null;
	
}

 
 
今后javaの开発はXMLプログラミングをプログラミングしないことを望みます...XMLは良いですが、盲目的に崇拝しないでください...
 
先日、国内のある大唱快速開発のJAVAフレームワークを見ました.私は日、XMLプロファイルで、次から次へと、何も言いたくありません.javaプログラマー、XMLがきれいですか?それともjavaソースファイルがきれいですか?
 
私は怠け者かもしれないので、私は自分にとても无言です...