java matching_spring MatchingBean应用

1、编写接口FactoryList

import java.util.List;

public interface FactoryList, K> extends List {

E getBean(K factor);

List getBeanList(K factor);

}

2、编写抽象类FactoryArrayList

import org.springframework.beans.factory.InitializingBean;

import org.springframework.core.OrderComparator;

import java.io.Serializable;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

import java.util.ListIterator;

public class FactoryArrayList, K> extends ArrayList

implements FactoryList, InitializingBean, Serializable {

public FactoryArrayList() {

super();

}

public FactoryArrayList(int size) {

super(size);

}

public E getBean(K factor) {

Iterator itr = iterator();

while (itr.hasNext()) {

E beanMatch = itr.next();

if (beanMatch.matching(factor)) {

return beanMatch;

}

}

return null;

}

public List getBeanList(K factor) {

Iterator itr = iterator();

while (itr.hasNext()) {

E beanMatch = itr.next();

if (!beanMatch.matching(factor)) {

itr.remove();

}

}

return this;

}

public void afterPropertiesSet() throws Exception {

if (!isEmpty()) {

Object[] a = toArray();

OrderComparator.sort(a);

ListIterator i = listIterator();

for (int j = 0; j < a.length; j++) {

i.next();

i.set(a[j]);

}

}

}

}

3、实现接口MatchingBean

public interface MatchingBean {

boolean matching(K factor);

}

4、应用

@Service

public class VendorsHelper {

@Resource

FactoryList, VendorReq> vendorServices;

@SuppressWarnings("unchecked")

public List extends VendorResp> fetchVendors(VendorReq vendorReq){

IVendorService instance = vendorServices.getBean(vendorReq);

if(instance == null){

return Collections.emptyList();

}

return instance.wannaVendors(vendorReq);

}

}

5、细节纰漏

import java.util.List;

import com.ysma.intf.entity.VendorResp;

import com.ysma.intf.entity.base.ioc.list.MatchingBean;

import com.ysma.intf.entity.vendor.VendorReq;

public interface IVendorService extends MatchingBean{

/**定义必要功能*/

List extends VendorResp> wannaVendors(VendorReq vendorReq);

}

import com.ysma.intf.entity.vendor.VendorReq;

import com.ysma.intf.entity.vendor.VendorEnum;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

/**

* 抽象类:实现筛选甄别

* Created by ysma on 2018/11/19.

*/

public abstract class VendorService implements IVendorService{

protected final Logger LOGGER = LoggerFactory.getLogger(VendorService.class);

@Override

public boolean matching(T t) {

if(t instanceof VendorReq){

VendorApisReq req = (VendorReq)t;

VendorEnum ve = support();

return req.getSys().equals(ve.getSys());

}

return false;

}

abstract VendorEnum support();

}

@Service

public class SubVendorService extends VendorService {

@Autowired

private VendorSubMapper vendorSubMapper;

/***

* 查询mac供应商

* @param vendorReq req

* @return vendors

*/

@Override

@DB(dbName = DbEnum.MAC, readOnly = true)

public List wannaVendors(VendorReq vendorReq) {

vendorSubMapper.fetchAllVendors();

//bizz logic

}

@Override

VendorEnum support() {

return VendorEnum.OPC;

}

}

import lombok.Data;

import org.hibernate.validator.constraints.NotBlank;

@Data

public class VendorReq {

@NotBlank(message = "查询条件matchValue不能为空")

private String matchValue;

@NotBlank(message = "系统码sys不能为空")

private String sys;

}

public enum VendorEnum {

OPC("MAC", "MAC"),

OPA("MAA", "MAA"),

GTB("MAB", "MAB"),

AOP("MAP", "MAP"),

UNKNOWN("UNKNOWN", "UNKNOWN");

private String sys;

private String name;

VendorEnum(String sys, String name) {

this.sys = sys;

this.name = name;

}

public static VendorEnum getSys(String index) {

for (VendorEnum ve : values()){

if(index.equals(ve.getSys())){

return ve;

}

}

return UNKNOWN;

}

public String getSys() {

return sys;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值