使用spring的ObjectProvider实现策略模式

interface


/**
 * @Author dbin
 * @Date 2020/1/8
 **/
public interface Calc {
    String getName();

    int doOption(int a, int b);
}

不同的实现方式

/**
 * @Author dbin
 * @Date 2020/1/8
 **/
@Service
public class CountCalc implements Calc {
    @Override
    public String getName() {
        return "jia";
    }

    @Override
    public int doOption(int a, int b) {
        return a + b;
    }
}

/**
 * @Author dbin
 * @Date 2020/1/8
 **/
@Service
public class SubtractCalc implements Calc {
    @Override
    public String getName() {
        return "jian";
    }

    @Override
    public int doOption(int a, int b) {
        return a - b;
    }
}

策略模式

  1. ObjectProvider 对象提供器
@Slf4j
@Service
public class SuperContext {

    private Map<String, Calc> objMap=Maps.newHashMap();

    /**
     * 构造方法 并注入
     * @param calcProvider
     */
    @Autowired
    SuperContext(ObjectProvider<List<Calc>> calcProvider)  {

        List<Calc> calcs =calcProvider.getIfAvailable();

        Assert.notNull(calcProvider,"获取到的对象是空的 is null");

		// 遍历calc的implement类
        for (Calc calc : calcs) {
            objMap.put(calc.getName(), calc);
        }

    }

	// 根据type 调用不同的对象执行一个操作
    public int doAction(String type, int a, int b){
        return objMap.get(type).doOption(a, b);
    }

}

package com.xiangyixiang.www.cloud.business.gateway.configure; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.http.HttpMessageConverters; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.reactive.CorsWebFilter; import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource; import org.springframework.web.util.pattern.PathPatternParser; import java.util.stream.Collectors; /**网关统一配置允许跨域 * zj 解决跨域问题 * @author 张静 */ @Configuration public class CorsConfig { @Bean public CorsWebFilter corsFilter() { CorsConfiguration config = new CorsConfiguration(); config.setAllowCredentials(true); config.addAllowedMethod("*"); config.addAllowedOrigin("http://39.105.36.172:9250"); config.addAllowedHeader("*"); UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser()); source.registerCorsConfiguration("/**", config); return new CorsWebFilter(source); } @Bean @ConditionalOnMissingBean public HttpMessageConverters messageConverters(ObjectProvider<HttpMessageConverter<?>> converters) { return new HttpMessageConverters(converters.orderedStream().collect(Collectors.toList())); } }
06-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值