`
yerk
  • 浏览: 21517 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一个用于seam单元测试的DI(依赖注入)工具类

阅读更多
package com.yerk.seam;

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;

import org.jboss.seam.annotations.In;

public final class ComponentContexts {

	private final Map<String, Object> componentMap = new HashMap<String, Object>();

	private ComponentContexts() {
	}

	private static ComponentContexts instance = new ComponentContexts();

	final public static ComponentContexts getInstance() {
		return instance;
	}

	public void injectObject(Object component) throws Exception {
		if (component == null) {
			throw new RuntimeException("Null Object Cann't be Injected!");
		}

		for (Field field : component.getClass().getDeclaredFields()) {
			if (field.isAnnotationPresent(In.class)) {
				injectObjectToField(component, field);
			}
		}
	}

	private void injectObjectToField(Object obj, Field field) throws Exception {
		Object component = componentMap.get(field.getName());
		
		if (component == null) {
			component = createComponent(field);
			componentMap.put(field.getName(), component);
		}
		
		field.setAccessible(true);
		field.set(obj, component);
		injectObject(component);
	}

	private Object createComponent(Field field) throws Exception {
		Class<?> clazz = field.getType();
		String classFullName = clazz.getName();
		
		if (clazz.isInterface()) {
			classFullName = new StringBuilder().append(
					clazz.getPackage().getName()).append(".impl.").append(
					clazz.getSimpleName()).append("Impl").toString();
		}
		
		return Class.forName(classFullName).newInstance();
	}

}
2
0
分享到:
评论

相关推荐

    提高Seam系统性能测试点

    Seam是一个Java EE框架,主要用于构建富互联网应用程序(Rich Internet Applications)。它整合了JSF、EJB、CDI、Hibernate等技术,为开发者提供了一种更高效、更灵活的开发方式。性能测试是确保Seam应用能够高效...

    近两个星期seamtest的学习

    在过去的两周里,我深入学习了SeamTest,这是一个用于Java EE应用测试的强大工具,尤其在Seam框架的上下文中。SeamTest提供了一种结构化的、声明式的测试方法,帮助开发者更有效地验证应用程序的各个层面,包括组件...

    seam in action 中文 english

    8. **测试支持**:Seam提供了一套完整的测试工具,包括单元测试、集成测试和端到端测试,确保应用的质量。 然而,根据描述中的反馈,英文版可能在阅读体验上并不理想,可能需要花费更多的时间和精力去理解。对于...

    JBOSS SEAM组件中文手册

    3. **注入(Injection)**: Seam支持依赖注入,可以将一个组件的实例自动注入到其他组件中,无需手动创建对象或管理依赖关系。 4. **导航和流程控制(Navigation and Flow Control)**: Seam提供了强大的导航机制,...

    seam+spring+hibernate+richfaces配置

    Spring是一个开源的轻量级框架,它主要关注于 inversion of control(IoC,控制反转)和dependency injection(DI,依赖注入)。Spring提供了AOP(面向切面编程)支持,用于事务管理、安全控制等。Spring与Hibernate...

    seam需要的jar包

    首先,Seam框架的核心依赖于JSF,这是Java EE中的一个用户界面组件框架,用于构建交互式Web应用。JSF提供了模型-视图-控制器(MVC)架构,通过组件和事件处理机制来处理用户交互。在压缩包中,你会找到如`jsf-api....

    Jboss seam3 实战

    JBoss Seam是一个开源的Java EE框架,它通过依赖注入和会话模型,简化了基于Java EE的企业级应用开发。Seam框架为开发者提供了一个集成化的环境,其中整合了多种技术规范,比如EJB3、JSF、JPA、SessionBean、MDB和...

    seam的注解和标签

    Seam是一个Java EE框架,它将JavaServer Faces(JSF)、Java Persistence API(JPA)、Inversion of Control(IoC)和Enterprise JavaBeans(EJB)等技术融合在一起,为开发复杂的Web应用程序提供了便利。在Seam框架...

    jboss seam 2.01GA REF DOC

    - **调试工具**:Seam 提供了一个专用的调试页面,帮助开发者诊断问题。 - **日志记录**:通过日志记录来追踪错误和异常。 #### 第六部分:结合 Seam 和 jBPM 的完整应用示例 本节通过一个 DVD 商店示例展示了如何...

    seam carving 测试数据集免费分享

    Seam Carving是一种在计算机视觉领域中用于图像内容自适应调整的技术,主要应用于图像缩放而不失真关键特征。这个测试数据集显然专注于这一技术的实际应用和效果验证。以下是关于Seam Carving及相关知识点的详细解释...

    seam创建工程

    Seam 是一个开源的Java EE框架,主要用于简化企业级应用的开发。它集成了许多流行的框架,如JSF、EJB、JPA等,提供了一种统一的方式来处理组件交互、事务管理、安全性以及错误处理等问题。这篇博客文章“seam创建...

    eclipse 工程的 Seam 例子

    6. 运行工程,Seam会自动处理依赖注入和事件处理,你可以通过浏览器查看和测试JSF页面。 **总结** "Eclipse工程的Seam例子"是一个综合性的Java EE项目,结合了Seam的组件化开发、EJB的业务处理和JSF的用户界面。...

    jsf+seam+jpa实例

    Seam是一个全面的Java EE应用框架,它无缝集成了JSF、EJB、CDI(Contexts and Dependency Injection)和其他技术。Seam的主要优点在于其对组件化开发的支持,以及对业务逻辑和用户界面的紧密集成。在本实例中,Seam...

    Seam_2.0_Reference_zh_CN

    Seam 2.0 是一个全面的Java EE框架,它为开发人员提供了一种整合多种技术,如JavaServer Faces (JSF)、Enterprise JavaBeans (EJB)、Java Persistence API (JPA)以及Spring等的强大工具。这个"Seam_2.0_Reference_zh...

    Seam - 语境相关的组件

    例如,`@Named`注解用于标识一个bean,`@Inject`用于注入依赖,`@ManagedBean`和`@ViewScoped`注解分别定义了bean的管理方式和作用域。 在Seam框架中,JSF和EJB的集成非常紧密。JSF处理用户界面交互,而EJB则处理...

    jboss-seam2.0文档

    Seam 2.0引入了CDI,这是Java EE 6中的一个重要组成部分,它提供了一种统一的依赖注入机制,简化了对象的生命周期管理和依赖管理。 2.4 JPA集成 Seam 2.0与JPA的集成使得数据库操作变得更加简单,支持实体管理和...

    seam node

    在Seam项目中,`seamgen`是一个用于自动生成代码的工具,它可以基于数据库表结构自动生成相应的实体类、Home类和其他辅助类,从而加速开发过程。然而,在使用`seamgen`生成的代码时,可能会遇到一些不易理解的地方,...

    jboss seam 学习资料,seam in action和官方手册

    JBoss Seam 是一个开源的应用程序框架,它整合了JavaServer Faces (JSF)、Enterprise JavaBeans (EJB)、Java Persistence API (JPA) 和其他Java EE技术,旨在简化开发过程,提高开发效率。本资料集合包括《Seam in ...

    为Seam做好准备

    Seam是一个Java EE集成框架,它将JavaServer Faces(JSF)、Java Persistence API(JPA)、Enterprise JavaBeans(EJB)3.0以及其他组件统一在一个简化开发的环境中。这篇博客的链接虽然无法直接访问,但我们可以...

Global site tag (gtag.js) - Google Analytics