@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