今、IOCはこれがより直感的であるかもしれない、と思っ理解するための小さなプログラムを介して、最初のプロジェクト構造はコントローラでサービスデータベースを扱うための責任、DAO((彼は抽象的サービスロジックの一部を担当していました)、(制御層は、彼がデータと配布を受け入れることにしました) )
私たちのモデル操作を見てください
パッケージ豆。 パブリック クラスユーザー{ プライベート int型のID。 プライベート文字列のユーザ名。 プライベート文字列のパスワード。 パブリックユーザ(int型のID、文字列名、文字列のパスワード){ この .ID = ID。 この .username = ユーザ名; このみましょう。パスワード= パスワード; } 公共 ボイドするsetPassword(文字列のパスワード){ このみましょう。パスワード= パスワード。 } 公共 ボイドsetUsername(文字列名){ この .username = ユーザ名; } 公共 ボイド SETID(int型のID){ この .ID = ID。 } @Override パブリック文字列のtoString(){ 戻り "ユーザー{" + "ID =" + ID + "ユーザ名=" '+名+ '\'' + "パスワード= '" +パスワード+ '\'' + 「}」。 } }
次に、データベース処理モジュールを見て
// UserDaoの パッケージDAO。 輸入bean.User; パブリック インターフェースUserDao { ユーザーのgetUser()。 } // データソース数据库的相关配置类 パッケージdao.impl。 パブリック クラスデータソース{ プライベート文字列のユーザ名。 プライベート文字列のパスワード。 プライベート文字列のURL。 プライベート文字列driverClass。 公共の文字列getPasswordに(){ リターンパスワード; } 公共 ボイドするsetPassword(文字列のパスワード){ このみましょう。パスワード=パスワード; } パブリック文字列のgetURL(){ 戻りURL。 } 公共 ボイドてsetURL(文字列のURL){ このた.url = URL。 } パブリック文字列getDriverClass(){ 戻りdriverClassと、 } 公共 ボイドsetDriverClass(文字列driverClass){ この .driverClass = driverClass。 } パブリックデータソース(){ } パブリックデータソース(文字列名、文字列のパスワード、文字列のURL、文字列driverClass){ この .username =ユーザ名; このみましょう。パスワード= パスワード; このする.url = URL; この .driverClass = driverClass。 } パブリック文字列getUsername(){ 戻りユーザ名; } 公共 ボイドsetUsername(文字列名){ この .username = ユーザ名; } @Override パブリック文字列のtoString(){ 戻り "データソース{" + "ユーザ名= '" +名+ '\'' + "パスワード= '" +パスワード+ '\'' + "URL =" '+ URL + '\'' + "driverClass = '" + driverClass + '\'' + '}' ; } } // UserDaoImpl数据库的相关操作 パッケージdao.impl。 輸入bean.User; 輸入dao.UserDao。 パブリック クラス UserDaoImpl 実装UserDao { データソースのDS。 パブリックUserDaoImpl(){ } 公共UserDaoImpl(データソースのDS){ この .DS = DS。 } パブリックユーザのgetUser(){ System.out.printlnは( "DS); リターン・ 新しい新ユーザ(1、 "マーク"、 "1234" ); } }
次に、サービスを見て
// UserServiceのサービス对外接口 パッケージサービス。 輸入bean.User; パブリック インターフェースUserServiceの{ ユーザーのgetUser()。 } // UserServiceImpl处理 パッケージservice.impl。 輸入bean.User; 輸入dao.UserDao。 輸入service.UserService。 パブリック クラス UserServiceImpl 実装UserServiceの{ UserDao userDao。 パブリックUserServiceImpl(){ } 公共UserServiceImpl(UserDao userDao){ この .userDao = userDao。 } 公共 ボイドsetUserDao(UserDao UD){ この .userDao = UD。 } 公共UserDao getUserDao(){ 戻り 、この.userDaoと、 } パブリックユーザのgetUser(){ 戻りuserDao.getUser()。 } }
私たちは、コントローラを見て
パッケージコントローラ。 輸入bean.User; 輸入service.UserService。 輸入service.impl.UserServiceImpl; パブリック クラスUserControllerで{ UserServiceのUserServiceの。 公共 ボイドのgetUser(){ ユーザーユーザー = userService.getUser()。 System.out.println(ユーザ)。 } 公共 ボイドsetUserService(UserServiceImpl UserServiceの){ この .userService = UserServiceの。 } }
私たちは、ファイルを見て集中applicationContext.xmlを
<?xmlのバージョン= "1.0"エンコード= "UTF-8"> <豆のxmlns = "http://www.springframework.org/schema/beans" のxmlns:XSI = "http://www.w3.org / 2001 / XMLスキーマ・インスタンス"のxmlns:P = "http://www.springframework.org/schema/p" のxsi:schemaLocationの =" http://www.springframework.org/schema/beansのhttp:// WWW。 springframework.org/schema/beans/spring-beans.xsd "> <! -数据库连接使用プロパティ注入- > <豆ID =" DB " クラス = "dao.impl.DataSources"> <プロパティ名=" URL "値="はjdbc:mysqlの://127.0.0.1:3306 /ユーザー"/> <プロパティ名="ユーザ名」値= "ルート" /> <プロパティ名= "パスワード"値= "mysqlの" /> <プロパティ名= "driverClass"値= "はcom.mysql.jdbc.Driver" />プロパティ名= "パスワード"値= "mysqlの" /> </豆> <! -注射のためのコンストラクタ、引数のコンストラクタを使用してデータベース操作、それはオブジェクトであるため、我々はREFを使用する- > <豆ID =「DAO」クラス =「dao.impl.UserDaoImpl」> <コンストラクタ、引数=インデックス" 0 "名前=" DS "REF =" DB "/> </豆> <! -私たちは、名前空間注射、REFを追加するので、オブジェクトを使用したpサーバーの操作- > <上記のid =上記豆"サービス" クラス = "service.impl.UserServiceImpl" P:userDao-REF = "DAO" /> <! -コントロール層操作- > <ビーンID = "コントローラ" クラス = "controller.UserController" P:= REF-そのUserServiceの" -service「/> </豆>
テストコードでの最終的な外観
輸入controller.UserController; 輸入org.junit.Test; 輸入org.springframework.context.support.ClassPathXmlApplicationContext; パブリック クラスTESTUSER { @Test 公共 ボイド試験(){ ClassPathXmlApplicationContextコンテキスト = 新しい ClassPathXmlApplicationContext( "applicationContext.xmlを" )。 UserControllerでUC = context.getBean( "コントローラ"、UserControllerで。クラス)。 uc.getUser(); } } // 模拟数据库连接データソース{ユーザー名= 'ルート'、パスワード= 'mysqlの'、URL = 'JDBCます。mysql://127.0.0.1:3306/user」、driverClass = 'はcom.mysql.jdbc.Driver'} ユーザー{ID = 1、ユーザ名= 'マーク'、パスワード= '1234'}
コードが通る、我々はサービス、DAO、コントローラで見、我々は任意のオブジェクトを初期化していない、我々はすべてのapplicationContext.xmlを初期化するすべての情報は、このような理解を達成するために、私たちは、関連する操作を行う助けに春の内側に配置しましたカップリング、およびこのようなデータベースを変更するなどの変更を行うために、後で必要、我々はあなたがコードプロジェクトプロジェクトのレイヤーを探す必要はありませんが、内部のようなapplicationContext.xmlを直接修正しました。