010,Spring 条件化装配Bean

V哥官网:http://www.vgxit.com

本博客对应视频教程:http://www.vgxit.com/course/23


条件化装配Bean


1,概述

有的时候我们在开发的时候需要按照条件来装配不同Bean。比如,我们开发一套人力资源管理系统。我们把这个系统分别提供给了公司A和公司B。但是公司A和公司B在导入用户数据的时候需求不同。公司A是导出了一个大的Json的文件给我们,让我们上传这个文件导入。而公司B是导出了一个Excel文件给我们,让我们导入这个文件。这个时候怎么办呢?


2,具体实现

思维导图:

1,定义一个员工数据操作的业务逻辑层,IEmployeeService接口

package com.vgxit.learn.spring.ktdm.condition.service;
public interface IEmployeeService {
    void implodeEmployees();
}

2,定义两个接口的实现类,分别代表A公司的业务,和B公司的业务

package com.vgxit.learn.spring.ktdm.condition.service.impl;

import com.vgxit.learn.spring.ktdm.condition.service.IEmployeeService;
import org.springframework.stereotype.Component;

@Component
public class AEmployeeService implements IEmployeeService {
    @Override
    public void implodeEmployees() {
        System.out.println("A公司导入员工");
    }
}
package com.vgxit.learn.spring.ktdm.condition.service.impl;

import com.vgxit.learn.spring.ktdm.condition.service.IEmployeeService;
import org.springframework.stereotype.Component;

@Component
public class BEmployeeService implements IEmployeeService {
    @Override
    public void implodeEmployees() {
        System.out.println("B公司导入员工");
    }
}

3,写一个配置文件来定义当前运行的业务环境,application.properties:

business.env=ENVA

4,编写对应的配置类:

package com.vgxit.learn.spring.ktdm.condition.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.PropertySource;

@ComponentScan("com.vgxit.learn.spring.ktdm.condition")
@PropertySource("classpath:appliction.properties")
public class ConditionConfig {
}

5,定义对应的加载条件类:

package com.vgxit.learn.spring.ktdm.condition.conditionbean;

import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
import org.springframework.stereotype.Component;

/**
 * 定义加载条件类
 */
public class ACondition implements Condition {
    /**
     * 条件生成的方法,如果这个方法的结果为true就表示要注入对应的Bean
     * @param conditionContext
     * @param annotatedTypeMetadata
     * @return
     */
    @Override
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        String envStr = conditionContext.getEnvironment().getProperty("business.env");
        return "ENVA".equals(envStr);
    }
}
package com.vgxit.learn.spring.ktdm.condition.conditionbean;

import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;

public class BCondition implements Condition {
    @Override
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        String envStr = conditionContext.getEnvironment().getProperty("business.env");
        return "ENVB".equals(envStr);
    }
}

6,测试代码:

package com.vgxit.learn.spring.ktdm.condition.test;

import com.vgxit.learn.spring.ktdm.condition.config.ConditionConfig;
import com.vgxit.learn.spring.ktdm.condition.service.IEmployeeService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class ConditionTest001 {
    public static void main(String[] args) {
        ApplicationContext ctx = new AnnotationConfigApplicationContext(ConditionConfig.class);
        IEmployeeService employeeService = ctx.getBean(IEmployeeService.class);
        employeeService.implodeEmployees();
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

V哥学It

赏小的一个钱吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值