/**
* 获取指定包路径下的控制器列表
* @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 色色
* vb2005xu@iteye.com
* 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源文件好看啊....
可能我比较懒,所以.... 我对自己很无语...
分享到:
相关推荐
在Java开发中,元数据编程是一种强大的工具,它允许开发者通过元数据来描述代码的行为,而不是硬编码在程序中。这种技术在很多框架中得到广泛应用,例如Spring框架。本篇文章将探讨如何在Java环境中,利用元数据编程...
- **元数据建模**:元数据是对数据的描述性信息,可以帮助理解和管理数据。Java支持使用元数据进行建模,便于数据的结构化和标准化。 - **XML**:可扩展标记语言(XML)是一种用于存储和传输数据的标准格式。Java...
2. **表元数据获取**:连接建立后,工具会查询数据库获取表的信息,包括字段名、类型、主键、外键等。这些信息是生成代码的基础。 3. **Freemarker模板**:Freemarker是一个强大的模板引擎,允许开发者定义代码结构...
8. **元数据**:在Java中,元数据是关于数据的数据,如字段的数据类型、长度、精度等。这些信息在构建数据字典时非常重要,可以使用Java反射API来获取。 9. **异常处理**:在处理数据时,错误和异常是常见的。Java...
元数据是指与接口相关的非数据信息,如参数类型、参数名、参数描述、返回值类型等。在Spring MVC中,可以通过反射和注解解析来获取这些元数据。例如,`@RequestParam`、`@PathVariable`、`@RequestBody`等注解提供了...
总结来说,"Oracle根据数据库自动生成JAVA代码"是一个集成开发环境(IDE)或代码生成工具的功能,它利用元数据信息自动生成Java项目的基本架构,包括实体类、DAO、Service、Controller以及前端HTML模板。这种自动化...
17. **注解(Annotation)**:元数据,用于提供编译器或运行时的信息。 通过这些基础应用实例,初学者可以逐步熟悉Java语言,并通过实践提升编程技能。每完成一个实例,都能加深对Java语法和编程思维方式的理解。...
2. **元数据驱动**:通过分析数据库模式、ORM映射文件(如Hibernate的XML配置或JPA的注解)或者其他形式的数据源,自动生成与之对应的Java实体类、数据访问对象(DAO)、服务接口和服务实现等。 3. **代码片段集成*...
"struts"是一个用于构建MVC(模型-视图-控制器)架构的Java Web应用框架。它可以帮助开发者组织和控制应用的业务逻辑。在元数据查询中,Struts可能被用来设计和实现用户界面,接收查询参数,调用后端服务进行元数据...
这个“java代码生成器”可能基于一些预定义的模板或者通过元数据来动态生成符合业务需求的Java类、接口、方法等。在软件开发过程中,尤其是大型项目中,这种自动化代码生成技术被广泛应用。 **1. 代码生成器的优势*...
《Java程序设计与应用开发(第2版)》是一本深度探讨Java编程语言以及其在实际应用中的开发方法的专业书籍。这本书涵盖了从基础语法到高级特性的全面内容,旨在帮助读者掌握Java编程的核心技能,并能将这些技能应用...
对于数据库支持,如Oracle和MySQL,代码生成工具会根据数据库的元数据自动生成相应的SQL语句和JDBC代码,包括增删改查等基本操作。同时,工具通常允许开发者自定义模板,以满足特定数据库的特性或公司的编码规范。 ...
1. **数据库连接与元数据获取**:代码生成器首先需要建立到MySQL数据库的连接,通过JDBC API获取数据库的元数据,如表名、字段名、数据类型等。这些信息是生成代码的基础。 2. **实体类生成**:根据数据库表的字段...
2. **元数据驱动**:可能依赖于数据库元数据或其他数据源来生成与数据模型相关的代码。 3. **代码质量**:生成的代码应遵循良好的编程规范,例如驼峰命名法、注释规范等。 4. **可扩展性**:允许添加新的生成规则...
8. **注解(Annotation)**:注解是元数据的一种形式,提供了一种安全的方法来将信息附加到代码中,而不影响其运行时行为。常见的注解如@Override、@Deprecated等。 9. **泛型**:泛型引入自Java 5,用于提供类型...
2. **元数据解析**:通常,代码生成器需要从数据库或其他数据源获取元数据,例如表结构、字段类型等,这可能涉及到JDBC或ORM框架如Hibernate、MyBatis的使用。 3. **代码模板设计**:开发者需要设计符合项目规范的...
10. **注解(Annotation)**:用于向编译器或JVM提供元数据,可以用于代码自动生成、编译时检查、运行时处理等。 11. **Spring框架**:Java最流行的IoC(控制反转)和AOP(面向切面编程)框架,广泛应用于企业级...
3. **AndroidManifest.xml**:这是每个Android应用的核心配置文件,用于声明应用的组件、权限和其他元数据。 4. **Activity和Intent**:Activity是Android应用的基本交互单元,Intent则用于启动Activity或传递数据...
11. **部署描述符**:在J2EE应用中,部署描述符(如web.xml或ejb-jar.xml)定义了应用的元数据,包括组件配置、安全设置、过滤器和监听器等。 12. **性能优化**:通过调整Tomcat配置、缓存策略、负载均衡和集群等...