1. 程式人生 > >重構遺留系統時出現的錯誤-總結

重構遺留系統時出現的錯誤-總結

    花了一個禮拜,大致的重構了下遺留系統,雖然還有很多需要優化的地方,但是至少現在“能看”了。大致總結下這個禮拜重構過程遇到的一些問題:

1.spring注入出錯:There is no ID/IDREF binding for IDREF 'MessageInfoService'.

找不到與MessageInfoService對應的bean,一開始很納悶,明明我的xml檔案裡面定義了呀,怎麼會找不到呢,後來仔細一看,終於發現原因:

原來我在action裡注入的service是用<ref local=""/>形式注入的,如下:

    <bean id="sendMessage" class="xt.action.MsgRyAction">
        <property name="messageInfoService">
            <ref local="MessageInfoService" />
        </property>
    </bean>
    但是我把action和service的注入分開在兩個xml檔案裡,所以導致了這種錯誤。一般來說,我喜歡把各層的配置都放在不同的xml檔案裡,並以層命名,比如application-action.xml、appliaction-service.xml,這樣尋找和修改都比較方便。因為遺留專案是幾個人寫的,而且好像當時也沒有統一,都是放在各自名字下面的資料夾下,所以他們都是以<ref local=""/>注入的,但是現在我要訪問其他檔案裡的bean,所以解決方案就是將<ref local>改為<ref bean=""/>注入。

總結一句話就是: <ref bean=""/>是尋找全域性中的 bean; <ref local=""/>是尋找本 xml檔案中的 bean。


2.Spring事務配置 出錯:org.springframework.dao.InvalidDataAccessApiUsageException

    這個異常產生的主要原因是DAO採用了Spring容器的事務管理策略,如果操作方法的名稱和事務策略中指定的操作名稱不能夠匹配,spring 就會採取預設的事務管理策略(PROPAGATION_REQUIRED,read only).如果是插入和修改操作,就不被允許的,所以報這個異常。

我這裡出錯主要是因為,我增加了一個add方法,而遺留系統裡的事務管理策略沒有配置該方法,所以在事務策略里加入就解決了。

<tx:method name="add*" propagation="REQUIRED" />

3.spring切點支援多個表示式配置出錯:Pointcut is not well-formed: expecting 'name pattern' at character position

    在一開始重構遺留系統的時候我是先以業務名分包,但是每個業務名上也沒有com之類的頂層包,所以每個業務的切點都需要配置,這裡就涉及到了多個表示式的配置。
一開始我抱著試試看的態度,想著加個or(“或”)試試,結果表示式報錯Pointcut is not well-formed: expecting 'name pattern' at character position。
    我一查發現,我的*後面少了個空格(參考:http://blog.csdn.net/wanglang3081/article/details/17164207),加了個空格改成如下方式,就沒有錯了。

    <aop:config>
        <aop:pointcut id="lhlallManagerMethod"
            expression="(execution(* fwgl.service.*.*(..))) or (execution(* xxfb.service.*.*(..)))"/>
        <aop:advisor advice-ref="lhltxAdvice"    pointcut-ref="lhlallManagerMethod" />
    </aop:config>
    後來我又查了下切點裡多個表示式怎麼配置,發現除了加or 還可以用and、||、&&。(參考:  http://blog.csdn.net/java85140031/article/details/28503185

相關推薦

重構遺留系統出現錯誤-總結

    花了一個禮拜,大致的重構了下遺留系統,雖然還有很多需要優化的地方,但是至少現在“能看”了。大致總結下這個禮拜重構過程遇到的一些問題: 1.spring注入出錯:There is no ID/IDREF binding for IDREF 'MessageInfoSe

跟後臺打印程序系統服務通訊出現錯誤。請打開服務管理單元,確認後臺打印程序服務是否在運行。

term tab 日期 system ice 停用 blog spooler 警告 一: 問題描述: 【錯誤】 跟後臺打印程序系統服務通訊時出現錯誤。請打開服務管理單元,確認後臺打印程序服務是否在運行。事件類型:警告事件來源:TermServD

【git學習】在CenterOS系統上恢復GitLab出現錯誤:tar: 由於前次錯誤,將以上次的錯誤狀態退出 unpacking backup failed

一、問題描述 今天在測試加密GitLab備份檔案之後,進行解密,然後再恢復GitLab的時候,恢復失敗,報瞭如下的錯誤: tar: db:無法 mkdir: 許可權不夠 tar: db:無法 mkdir: 許可權不夠 tar: db/database.sql.

【Android開發】app升級報錯,解析包出現錯誤(華為手機8.0系統

問題描述: 今天釋出app版本升級,碰到華為手機8.0系統,安裝升級的時候提示,解析包時出現問題。而其他手機都是正常的。而且當我的包沒有經過360加固的時候,也是可以去升級新版本,加固過後就不行了。 這個導致這個問題的原因有很多,我先把我這邊app的問題處理方案介紹給大家

myeclipse10集成Tomcat6出現錯誤

src log clip tom tomcat ips 配置tomcat lips 得出 myeclipse配置Tomcat時出現錯誤:如圖 tomcat6目錄:如圖 在搜集各種資料後,最終得出結論: 在Tomcat目錄中新建temp文件夾,問題解決。 親測好使。

sql server登錄出現錯誤233

.cn config onf tail 數據 blog 圖形界面 mic .com 同事使用SqlServer出現233錯誤。使用Microsoft SQL Server Management Studio連接1次數據庫之後,斷開再次連接,就會出現233錯誤 查看Windo

yum 下載出現錯誤解決方法

yum1,ping www.baidu.com 驗證你是否能夠上網2,ping 223.5.5.5 ping域名不通,ping外網地址時通了,你的DNS配置有問題。3,修改DNS網卡的配置文件 如: cp /etc/sysconfig/network-scripts/ifcfg-eth0 /t

安裝vsphere client出現錯誤2229 無法在SQL查詢中加載表”等錯誤

錯誤2229解決辦法:請按照以下步驟繼續進行升級:找到日誌文件 %TEMP%vim-sso-msi.log搜索上次安裝期間作為緩存文件的 *.mst 文件。例如: c:\Windows \Installer\xxxxx.mst找到該 *.mst 文件並將其刪除。重新安裝vsphere client即可本文出自

本人用python刷題錯誤總結

target [] [[]] arc 操作 code pan com html     本人新手,在leetcode刷題過程中出現過很多問題,故在此總結,不定時更新。   1、在創建一個二維列表的時候,我之前會用 a = [[0] * 5] * 5, 但是這樣輸出的結果往往

CentOS系統出現錯誤--SSH:connect to host centos-py port 22: Connection refused

start 配置 下載 pan 要去 isp 執行 hostname openssh   我在第一次搭建自己的 hadoop2.2.0單節點的偽分布集成環境時遇到了此錯誤,通過思考問題和查找解決方案最終搞定了這個問題,其錯誤原因主要有以下幾種:   1)S

PyQt5 Pyinstaller出現錯誤Cannot find PyQt5 plugin directories

pyqt5 naconda exceptio when pytho body question http 解決 環境:anaconda+pyqt5 pyinstaller時出現錯誤Cannot find PyQt5 plugin directories 解決方法: 用原生的

VMware啟動Centos出現錯誤Cannot open the disk 'xxxxxxx.vmdk' or one of the snapshot disks it depends on. .

每次 pan 鎖定 mic 數據 als log xxxxxx end   今天拔裝虛擬機的硬盤的時候,沒有關掉虛擬機,導致虛擬打開的時候出現:Cannot open the disk ‘xxxxxxx.vmdk‘ or one of the snapshot disk

解決code first Migration 增加外鍵出現錯誤的問題

int require name 增加 length add 刪除 ssa AR 先上模型 Comment public class Comment { [Key] public int CommentId { get; s

Python3 引入sqlite3出現錯誤:ModuleNotFoundError: No module named '_sqlite3'

err error SQ 解決 python re 編譯安裝 簡單的 class under 在Python3 中內置了SQLite3,但是在編譯安裝完之後執行: import sqlite3 出現錯誤: ModuleNotFoundError: No module

Error:cannot import name'is_list_like' --python使用pandas_datareader出現錯誤,解決方案

nbsp class 之前 color error: code 修復 使用 comm   1 import pandas as pd 2 pd.core.common.is_list_like = pd.api.types.is_list_like 在下行代碼之前插入

當mysq啟動出現錯誤1067應如何解決

解決 如何 網上 控制面板 gedit 啟動 bsp mys 就是 在網上也看了很多教程,也查了很多方法,但是試過都沒有要用,最後經過本人親測 最好的方法,也是最簡單的方法,就是刪掉重裝。 第一 進入控制面板卸載程序,這樣是卸載不幹凈的。 第二進入註冊表windos+r

本地提交到github出現錯誤

錯誤如下: Commit failed - exit code 128 received, with output: '*** Please tell me who you are. Run git config --global user.email "[email 

關於linux make出現錯誤 /bin/sh: 1: Syntax error: "(" unexpected

       當用make去編譯Makefile檔案的時候,如果有出現/bin/sh: Syntax error: 的錯誤時候,一般是當前預設的shell不正確的原因        首先可以用命令ls -l /

Mysql5.7.20使用group by查詢(select *)出現錯誤--修改sql mode

Mysql5.7.20使用group by查詢(select *)時出現錯誤--修改sql mode 使用select * from 表 group by 欄位 時報錯      錯誤資訊說明:   1055 - Expression #1 of SELECT list

建立表空間出現錯誤:ORA-27040以及開啟監聽服務提示網路協議介面卡錯誤

今天做oracle資料庫建立表空間的操作,一直提示ORA-27040,OSD -04002,O/s-Error(os 3)錯誤。 檢查了建立的語句是沒有問題的,刪除重建發現建立過程也是正確了,管理員方式執行SQLplus也不行,最後經過查詢和驗證才發現是我電腦許可權的問題(用的管理員許可