天天看點

體驗Spring的“依賴注入”的優點

<b>1</b><b>、添加一個接口</b><b></b>

<b>名稱為</b><b>UserInfoInterface</b><b>,包名稱為</b><b>springj2seapp</b>

<b></b>

<b>在該接口中添加一個一個業務方法</b><b></b>

<b>   </b>package springj2seapp;

public interface UserInfoInterface

{

          public  boolean doUserLogin(UserInfoVO oneUserInfo);

}

<b>2</b><b>、再添加一個實作類</b><b></b>

<b>類名稱為</b><b>UserInfoManage</b><b>,包名稱為</b><b>springj2seapp </b><b>實作</b>UserInfoInterface

<b>    </b>

<b>     </b>

<b>3</b><b>、再增加一個業務實體</b><b>UserInfoVO</b><b>類</b>

<b></b><b></b> 

<b>在該</b><b>VO</b><b>類中新增兩個成員</b><b></b>

<b>private String userName;</b>

<b>private  String userPassWord;</b>

<b>最後将産生出下面的代碼</b><b></b>

package springj2seapp;

public class UserInfoVO {

       <b>private String userName=null;</b>

<b>       private String userPassWord=null;   </b>

       public UserInfoVO()

       {

              super();

              // TODO 自動生成構造函數存根

       }

       <b>public String getUserName() {</b>

<b>              return userName;</b>

<b>       }</b>

<b>       public void setUserName(String userName) {</b>

<b>              this.userName = userName;</b>

<b>       public String getUserPassWord() {</b>

<b>              return userPassWord;</b>

<b>       public void setUserPassWord(String userPassWord) {</b>

<b>              this.userPassWord = userPassWord;</b>

<b>4</b><b>、程式設計前面的</b><b>UserInfoManage</b><b>類實作功能</b><b></b>

public class UserInfoManage implements UserInfoInterface {

       public UserInfoManage()

       <b>public  boolean doUserLogin(UserInfo oneUserInfo)</b>

<b>       {</b>

<b>              String userName=oneUserInfo.getUserName();</b>

<b>              String userUserPassWord=oneUserInfo.getUserPassWord();</b>

<b>             </b>

<b>//</b><b>下面的代碼實際應該改變為對資料庫的通路</b><b>          </b>

<b>              boolean okOrNot=userName.equals("yang")&amp;&amp;userUserPassWord.equals("1234");</b>

<b>              return okOrNot;</b>

<b>5</b><b>、再添加一個測試的應用主類</b><b>UserManageTest</b>

程式設計該類

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.FileSystemXmlApplicationContext;

public class UserManageTest     //該類模拟B/S中的控制層元件(如Servlet或者Action類)

       public UserManageTest()

              <b>ApplicationContext ctx=new   FileSystemXmlApplicationContext("SpringApplication.xml");   </b>

<b>              UserInfoInterface oneUserInfoManage = (UserInfoInterface) ctx.getBean("oneUserInfoManage");</b>

<b>//</b><b>下面的代碼模拟使用者的表單</b><b>        </b>

<b>              UserInfoVO oneUserInfo=new UserInfoVO();</b>

<b>              oneUserInfo.setUserName("yang");</b>

<b>              oneUserInfo.setUserPassWord("1234");</b>

<b>              boolean returnResult=oneUserInfoManage.doUserLogin(oneUserInfo);</b>

<b>              if(returnResult)</b>

<b>              {</b>

<b>                     System.out.println("</b><b>您登入成功!</b><b>");</b>

<b>              }</b>

<b>              else</b>

<b>                     System.out.println("</b><b>您登入失敗!</b><b>");</b>

<b>              }</b>            

       }    

       public static void main(String[] args)

              new UserManageTest();

<b>6</b><b>、在</b><b>*.xml</b><b>中添加我們的業務元件的定義</b><b></b>

&lt;?xml version="1.0" encoding="UTF-8"?&gt;

&lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"&gt;

&lt;!--  - Application context definition for "springapp" DispatcherServlet.  --&gt;

&lt;beans&gt;

<b>&lt;bean id="oneUserInfoManage" class="springj2seapp.UserInfoManage"&gt;</b>

<b>&lt;/bean&gt;</b>

&lt;/beans&gt;

<b>7</b><b>、執行該程式</b>

<b></b><b></b>

将出現下面的狀态

再模拟錯誤登入-----隻需要将測試類中的參數為錯誤的參數

将出現下面的錯誤提示

<b>8</b><b>、再修改</b><b>*.xml</b><b>檔案以提供“屬性和構造”注入</b><b></b>

&lt;bean id="oneUserInfoManage" class="springj2seapp.UserInfoManage"&gt;

  &lt;constructor-arg&gt;

      <b>&lt;ref bean="oneUserInfo"/&gt;</b>

  &lt;/constructor-arg&gt;

&lt;/bean&gt;

<b>&lt;bean id="oneUserInfo" class="springj2seapp.UserInfoVO"&gt;</b>

   <b> &lt;property name="userName"&gt;</b>

              &lt;value&gt;yang &lt;/value&gt;

       &lt;/property&gt;

       <b>&lt;property name="userPassWord"&gt;</b>

              &lt;value&gt;1234 &lt;/value&gt;

<b>9</b><b>、修改</b><b>UserInfomanage</b><b>類</b><b></b>

public class UserInfoManage implements UserInfoInterface

       <b>boolean okOrNot;</b>

<b>       public UserInfoManage(UserInfoVO oneUserInfo)</b>

<b> </b>

<b>              doUserLogin(oneUserInfo);</b>

<b>              // TODO </b><b>自動生成構造函數存根</b><b></b>

       public  boolean doUserLogin(UserInfo oneUserInfo)

              String userName=oneUserInfo.getUserName();

              String userUserPassWord=oneUserInfo.getUserPassWord();

//下面的代碼實際應該改變為對資料庫的通路        

              <b>okOrNot=userName.equals("yang")&amp;&amp;userUserPassWord.equals("1234");</b>

              return okOrNot;

       <b>public boolean getUserLogin()</b>

<b>10</b><b>、再修改前面的接口以增加一個新的方法定義</b><b></b>

          public  boolean doUserLogin(UserInfo oneUserInfo);

         <b> public boolean getUserLogin();</b>

11、再修改前面的測試的主類

              ApplicationContext ctx=new   FileSystemXmlApplicationContext("SpringApplication.xml");     

<b>UserInfoInterface oneUserInfoManage = (UserInfoInterface) ctx.getBean("oneUserInfoManage");      </b>

<b>              boolean returnResult=oneUserInfoManage.getUserLogin();</b>

              if(returnResult)

              {

                     System.out.println("您登入成功!");

              }

              else

                     System.out.println("您登入失敗!");

              }           

       {            new UserManageTest();

12、再執行本程式

<b>12</b><b>、再體驗</b><b>IoC</b><b>帶來的靈活性</b><b></b>

<b>(</b><b>1</b><b>)改變屬性參數為錯誤的參數</b><b>----</b><b>模拟登入失敗</b>

<b>(</b><b>2</b><b>)再執行本程式</b><b>-------</b><b>但不需要重新編譯,将出現下面的結果</b><b></b>

<b>13</b><b>、将</b><b>JDK</b><b>中的标準的</b><b>Java </b><b>類注入到我們的業務元件中</b><b></b>

      &lt;ref bean="oneUserInfo"/&gt;

<b>  &lt;constructor-arg&gt;</b>

<b>       &lt;ref bean="dateBean"/&gt;</b>

<b>  &lt;/constructor-arg&gt;</b>

&lt;bean id="oneUserInfo" class="springj2seapp.UserInfo"&gt;

    &lt;property name="userName"&gt;

              &lt;value&gt;yang&lt;/value&gt;

       &lt;property name="userPassWord"&gt;

              <b>&lt;value&gt;1234&lt;/value&gt;</b>

  <b>&lt;bean id="dateBean" class="java.util.Date"/&gt;   </b>

<b>14</b><b>、修改業務元件類的代碼以使用該</b><b>Date</b><b>類</b><b></b>

import java.util.Date;

       boolean okOrNot;

       <b>private Date dateBean=null;     </b>

       <b>public UserInfoManage(</b>UserInfoVO <b>oneUserInfo,Date dateBean)</b>

              <b>this.dateBean=dateBean;          </b>

              doUserLogin(oneUserInfo);

              okOrNot=userName.equals("yang")&amp;&amp;userUserPassWord.equals("1234");

              <b>String loginTime=dateBean.toLocaleString();</b>

<b>              System.out.println("</b><b>您的登入時間是:</b><b>"+loginTime);</b>

       public boolean getUserLogin()

<b>15</b><b>、再執行該程式</b><b></b>

本文轉自 weijie@java 51CTO部落格,原文連結:http://blog.51cto.com/weijie/66490,如需轉載請自行聯系原作者