@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...