在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ SpringMVC項目里,有必要使用一些設(shè)計模式嗎?

SpringMVC項目里,有必要使用一些設(shè)計模式嗎?

背景

為了兼容多種業(yè)務(wù),想在項目中使用一些設(shè)計模式,以便于管理。
例如,我需要創(chuàng)建用戶并返回userid,每種業(yè)務(wù)創(chuàng)建的方式都不一樣。
我選取了“適配器模式”,但是我發(fā)現(xiàn),在springmvc的管理下,常常需要new一些類,這時候,在這個類里的一些spring標簽,卻失效了。
以下是我創(chuàng)建用戶的代碼:

接口

public interface IPlatformSendPay {

    public abstract Object sendPayInA(Object object);
    public abstract Object sendPayInB(Object object);

}

父類

public class PlatformSendPay  {
    private Object obj;

    @Resource
    private OpenPaymentDao openPaymentDao;

    public PlatformSendPay(Object obj) {
        this.obj = obj;
    }

    public Object getUserIdInA(){
        JidouOrderData jidouOrderData = (JidouOrderData) obj;

        int stationId = jidouOrderData.getStation_id();
        //此處,openPaymentDao為空,意味著@Resource失效,這個PlatformSendPay類沒有納入spring管理中
        Integer userId = openPaymentDao.getIdentifyUser(jidouOrderData.getIdentifyId(), "1000000013");
        if (ObjectUtils.isEmpty(userId)){
           //todo:打印
        }
        return userId;
    }


}

子類

public class SendPay extends PlatformSendPay implements IPlatformSendPay{

    public SendPay(Object obj) {
        super(obj);
    }

    @Override
    public Object sendPayInA(Object object) {
        return getUserIdInA();
    }
    
    @Override
    public Object sendPayInB(Object object) {
        return getUserIdInB();
    }

}

這是我的實現(xiàn)類,springmvc中的@Service標簽

  //業(yè)務(wù)一
  SendPay sendPay = new SendPay(jidouOrderData);
  int userId = (int) sendPay.getUserIdInA();

  //業(yè)務(wù)二
  SendPay sendPay = new SendPay(JdOrderData);
  int userId = (int) sendPay.getUserIdInB();

疑問

1.PlatformSendPay 為何spring綁定不成功?如何才能綁定成功?
2.springmvc里,是不是盡可能少使用這類的設(shè)計模式?在對象里面的方法,使用的變量有spring標簽,但是在new的情況下,這樣是不是會失效?

回答
編輯回答
兔囡囡

模式問題

所謂設(shè)計模式是對常見對象關(guān)系的總結(jié),實際上包含了同幾乎所有可能的常見對象的創(chuàng)建和使用關(guān)系。如果你能成功地繞過所有設(shè)計模式寫出程序來,那才是真的了不起。實際上這是一個自然的過程,不需要為模式而模式。

為什么 spring綁定不成功

自動裝配情況下,對手工new出的對象是沒法裝配的, 因為spring自動裝配僅發(fā)生在初始化掃描階段。你的情況下建議采用對象繼承的方式,由不同子對象實現(xiàn)不同的邏輯,而不是同一個對象因為構(gòu)造參數(shù)不同而產(chǎn)生不同的邏輯。

2017年3月14日 09:16
編輯回答
痞性

例如,我需要創(chuàng)建用戶并返回userid,每種業(yè)務(wù)創(chuàng)建的方式都不一樣。

這不是典型的工廠模式嘛?輸出是一致的,返回userid,創(chuàng)建過程根據(jù)業(yè)務(wù)來。簡單工廠就可以了。

2017年2月15日 05:27