`
longgangbai
  • 浏览: 7340775 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

依赖注入功能的另一种简单实现

阅读更多

               针对项目中采用IBatis+EJB+RCP作为架构,IBatis没有IOC相关的功能,但是系统中可能采用多个数据源和不同的缓存对象,于是自己现实一个简单针对部分对象的的依赖注入功能实现相关的功能。实现思路如下:

             在需要注入的类中添加相关的注解,通过EJB的拦截器机制对注解对象进行注入对象。

             

 

package com.easyway.inject;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
 * 元数据注解类的应用
 * @author longgangbai
 * @date 2010-9-7
 * @version 1.0
 * @since JDK6.0
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
public @interface Inject {
    /**
     * 注解字段的名称
     * @return
     */
     String fieldName();
}

 

 

默认拦截器的类如下:

import java.lang.reflect.Field;

import javax.annotation.PostConstruct;
import javax.interceptor.AroundInvoke;
import javax.interceptor.InvocationContext;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;



public class InjectorManager {

	private static Log log = LogFactory.getLog(InjectorManager.class);

	/**
	*此处通过PostConstruct对拦截对象是想前置注入 
	 * @param invocation 拦截器上下文
	 * @return
	 * @throws Exception
	 */
	@PostConstruct
	//@AroundInvoke
	public Object interceptorInjector(InvocationContext invocation)
			throws Exception {
		log.info("调用注解管理,注入ibatis sqlmapclient和cache!");
		try {
			Object fromObject = invocation.getTarget();
			Field[] fields = fromObject.getClass().getDeclaredFields();

			// 获得基类的成员变量
			if (fields.length == 0) {
				fields = fromObject.getClass().getSuperclass()
						.getDeclaredFields();
			}

			for (Field field : fields) {
				field.setAccessible(true);
				// 处理ibatis注解
				if (field.isAnnotationPresent(MMM.class)) {
					 //获取MMM的过程
                                                                    ...................................					
                                                       field.set(fromObject, mmm));
				}

				// 处理缓存注解
				if (field.isAnnotationPresent(XXXXX.class)) {
					..................................
				}
				field.setAccessible(false);
			}

			return invocation.proceed();
		} catch (Exception e) {
			e.printStackTrace();
			throw new SystemException("");
		} finally {
			log.info("注入ibatis sqlmapclient和cache完成!");
		}
	}

}

 使用如下:

 

@Stateless
@Local(GeneralDAO.class)
@Interceptors(InjectorManager.class)
public class IBatisGeneralDAO implements GeneralDAO :

 

 

 

基本代码如上,详细代码忽略。。。O(∩_∩)O哈哈~

分享到:
评论

相关推荐

    spring依赖注入底层详解

    依赖注入是一种设计模式,它允许我们把一个对象的依赖关系传递给另一个对象,而不是让对象自己去查找或创建依赖。在Spring中,依赖注入可以通过构造器注入、设值注入和接口注入三种方式实现。 1. 构造器注入:通过...

    Spring 核心机制(依赖注入)

    依赖注入是一种设计模式,它允许在运行时将对象的依赖关系动态地传递给对象,而不是在代码中硬编码这些依赖。这一模式的核心思想在于将组件之间的耦合最小化,使组件更易于测试、维护和重用。依赖注入主要关注于两个...

    spring依赖注入三种方式 测试源码

    在Spring框架中,依赖注入(Dependency Injection,简称DI)是一种重要的设计模式,它使得对象之间的耦合度降低,提高了代码的可测试性和可维护性。本文将深入探讨Spring中的三种依赖注入方式,并结合源码分析其工作...

    依赖注入相关解释

    依赖注入是一种编程模式,它提倡通过外部配置而不是硬编码的方式管理组件之间的依赖关系。这种模式可以显著降低组件间的耦合度,并且使得系统更加灵活和易于测试。 **依赖注入与控制反转** 依赖注入和控制反转...

    Spring的依赖注入,与前置通知的实例

    总结来说,Spring的依赖注入提高了代码的可测试性和可维护性,而前置通知则是AOP的一种实现,它让我们能够方便地插入预处理逻辑。这两个特性共同提升了Spring框架的灵活性和实用性,是现代企业级Java应用开发中的...

    SSH笔记-泛型依赖注入

    泛型依赖注入的另一个优势是,它可以减少编译时的类型转换。在没有泛型依赖注入的情况下,我们可能需要在运行时进行强制类型转换,如`((UserRepository) userService.getDao())`。而现在,由于Spring能够识别并处理...

    Spring学习笔记(6)----编码剖析Spring依赖注入的原理

    在Spring框架中,依赖注入(Dependency Injection,简称DI)是一种重要的设计模式,它极大地提高了代码的可测试性和可维护性。本篇学习笔记将深入剖析Spring依赖注入的原理,通过源码分析帮助我们理解这一核心机制。...

    ButterKnife依赖注入框架的简单用法

    - Android Jetpack的Hilt是另一个强大的依赖注入库,它不仅支持视图注入,还支持组件依赖注入,提供了一种全面的解决方案。 总之,ButterKnife通过注解简化了Android应用的视图绑定和事件处理,让开发者能更加专注...

    轻量级 Swift 依赖注入框架.zip

    Swift 依赖注入(Dependency Injection,简称 DI)是一种设计模式,用于减少代码间的耦合,提高应用的可测试性和可维护性。在这个轻量级 Swift 依赖注入框架中,我们主要探讨的是如何在 Swift 项目中实现这一模式,...

    Spring_依赖注入_面向接口编程_不同加载方式

    另一方面,面向接口编程是一种重要的设计原则,它提倡在代码中使用接口而非具体实现。在Spring中,我们通常定义一个接口,然后创建其实现类。例如: ```java public interface ExampleService { void doSomething...

    什么是依赖注入——本文作者的思想太经典了

    "依赖注入是一种软件设计模式" 依赖注入(Dependency Injection)是一种软件设计模式,用于解耦合软件系统中的组件之间的依赖关系。它允许组件之间松散耦合,提高系统的灵活性、可维护性和可扩展性。 在传统的软件...

    Martin Fowler 控制反转与依赖注入

    - **设值方法注入**:另一种常用的依赖注入方式,依赖项通过setter方法在运行时设置。这种方式相对灵活,但可能导致对象状态不一致的问题,因为依赖项可以在任何时候被更改。 使用Spring框架进行设值方法注入时,...

    sping2.5依赖注入示例

    Spring提供了两种主要的依赖注入方式:构造器注入和setter注入。 1. 构造器注入:在类的构造函数中,通过参数接收依赖的对象。Spring容器会在创建实例时传递所需的依赖对象。例如: ```java public class MyClass ...

    spring依赖注入

    在Spring框架中,依赖注入是一种关键的设计模式,用于管理和配置应用程序中的对象及其依赖关系。依赖注入分为两种主要类型:属性注入和对象注入。 1. **属性注入**:属性注入是指通过setter方法将依赖项注入到目标...

    MVC5+EF6依赖注入开发利器

    依赖注入(Dependency Injection,简称DI)是一种设计模式,它有助于减少代码之间的耦合,提高软件的灵活性和可测试性。在MVC5中,Unity是常用的DI容器,它可以帮助我们将依赖的对象实例化并注入到需要它们的地方,...

    c# 实现的简单的 注入容器

    在软件开发中,依赖注入(Dependency Injection,简称DI)是一种设计模式,用于降低代码之间的耦合,提高可测试性和可维护性。控制反转(Inversion of Control,简称IOC)是DI的核心理念,它将对象之间的依赖关系从...

    EJB依赖注入的原理

    依赖注入(Dependency Injection,简称DI)是软件设计模式中的一种,它强调将对象间的依赖关系交由外部容器管理,而非由对象自身负责。EJB3.0规范引入依赖注入,大大提高了代码的可测试性和可维护性。在EJB3.0中,...

    Spring依赖注入原理解析.doc

    依赖注入的主要思想是,一个对象(调用者)无需知道如何创建或获取它依赖的另一个对象(被调用者)。这样,调用者和被调用者之间的耦合度降低,增强了代码的可测试性和可维护性。Spring通过两种主要方式实现依赖注入...

    Spring依赖注入使用实例工厂设注入demo

    在Spring框架中,依赖注入(Dependency Injection,简称DI)是一种重要的设计模式,它使得对象之间的耦合度降低,提高了代码的可测试性和可维护性。本示例将深入讲解如何在Spring中通过实例工厂方法实现依赖注入,并...

    Spring的本质系列(1)依赖注入共3页.pdf.zip

    依赖注入是一种设计模式,它允许我们解耦组件间的依赖关系,提高代码的可测试性和可维护性。在传统的编程方式中,一个类通常会自行创建或查找其依赖的对象,这种方式被称为"硬编码依赖"。而在Spring框架中,依赖注入...

Global site tag (gtag.js) - Google Analytics