spring-bean的一种不错玩法

42次阅读

共计 2141 个字符,预计需要花费 6 分钟才能阅读完成。

@controller 控制器(注入服务):用于标注控制层,相当于 struts 中的 action 层;

@service 服务(注入 dao):用于标注服务层,主要用来进行业务的逻辑处理;

@repository(实现 dao 访问):用于标注数据访问层,也可以说用于标注数据访问组件,即 DAO 组件;

@component(把普通 pojo 实例化到 spring 容器中,相当于配置文件中的):泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于 @Controller、@Services 等的时候),我们就可以使用 @Component 来标注这个类。

@component 注解一般是不需要操作数据的工具类放入容器时使用,如果需要操作数据库使用 dao 或者 mapper 时即使是工具类建议使用 @service

首先建立一个枚举

public enum PayEnum

{

ALIBABA_PAY("0", "alibaba", "支付宝"),



WEIXIN_PAY("1", "weixin", "微信");



private String code;



private String display;



private String displayCN;



private PayEnum(String code, String display, String displayCN)

{

    this.code = code;

    this.display = display;

    this.displayCN = displayCN;

}



public static PayEnumfromCode(String code)

{PayEnum[] values = values();



    for (PayEnumtype : values)

    {if (type.code.equals(code))

        {return type;}

    }



    return null;

}



public static PayEnumbuildDisplay(String display)

{for (PayEnumtype : values())

    {if (type.display.equals(display))

        {return type;}

    }

    return null;

}



public static PayEnumbuildDisplayCN(String displayCN)

{for (PayEnumtype : values())

    {if (type.displayCN.equals(displayCN))

        {return type;}

    }

    return null;

}



public int intCode()

{return Integer.valueOf(this.code).intValue();}



@Override

public String code()

{return code;}



@Override

public String display()

{return display;}



public String displayCN() {return displayCN;}

}

然后新建接口

public interface ThirdPayPushCall

{

public void push(Account account, int i, int code);



public PayEnum style();

}

然后是接口实现这里忽略,实现根据具体业务会多而繁杂

下面就是如何将这些 bean 放入一个缓存中方便后面使用

@Service

public class PayDispatcherServiceImpl implements BeanPostProcessor

{

private static Map<PayEnum, ThirdPayPushCall> calls = new HashMap<ThirdPayEnum, ThirdPayPushDownCall>();



public static ThirdPayPushCall getCall(PayEnum pay)

{return calls.get(pay);

}

@Override

public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException

{if (bean instanceof ThirdPayPushCall)

    {ThirdPayPushCall call = (ThirdPayPushCall) bean;

        calls.put(((ThirdPayPushCall) bean).style(), call);

    }

    

    return bean;

}



@Override

public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException

{return bean;}


}

这里是重点,做一个类似适配器的 bean 将接口的实现类的 bean 按键值形式放入容器中,使用时用接口接收传入枚举获取子类调用相应子类的业务逻辑。
————————————————
版权声明:本文为 CSDN 博主「好歹取个名字」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_3092…

正文完
 0