簡體   English   中英

我想根據一個標志加載一個特定的類,而不是加載兩個類並使用 Springs 中所需的一個類

[英]I want to load a specific class based on a flag instead of loading two class and using one the required in Springs

在配置中,我有一個標志 isFlagEnabled。

所以我必須從 spring 配置中讀取標志,並基於此我想執行特定的類 A 或 B 。 這意味着我只想在 isFlagEnabled 為 true 時加載 A 類,同樣僅當 isFlagEnabled 為 false 時才加載類 B。

我已經編寫了以下代碼,但在攝取時卡住了。

public interface MediatorInt {

public void init();

}

class A implements MediatorInt {
        init() { It does some task }
    }

class B implements MediatorInt {
    init(){ It does some task }
}

public class MasterNewGenImpl {
    @Autowired
    @Qualifier("config")
    private Configuration config;

    @Autowired
    MediatorInt mediatorInt;

    private final Logger logger = Logger.getLogger(getClass());

    public void startService() {
        mediatorInt.init();
    }
}

上下文.xml 文件

  <context:component-scan base-package="com.ca"/>
    <bean id="config" class="com.ca.configuration.ConfigImplementation"/>    
    <bean id="masterSlave" class="com.ca.masterslave.A"/>
    <bean id="systemState" class="com.ca.masterslave.B"/>
    <bean id="masterSlaveNewGen" class="com.ca.masterslave.MasterNewGenImpl">
    <property name = "mediatorOrMasteSlave" value="#{config.getMediatorMode() == 'true' ? 'systemState' : 'masterSlave'}" />
</bean>

所以現在我不知道如何根據配置標志注入特定對象。 我想通過 Lazy-init 使其在不需要時不會加載其他對象。 我非常感謝這些建議。

如果您對 spring 掃描這兩個實現都滿意,那么您可以使用@Qualifier選擇所需的一個。 如果您希望 spring 不掃描基於屬性的某個類,您可以使用@Conditional

class SomeCondition implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {

        String isFlagEnabled = context.getEnvironment().getProperty("isFlagEnabled");
        return isFlagEnabled.equals("true"));
    }
}

@Configuration
@Conditional(value = SomeCondition.class)
class A implements MediatorInt {
        init() { It does some task }
 }

在上面的配置中,僅當SomeCondition類中的matches()返回true 時才掃描類A,您可以在其中定義條件。

您可以使用

@Autowired
@Qualifier( "systemState" )
MediatorInt systemSateMeidator;

@Autowired
@Qualifier( "masterSlave" )
MediatorInt masterSateMeidator;

通過@Qualifier您可以指導 spring 如何滿足您的組件請求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM