spring bean的一種不錯玩法

@controller 控制器(注入服務):用於標註控制層,至關於struts中的action層;spring

@service 服務(注入dao):用於標註服務層,主要用來進行業務的邏輯處理;數據庫

@repository(實現dao訪問):用於標註數據訪問層,也能夠說用於標註數據訪問組件,即DAO組件;緩存

@component (把普通pojo實例化到spring容器中,至關於配置文件中的) :泛指各類組件,就是說當咱們的類不屬於各類歸類的時候(不屬於@Controller、@Services等的時候),咱們就能夠使用@Component來標註這個類。微信

@component註解通常是不須要操做數據的工具類放入容器時使用,若是須要操做數據庫使用dao或者mapper時即便是工具類建議使用@serviceapp

 

首先創建一個枚舉ide

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();

}

 

而後是接口實現這裏忽略,實現根據具體業務會多而繁雜post

下面就是如何將這些bean放入一個緩存中方便後面使用ui

@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按鍵值形式放入容器中,使用時用接口接收傳入枚舉獲取子類調用相應子類的業務邏輯。this

相關文章
相關標籤/搜索