プロジェクトの構造は次のとおりです。
どのように考えればよいでしょうか?抽象化に向けたプログラミング?
まずはシーケンス図を見てみましょう
上記から何が分かるでしょうか?初心者の場合は何が見えてもおかしいので放っておいてください。具体的な実装を見てみましょう
まず、エンティティ クラス User を作成する必要があります。これはモデル パッケージの下に配置されます。
パッケージ com.wwj.model; /** * エンティティ クラス * @author wwj * Spring */ public class User { private String username; public String getUsername() { return username; } { this.username = ユーザー名 } public String getPassword() { return パスワード; } public void setPassword(String パスワード) { this.password = パスワード; }
以下は、抽象化のためのプログラミング方法です。つまり、インターフェースを定義します。
package com.wwj.dao; import com.wwj.model.User; /** * 抽象化指向プログラミング* @author wwj * 利点: 柔軟性の向上*/ public interface UserDAO { public void save(User user) }
このインターフェイスは、パラメータ User オブジェクトを持つメソッド、save メソッドを宣言していることが明確にわかります。これは、User オブジェクトをデータベースに保存するために使用されると考えることができます。
特定の実装は実装クラスに任せる
パッケージ com.wwj.dao.impl; import com.wwj.dao.UserDAO; import com.wwj.model.User; /** *インターフェイス実装クラス* @author wwj * */ public class UserDAO{ @Override public void save(ユーザー user) { System.out.println("ユーザーの保存");
この利点は、データベース環境を変更する場合に、異なるデータベース コードを柔軟に定義できることです。
上記のメソッドを呼び出すにはどうすればよいでしょうか? ビジネス ロジックをデータベース操作から分離するには、ビジネス ロジック クラスを定義する必要があります。
パッケージ com.wwj.service; import com.wwj.dao.UserDAO; import com.wwj.model.User; /** * ビジネス ロジックを実装します。 * */ public class UserService { private UserDAO userDAO; public UserDAO getUserDAO() { return userDAO } public void; setUserDAO(UserDAO userDAO) { this.userDAO = userDAO; } public void add(User user) { this.userDAO.save(user); }
見えます、何かが載っています、何か? UserDAOさん、その効果を見たことがありますか?ここでは DI とも呼ばれる IOC の概念が設計されています。中国語の意味は依存性注入と呼ばれ、制御の反転とも呼ばれます。これを理解することによってのみ、Spring の原理を理解することができます。春。
以下は、Spring の実装を実際にシミュレートしたもので、Spring を使用すると、さまざまなオブジェクトを組み合わせて使用できます。
まず、設定ファイル beans.xml を見てください。
<beans> <bean id="u" /> <bean id="userService" > <property name="userDAO" bean="u"/> </bean> </beans>
ファクトリーメソッド
パッケージ com.wwj.spring; パブリック インターフェイス BeanFactory { public Object getBean(文字列名) }
XMLファイルを解析してBeanFactoryを実装するクラス
パッケージ com.wwj.spring; インポート java.util.HashMap; インポート org.jdom.Element; ; org.jdom.input.SAXBuilder をインポートします。 // オブジェクトを格納するコンテナを定義します private Map<String,Object> bean = new HashMap<String, Object>(); public ClassPathXmlApplicationContext() throws Exception{ SAXBuilder sb = new SAXBuilder(); .getClass().getClassLoader().getResourceAsStream("beans.xml")); doc.getRootElement(); //ルートノードを取得 list = root.getChildren("bean"); //bean という名前のすべての要素 for(int i = 0; i < list.size(); i++) { 要素要素= (Element) list.get(i); String id = element.getAttributeValue("id"); //ID 値を取得します。 cla = element.getAttributeValue("class"); o = Class.forName(cla).newInstance(); System.out.println(id); for(要素 propertyElement : (List<要素>) )element.getChildren("property")){ String name = propertyElement.getAttributeValue("name"); //UserDAO String bean = propertyElement.getAttributeValue("bean"); //u Object beanObject = bean.get(bean);//UserDAOImpl インスタンス //メソッド名をつなぎ合わせて setUserDAO メソッドを実装します String methodName = "set" + name.substring(0) , 1) .toUpperCase() + name.substring(1); System.out.println("メソッド名 = " + メソッド名); //リフレクション メカニズムを使用してメソッド オブジェクトを取得します。 Method m = o.getClass().getMethod(methodName, beanObject.getClass().getInterfaces()[0]); //Invokeメソッド} } } @Override public Object getBean(String name) { return beans.get("id"); } }
テスト授業をしてみよう
パッケージ com.wwj.service; import org.junit.Test; import com.wwj.spring.BeanFactory; /** * 単体テスト クラス * @著者 wwj * */ public class UserServiceTest { @Test public void testAdd() throws Exception{ BeanFactory beanFactory = new ClassPathXmlApplicationContext(); userService =(UserService)beanFactory.getBean("userService");
テスト クラスからいくつかのヒントを確認できます。まず、BeanFactory オブジェクトを定義して、その getBean メソッドを交換し、その後、 の add メソッドを呼び出してユーザー オブジェクトをデータベースに追加します。このサービスクラスに入ります。もちろん、ここではデータベースへの挿入は実装されていませんが、テストは単純に実装されています。実際、Spring のコア構成ファイルはオブジェクトを制御するため、サービス クラスは DAO 層のオブジェクトを使用してデータベース関連の処理を実行します。操作。
上記はオンラインでまとめた春の設定内容です。皆様のお役に立てれば幸いです。