`
yerk
  • 浏览: 21811 次
  • 性别: 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+spring+hibernate+richfaces配置

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

    JBoss encore 工程和 JUnit测试自动生成工具

    Seam和Weld是两个关键的Java EE组件模型和依赖注入(DI)框架。Seam是建立在Weld基础之上,提供了更高级别的抽象和便利性,使得处理Java EE组件和服务变得更加简单。Encore能够帮助开发者快速创建基于Seam和Weld的...

    Seam2.0学习文档

    Seam 使用@Name注解来标识组件,并通过依赖注入(DI)来连接组件之间的关系。 4. **Session Bean(会话Bean)**:在Seam中,会话Bean通常是用于持久化会话状态的EJB组件。它们可以是无状态的(Stateless)或者有...

    webbean.pdf

    WebBeans是Java平台上的一个新标准(JSR-299),旨在为开发者提供更便捷、灵活的方式来实现依赖注入(Dependency Injection, DI)以及上下文状态管理。这一技术在Seam框架的发展方向上占据着重要的位置,对于想要...

    SSH框架ppt文件

    SSH框架,全称为Struts+Hibernate+Spring,是Java Web开发中的一个经典组合,它将MVC(模型-视图-控制器)设计模式与数据持久化、依赖注入等技术结合在一起,提供了强大的企业级应用开发能力。下面我们将分别对这三...

Global site tag (gtag.js) - Google Analytics