一、目的:在项目中可以通过beanName获得其实例。
import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; import org.springframework.stereotype.Component; import com.xxx.exception.BusinessException; /** * ClassName:ServiceLocator <br/> * Function: 手动获取spring bean. <br/> * @since JDK 1.7 */ @Component public class ServiceLocator implements BeanFactoryAware { private final static Logger log = LoggerFactory.getLogger(ServiceLocator.class); private static BeanFactory beanFactory = null; private static ServiceLocator servlocator = null; /*** * getInstance:(单例 获取实例). <br/> * @since JDK 1.7 */ public static ServiceLocator getInstance() { if (servlocator == null) servlocator = (ServiceLocator) beanFactory.getBean("serviceLocator"); return servlocator; } /*** * getService:( 根据提供的bean名称得到相应的服务类 ). <br/> * @param servName bean名称 * @since JDK 1.7 */ public Object getService(String servName) { return beanFactory.getBean(servName); } /*** * getService:(根据提供的bean名称得到对应于指定类型的服务类). <br/> * @param servName bean名称 * @param clazz 返回的bean类型,若类型不匹配,将抛出异常 * @since JDK 1.7 */ public static Object getService(String servName, Class<?> clazz) { if(StringUtils.isBlank(servName) || null == clazz){ log.warn("获取bean失败:类名或类型为空!"); throw new BusinessException("获取bean失败!"); } return beanFactory.getBean(servName, clazz); } public void setBeanFactory(BeanFactory factory) throws BeansException { ServiceLocator.beanFactory = factory; } public BeanFactory getBeanFactory() { return beanFactory; } }
二、使用
_dicService = (DictionaryService) ServiceLocator.getInstance().getService("dictionaryService");
相关推荐
安装labview之后,如何解决NI service locator is not running
总结来说,Autofac的ServiceLocator模式应用结合零配置,使得我们可以更轻松地管理和解耦应用程序中的组件。通过自动扫描、特性注解和模块化,我们可以减少大量手动配置,同时保持代码的清晰和可维护性。在`...
Swift-Locatable是一个专门针对Swift编程语言设计的微框架,其核心在于利用Swift的Property Wrappers特性,为开发者提供了一种简洁、高效的方式来实现Service Locator设计模式。Service Locator模式是一种常用的依赖...
在"11-ServiceLocator-Code.zip"压缩包中的"Code"文件,很可能包含了实现服务定位器模式的示例代码。通过对这些代码的分析,我们可以看到服务定位器是如何工作的,以及它与依赖注入的区别。通过学习这段代码,开发者...
"Android-SimpleLocator"正是一个针对Android平台的轻量级、高效的Service Locator实现,它简化了依赖注入的过程,使得开发者能够更加专注于业务逻辑。 服务定位器(Service Locator)是一种全局性的依赖查找容器,...
.NET 服务器定位模式(Service Locator Pattern)——Common Service Locator-附件资源
Ckode.ServiceLocator Ckode.ServiceLocator是一个简单的本机实现的服务定位器,用于简化依赖项注入。 例子: 创建一个实例: var locator = new ServiceLocator();ISomeInterface instance = locator....
该文件解释了IServiceLocator实现必须正确实现以符合此接口的预期语义,以及一些实现注意事项。 规格 GetInstance(Type, string) 这是从容器中检索单个实例的核心方法。 此方法不得返回null。...
皮约克pyioc是的单个文件IoC(或ServiceLocator),用于在脚本中的任何位置解析(定位)服务。特征 单例和实例容器 自动解决__init__函数的参数依赖性 使用“键”和/或“类型”来解析服务安装$ git clone ...
服务定位器 服务定位器违反了封装,隐藏了正确使用的前提条件。 是一种反模式。 是一种模式,允许我们开发松耦合代码。 结果 Get cached! services.Servicio1 Creating a new services.Servicio1 instance. ...
private static ServiceLocator serviceLocator = null; private BeanFactory factory = null; protected static Log log = LogFactory.getLog(ServiceLocator.class); private ServiceLocator() { String fn = ...
本文将深入探讨ServiceLocator模式,以及它在.NET中的实现,特别是与C#编程语言的结合。 服务定位器的核心理念是提供一个全局注册表,它存储了所有服务实例或服务接口的映射。当一个类需要依赖其他服务时,它不直接...
JSlim,全称为"Java Service Locator Information Manager",是一个专门针对J2EE应用设计的开源工具。它的主要目标是帮助开发者在实现服务定位器模式时,提供一个清晰且可扩展的框架。服务定位器模式是一种设计模式...
标题中的“NI软件卸载工具.zip”表明这是一个包含卸载National Instruments(NI)软件的专用工具的压缩文件。National Instruments是一家知名的软件和硬件供应商,其产品广泛应用于测试、测量和控制领域。...
参考Yii2实现的以依赖注入为基础的服务定位器,Yii2代码部分为vendor / yiisoft / yii2 / di /依赖注入DI依赖注入知道怎么初始化对象,只需配置构造参数就可以,核心代码如下(简化,只是说思路) class Di { //经过...
在本文中,我们将深入探讨Laravel开发中的"locator"项目,这是一个简单的本地路由器。通过理解这个项目,我们可以学习到Laravel框架的核心概念以及如何构建自定义的路由解决方案。首先,让我们了解一下Laravel。 ...
即使 PostRepository 没有被设置为公共服务,我们仍能通过容器获取到它,这是因为 Doctrine 在编译容器时,对于标记为 `doctrine.repository_service` 的服务类,会将其注册到 ServiceLocator 中。 ServiceLocator ...