当前位置: 首页 > 面试题库 >

Spring在运行时选择Bean实现

唐宏壮
2023-03-14
问题内容

我正在使用带有注释的Spring Bean,并且需要在运行时选择其他实现。

@Service
public class MyService {
   public void test(){...}
}

例如,我需要Windows平台,我需要MyServiceWin extending MyServiceLinux平台MyServiceLnx extending MyService

目前,我只知道一种可怕的解决方案:

@Service
public class MyService {

    private MyService impl;

   @PostInit
   public void init(){
        if(windows) impl=new MyServiceWin();
        else impl=new MyServiceLnx();
   }

   public void test(){
        impl.test();
   }
}

请考虑我仅使用注释,而不使用XML配置。


问题答案:

您可以将bean注入移动到配置中,如下所示:

@Configuration
public class AppConfig {

    @Bean
    public MyService getMyService() {
        if(windows) return new MyServiceWin();
        else return new MyServiceLnx();
    }
}

或者,您可以使用配置文件windowslinux,然后用@Profile注释(如@Profile("linux")或)注释您的服务实现@Profile("windows"),并为您的应用程序提供此配置文件之一。



 类似资料:
  • 我在SpringWeb应用程序中有一个原型范围的bean(我使用的是Spring注释),我们称之为MainBean,它通过依赖注入使用IOtherBean的一种实现。 我的问题是,直到运行时我们才知道我们需要使用哪个实现。当我们调用MainBean的一个方法(比如doStuff(字符串参数))时,它应该根据参数值来决定选择哪个实现。 目前,我只是通过将Application Context自动加载

  • 问题内容: 我有以下课程: 我想做的是确定应用程序已经运行时(即 未 在启动时)将哪个实施注入。 所以理想情况是这样的: 做到这一点的最佳方法是什么? 问题答案: 用和声明实现 然后将它们都注入并使用:

  • 我知道ApplicationContext扩展点,如ApplicationContext事件和BeanFactoryPostProcessor。 我手头的问题是,在创建了一些bean之后,我需要添加bean,我想这会丢弃BeanFactoryPostProcessor选项,因为在应用程序上下文开始注册bean之前会发生这种情况。 我尝试在上下文刷新后添加一个singletonBean:

  • 我坚持从普通Java到Spring的简单重构。应用程序有一个“容器”对象,该对象在运行时实例化其部分。让我用代码解释一下: 基本上,在加载容器期间,要求一些外部系统向他提供关于每个的数量和配置的信息,然后它根据给定的规范创建bean。 问题是:通常当我们在Spring这样做的时候 我们的对象已完全配置,并已注入所有依赖项。但是在我的例子中,我必须实例化一些对象,在我执行load()方法后,这些对象

  • 只需要社区评估的东西。下面是一段代码,这是一个创建特定类型实例的简单工厂。该方法将在上下文中注册bean作为原型并返回实例。这是我第一次在运行时配置bean。你能好心评估并提供反馈吗?事先谢谢你。 FLEX Sync工厂已在IoC容器中配置为单例。因此,要创建一个新的同步管理器,我需要执行以下操作: 我使用的是Spring 3.1。请回顾并提供宝贵的反馈。 亲切的问候。

  • 我使用log4j2.9 我在log4j2.xml中配置了文件追加器。 我在Runtiime找不到任何如何选择appender的例子。 你能给我举个简单的例子吗?