隨筆-7  評論-0  文章-0  trackbacks-0
            2009年6月19日
            Java的核心API是非常龐大的,這給開發(fā)者來說帶來了很大的方便,經(jīng)常人有評論,java讓程序員變傻。
          但是一些內(nèi)容我認為是必須掌握的,否則不可以熟練運用java,也不會使用就很難辦了。
          1、java.lang包下的80%以上的類的功能的靈活運用。
          2、java.util包下的80%以上的類的靈活運用,特別是集合類體系、正規(guī)表達式、時間、屬性、和Timer. 3、java.io包下的60%以上的類的使用,理解IO體系的基于管道模型的設(shè)計思路以及常用IO類的特性和使用場合。
          4、java.math包下的100%的內(nèi)容。
          5、java.net包下的60%以上的內(nèi)容,對各個類的功能比較熟悉。
          6、java.text包下的60%以上的內(nèi)容,特別是各種格式化類。
          7、熟練運用JDBC. 8、java.security包下40%以上的內(nèi)容,如果對于安全沒有接觸的話根本就不可能掌握java. 9、AWT的基本內(nèi)容,包括各種組件事件、監(jiān)聽器、布局管理器、常用組件、打印。
          10、Swing的基本內(nèi)容,和AWT的要求類似。
          11、XML處理,熟悉SAX、DOM以及JDOM的優(yōu)缺點并且能夠使用其中的一種完成XML的解析及內(nèi)容處理
          以上文章摘自——北大青鳥徐州藍海 www.xzbenet.com www.lanh.cn
          posted @ 2009-09-11 15:25 sillyha 閱讀(163) | 評論 (0)編輯 收藏
          鑒于windows操作系統(tǒng)及office辦公平臺,在個人桌面上的壟斷地位,使得excel/word/ppt等文件被廣泛應(yīng)用。通過java讀 寫excel文檔是編程開發(fā)中常見問題,比如在swing和web應(yīng)用中經(jīng)常遇到。目前通過Java操作Excel的類庫大致有[1]:
              1、POI,大名鼎鼎的Apache上的項目。
              2、Java Excel API(亦簡稱jexcelapi或jxl),純java的excel開發(fā)包。
              3、jexcel,jxl的衍生品,適宜于Swing開發(fā)。
              4、jxls,依賴于POI,基于excel模板的可定制化報表輸出工具。
              5、Jacob (Java COM Bridge),顧名思義,是采用橋接方式訪問COM組件及Win32類庫。
              6、其它方式,如數(shù)據(jù)導(dǎo)出到html格式的表格中,再另存為xls文檔

              使用比較
              POI、jxl、jexcel可以劃歸為一類,通過java封裝了Excel的操作,所以需要折騰Workbook,Sheet,Cell等對象,顧及excel的每個細節(jié)。這種方式,優(yōu)點是功能強大。缺點是代碼冗長拖沓,閱讀困難。
              jxls雖然是基于POI,但其最大突破在于預(yù)先定制好Excel模板(如字段、格式、圖表等),運行期綁定數(shù)據(jù)即可呈現(xiàn)多樣化報表。其優(yōu)點是編程輕松,功能靈活方便。缺點是對于過于動態(tài)化報表不太適用(如輸出字段、格式非常多變)。
              Jacob和COM模型粘在一起,自然被純java的擁躉者所不顧。所以,應(yīng)用不是很廣。
           

              jxls初體驗

              業(yè)務(wù)部門經(jīng)常需要我們技術(shù)部給推送一些定期報表,這些報表的字段及格式都是預(yù)定義好的。顯而易見,在這種場合,jxls是再適合不過的工具了。只要定義好 輸出報表的模板,綁定查詢出的數(shù)據(jù)即大功告成。日常維護起來也很方便,比如加減字段、改變展現(xiàn)方式、嵌入excel自動圖表等都能輕松搞定。
              百聞不如一見,從jxls主頁[5]上下載了jXLS v.0.9.6(不知何故,自20080409日后沒有再更新),安裝起來運行其中自帶的范例。自帶范例可以通過maven來編譯,偶試了試編譯成功,但 不知道怎么運行范例。后來沒轍,把范例導(dǎo)到eclipse中進行編譯運行。編譯時下載了最新的poi-3.2-FINAL-20081019.jar,結(jié) 果編譯成功,但運行報錯
              java.lang.NoSuchMethodError: org.apache.poi.hssf.usermodel.HSSFCell.setEncoding(S)V
              后來換成poi-3.1-FINAL-20080629.jar,又報別的錯,最后好不容易從CSDN上下載了poi-3.0.1-FINAL- 200705.jar,總算運行成功。體驗了一下,效果非常好。讓人不解的是,在POI主站上只能下載到最新的POI3.2版本,老版本就是找不到。

              參考資料
              1、http://schmidt.devlib.org/java/libraries-excel.html,java操作Excel的類庫清單
              2、http://jakarta.apache.org/poi/,POI主頁
              3、http://www.andykhan.com/jexcelapi/index.html,jxl主頁
              4、http://www.teamdev.com/jexcel/index.jsf,jexcel主頁。
              5、http://jxls.sourceforge.net/,jxls主頁
              6、http://jacob-project.wiki.sourceforge.net/,Jacob主頁

          posted @ 2009-07-14 11:24 sillyha 閱讀(2618) | 評論 (0)編輯 收藏

          1、

          org.springframework.orm.ObjectRetrievalFailureException: Object of class [com.xindeco.myregister.pojo.MyRegisterInfo] with identifier [14]: not found

          MyRegisterInfo在數(shù)據(jù)庫沒有identifier [14]對象。

          2、

          org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Initialization of bean failed; nested exception is org.hibernate.MappingException: Repeated column in mapping for entity: com.xindeco.myregister.pojo.MyRegisterInfo column: password (should be mapped with insert="false" update="false")

          出錯原因:password 和repassword同時對應(yīng)數(shù)據(jù)庫表中的password一列,同時update和insert都設(shè)為true。

          xml文件如下:

              <property name="password"

                                    type="java.lang.String"

                                    update="true"

                                    insert="true"

                                    access="property"

                                    column="password"

                                    length = "32"

                                    />

                                   <property name="repassword"

                                    type="java.lang.String"

                                    update="false"

                                    insert="false"

                                    access="property"

                                    column="password"

                                    length = "32"

                                    />

          解決的方法:

          將repassword的insert和update設(shè)為false。

          3、

          org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Initialization of bean failed;

          nested exception is org.hibernate.PropertyNotFoundException: Could not find a getter for ID in class

          錯誤原因:hibernate的映射文件中ID是大寫的,而pojo的類中id是小寫的

          注意事項:每個pojo的類都要繼承abstractEntity,其中abstractEntity類有個ID的屬性要重寫

          public abstract class AbstractEntity

              implements Entity, BaseDTO {

              abstract public long getID();

              abstract public void setID(long id);

              public int hashCode() {

                  return (int)this.getID();

              }

              public boolean equals(Object obj) {

                  if (obj == this) {

                      return true;

                  }

                  if (obj instanceof Entity) {

                      return this.getID() == ( (Entity) obj).getID();

                  }

                  return false;

              }

          }

          4、

          org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER) - turn your Session into FlushMode.AUTO or remove 'readOnly' marker from transaction definition

          錯誤原因:

          在application.xml文件中deleteRegister方法以delete開頭,并沒有被設(shè)定為可更改的,應(yīng)如下設(shè)置:

          <!--為事物創(chuàng)建代理類,并指定方法的事物類型-->

          <bean id="baseTxProxy" lazy-init="true" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">

              <property name="transactionManager">

                <ref bean="transactionManager"/>

              </property>

              <property name="transactionAttributes">

                <props>

                  <prop key="add*">PROPAGATION_REQUIRED</prop>

                  <prop key="cancel*">PROPAGATION_REQUIRED</prop>

                     </props>

              </property>

          </bean>

          加上一行

          <prop key="delete*">PROPAGATION_REQUIRED</prop>

          5、

             ERROR org.apache.struts.util.RequestUtils - Error creating form bean of class com.xindeco.business.web.form.GraAppInfoForm

          public class GraAppInfoForm

          extends ActionForm 錯誤寫成

          public abstratic class GraAppInfoForm

          extends ActionForm

          6、

          2006-04-25 08:56:38,495 ERROR com.xindeco.business.web.action.GraAppAction - com.xindeco.business.web.action.GraAppAction@8e2fb5

          java.lang.ClassCastException: $Proxy0

          at com.xindeco.business.web.action.GraAppAction.newone(GraAppAction.java:30)

          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

          at java.lang.reflect.Method.invoke(Method.java:585)

          at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:274)

          at com.xindeco.core.web.action.BaseAction.dispatchMethod(BaseAction.java:153)

          at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:194)

          actioin類中的newone方法如下:

          public class GraAppAction

              extends BaseAction {

              public ActionForward newone(ActionMapping mapping, ActionForm form,

                                        HttpServletRequest request,

                                        HttpServletResponse response) throws Exception {

                 GraAppService graservice = (GraAppService) this.getBean("GraAppService");

          }

          applicationcontext中的GraAppService的配置如下:

              <bean id="GraAppDAO" class="com.xindeco.business.dao.impl.GraAppDAOImpl">

              <property name="support">

                <ref local="support"/>

              </property>

              <property name="sessionFactory">

                <ref local="sessionFactory"/>

              </property>

          </bean>

          <bean id="GraAppService" parent="baseTxProxy">

              <property name="target">

                <bean class="com.xindeco.business.service.impl.GraAppServiceImpl" autowire="byName">

                  <property name="baseDAO">

                    <ref bean="GraAppDAO"/>

                  </property>

                </bean>

              </property>

          </bean>

          因此this.getBean("GraAppService");是為了得到GraAppServicImpl類的實現(xiàn)。GraAppService是interface

          public class GraAppServiceImpl extends BaseServiceImpl

              implements GraAppService{

          }

          7、org.hibernate.hql.ast.QuerySyntaxException: Demand is not mapped. [from Demand where unitid = ? and needNum > usedNeedNum]

          hibernate.cfg.xml沒有配置Demand.hbm.xml文件的目錄

          8、org.springframework.jdbc.BadSqlGrammarException: Bad SQL grammar [] in task 'Hibernate operation'; nested exception is java.sql.SQLException: 列名 'id' 無效。

          java.sql.SQLException: 列名 'name' 無效。

          因為hibernate聲明的id,name的columnid屬性沒有與數(shù)據(jù)庫的字段對應(yīng),所以id,name無效。

          9、java.lang.NumberFormatException: null

          at java.lang.Integer.parseInt(Integer.java:415)

          at java.lang.Integer.parseInt(Integer.java:497)

          at com.xindeco.business.service.impl.DemandServiceImpl.findDemandListByUnitId(DemandServiceImpl.java:33)

          錯誤語句為

          needNum = Integer.parseInt(demand.getNeedNum());

          usedNeedNum = Integer.parseInt(demand.getUsedNeedNum());

          因為demand.getUsedNeedNum()==null,無法轉(zhuǎn)化為string 類型,

          10、rg.apache.jasper.JasperException: /GraAppInfo/GraAppInfoNew.jsp(343,29) According to TLD, tag bean:write must be empty, but is not

          錯誤的原因:

                 <select name="politicsID" >

                       <option value="">請選擇</option>

                 <logic:notEmpty name="politicsList">

                          <logic:iterate id="politics" name="politicsList">

                 </logic:notEmpty>

                 <option value="<bean:write name="politics" property="codeID"/>"><bean:write name="politics" property="codeName"/></option>

                 </logic:iterate>

          </select>

          就因為少了/>

          以后懂得通過查找字數(shù),來檢查錯誤

          11、2006-04-26 13:27:54,812 ERROR com.xindeco.core.util.BeanUtils - bean property [Nation] copy failed

          com.xindeco.core.exception.ConvertException: org.springframework.orm.hibernate3.HibernateSystemException: Unknown entity: java.lang.String; nested exception is org.hibernate.MappingException: Unknown entity: java.lang.String

          beanUtil.beanCopy(grapojo,form,BizConstants.CONVERTER);

          要求:

          1、pojo類的屬性只有與form屬性名字相同,才能beancopy成功

          2、pojo中屬性是實體,在form中一定要用int,long表示

          出現(xiàn)這錯誤的原因是pojo中的屬性不是實體,而錯誤寫成:

          string

          private String nation;應(yīng)改成 private Syscode nation;

          12、

          2006-04-26 14:38:37,843 ERROR com.xindeco.business.web.action.GraAppAction - com.xindeco.business.web.action.GraAppAction@fa1b2d

          java.lang.NullPointerException

          at com.xindeco.business.web.action.GraAppAction.newone(GraAppAction.java:43)

          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

          hibernate配置文件沒改,程序找不到相應(yīng)的類

                  <many-to-one

                      name="FSUnit"

                      class="com.xindeco.business.pojo.EmployUnitBaseInfo"

                      cascade="none"

                      outer-join="auto"

                      update="true"

                      insert="true"

                      access="property"

                      column="fSUnit"

                  />

          其實FSUnit對應(yīng)的類應(yīng)該是FSUnit

                  <many-to-one

                      name="FSUnit"

                      class="com.xindeco.business.pojo.FSUnit"

                      cascade="none"

                      outer-join="auto"

                      update="true"

                      insert="true"

                      access="property"

                      column="fSUnit"

                  />

          13、

          org.hibernate.MappingException: An association from the table GraAppInfo refers to an unmapped class: com.xindeco.business.pojo.FSUnit

          錯誤原因:hibernate.cfg.xml沒有配置fsunit.hbm.xml文件的位置

          14、

          java.lang.ClassCastException: com.xindeco.business.dao.impl.GraAppDAOImpl

          at com.xindeco.business.service.impl.GraAppServiceImpl.addGraduateApp(GraAppServiceImpl.java:16)

          GraAppServiceImpl.java:16

          第16行: GraAppDAO dao = (GraAppDAO) this.getBaseDAO();//其實得到的是GraAppDAOImpl

          錯誤的原因是

          public class GraAppDAOImpl

              extends BaseDAOImpl {

          }

          沒有實現(xiàn)GraAppDAO接口,正確的做法是

          public class GraAppDAOImpl

              extends BaseDAOImpl implements GraAppDAO {

          }

          先繼承后實現(xiàn)

          15、2006-04-27 08:38:54,078 ERROR com.xindeco.business.web.action.GraAppAction - com.xindeco.business.web.action.GraAppAction@1d6399b

          java.lang.ClassCastException: com.xindeco.business.pojo.SysCode

          at org.hibernate.type.StringType.set(StringType.java:26)

          at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:63)

          at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:40)

          一般是因為hibernate聲明類型和pojo類聲明的類型不一樣,并且前面已經(jīng)出現(xiàn)了Hibernate: insert into TGraAppInfo (name, whereFrom, degree, college, speciality, studentRelTel, remark, higherEduLength, highSchool, studyResume, normalOrNot, proxyUnit, workPost, workPlace, studentAddress, studentPostNumber, nation, appStatus) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

          的操作提示,查出錯誤的原因有:

                  <many-to-one

                      name="demand"

                      class="com.xindeco.business.pojo.Syscode"

                      cascade="none"

                      outer-join="auto"

                      update="true"

                      insert="true"

                      access="property"

                      column="demandID"

                  />

                   <property

                      name="appStatus"

                      type="int"

                      update="true"

                      insert="true"

                      access="property"

                      column="appStatus"

                      length="10"

                  />

          應(yīng)改為   

                  <many-to-one

                      name="demand"

                      class="com.xindeco.business.pojo.Demand"

                      cascade="none"

                      outer-join="auto"

                      update="true"

                      insert="true"

                      access="property"

                      column="demandID"

                  />

          <many-to-one

                      name="nation"

                      class="com.xindeco.business.pojo.SysCode"

                      cascade="none"

                      outer-join="auto"

                      update="true"

                      insert="true"

                      access="property"

                      column="nation"

                  />

          16、

          org.springframework.dao.InvalidDataAccessApiUsageException: object references an unsaved transient instance - save the transient instance before flushing: com.xindeco.business.pojo.SysCode

          at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:626)

          at org.springframework.orm.hibernate3.HibernateTransactionManager.convertHibernateAccessException(HibernateTransactionManager.java:570)

          at

          org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:482)

          pojo類為:

          public class GraAppInfo{

              private College college;

          }

          action 類為

          public class GraAppAction

              extends BaseAction {

                 public ActionForward add(ActionMapping mapping, ActionForm form,

                                       HttpServletRequest request,

                                       HttpServletResponse response) throws Exception {

                  graInfo.setCollege(new College());\\必須從數(shù)據(jù)庫找到college這個對象,而不能新生成

                  graInfo.getCollege().setID(graForm.getCollegeID());

                  graInfo.setAppStatus(Integer.parseInt("0"));

                service.addGraduateApp(graInfo);

          }

          public class GraAppServiceImpl extends BaseServiceImpl

              implements GraAppService{

              public boolean addGraduateApp(GraAppInfo info){

                  this.getBaseDAO().save(info);

                  return true;

              }

          }

          dao類save方法為

              getHibernateTemplate().save(obj);

          當(dāng)cascade="all",插入new college 除了id和原來的記錄一樣,其他的字段全部都被更新,為null

          當(dāng)cascase=“insert”,插入new college 只會把它的id插入grainfo表中,其他字段不變。

          17、java.sql.SQLException: Unable to convert between java.lang.Integer and BLOB.

          因為

                  <property

                      name="province"

                      type="com.xindeco.business.pojo.SysCode"http://不能用復(fù)雜類,

                      update="true"

                      insert="true"

                      access="property"

                      column="provinceId"

                  />

          應(yīng)該改為

                      <many-to-one

                      name="province"

                      class="com.xindeco.business.pojo.SysCode"

                      cascade="none"

                      outer-join="auto"

                      update="true"

                      insert="true"

                      access="property"

                      column="provinceId"

                  />

          18、javax.servlet.jsp.JspException: Cannot create iterator for this collection

          at org.apache.struts.taglib.logic.IterateTag.doStartTag(IterateTag.java:265)

          jsp文件如下:

             <logic:notEmpty name="graduateList" >

             <logic:iterate id="graduate" name="graduateList" >

             </ogic:notEmpty >

             </ogic:iterat>

          graduateList是一個類,而logic:iterator要求必須是ArrayList,HashSet....這樣的集合類,而graduateList中一個屬性是ArrayList或HashSet的

          應(yīng)改為:

          <logic:notEmpty name="graduateList" property="items">

          <logic:iterate id="graduate" name="graduateList" property="items" >

          </ogic:notEmpty >

          </ogic:iterat>

          19、2006-05-11 17:13:37,468 ERROR com.xindeco.business.web.action.GraAppAction - com.xindeco.business.web.action.GraAppAction@bc22eb

          org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closed

          SysUser user= (SysUser) request.getSession().getAttribute(WebConstants.SESSION_USER);

          System.out.println(user.getRole().getRoleName());

          當(dāng)hibernate session取出數(shù)據(jù)放到http session時,

          由于sysuser中role的lazy=“true”,所以沒有將RoleName放到http session中,當(dāng)System.out.println(user.getRole().getRoleName());

          時,雖然http session還開著, hibernat seesion已經(jīng)關(guān)閉

                  <many-to-one

                      name="role"

                      class="com.xindeco.business.pojo.SysRole"

                      lazy="false"

                      cascade="none"

                      outer-join="auto"

                      update="true"

                      insert="true"

                      access="property"

                      column="roleID"

                  />

          20、Association references unmapped class: com.xindeco.workflow.WFNode

          因為application.xml文件中沒有配置<mapping resource="com/xindeco/workflow/WFNode.hbm.xml"/>

          系統(tǒng)找不到WFNode

                   < set

               name = " nodes "

                      table = " WF_ROLENODES "

                      lazy = " true "

                      inverse = " false "

                      cascade = " none "

                      sort = " unsorted "

                   >

          < key column = " roleID " > </ key >               

          < many - to - many

                   class = " com.xindeco.workflow.WFNode "

                   column = " nodeId "

                   outer - join = " auto " />

                   </ set >

          posted @ 2009-06-24 11:25 sillyha| 編輯 收藏
          我們經(jīng)常用的就是擴展它的接口ApplicationContext.而它的實現(xiàn)又有多種,我們只介紹一些常用的實現(xiàn)。applicationContext.xml文件是位于Src目錄下。
          第一種就是:
          ApplicationContext context = new ClassPathXmlApplicationContext(
                                               "applicationContext.xml");//用這個成功了,不過要在web-inf和src下面同時建立兩個(后來改了,只在src下面建立就可以,見后面,O(∩_∩)O~)
          第二種就是:
          ApplicationContext context = new FileSystemXmlApplicationContext(
                                               "Src/applicationContext.xml ");//src下面建立xml的時候用該方法
          然后DriveCar dc=(DriveCar)ctx.getBean("DriveCar");就可以使用了……
          注意上面兩種加載是的路徑。
          然后在把他們轉(zhuǎn)換成BeanFactory就可以了。需要用到那個bean就用getBean(“”)取得,可以根據(jù)id或name都可以。
          除此之外還有兩種加載的方法:
          第三種方法:
          ClassPathResource resource =
          new ClassPathResource("applicationContext.xml");
          BeanFactory factory = new XmlBeanFactory(resource);
          第四種方法:
          Resource resource =
          new FileSystemResource("Src/applicationContext.xml");
          BeanFactory factory = new XmlBeanFactory(resource);
          同樣要注意上面的路徑的不同。其實classpath相對應(yīng)的路徑就是Src目錄下,而fileSystem相對的是工程目錄。所以它們路徑是有區(qū)別的,加載時也要細心,不然就會報java.io.FileNotFoundException(系統(tǒng)找不到指定的文件)的異常了。


          第三四種方法沒有測試。

          剛又查了spring的ContextLoaderListener,可以再web.xml中<web-app></web-app>之間添加
               <context-param>
                  <param-name>contextConfigLocation</param-name>
                  <param-value>
                      /WEB-INF/classes/applicationContext*.xml
                  </param-value>
               </context-param>
          </web-app>
          就可以只在src目錄下建立applicationContext.xml了,呵呵
          posted @ 2009-06-24 10:45 sillyha| 編輯 收藏

          今天看到網(wǎng)上有轉(zhuǎn)載的獲得Spring Bean的方法,覺得值得珍藏,現(xiàn)摘錄在此。

          眾所周知,Spring框架將DI模式發(fā)揮到了極至,因此,系統(tǒng)里面用Spring管理的Bean相互之間的獲取是非常

          方便的,只要使用者提供一個setter方法并在配置文件中配置該屬性就可以。

          但是,對于系統(tǒng)中非Spring框架管理的類,如果需要獲取Spring管理的類,或者,程序中需要動態(tài)的根據(jù)Be

          an的id來獲取Bean實例,不可能事先為該類提供所有需要的Bean屬性的setter方法,在類似這樣的情況下,

          獲取Spring框架管理的類實例的方法有多種,現(xiàn)在簡單總結(jié)如下:

          方法一:在初始化時保存ApplicationContext對象
          代碼:
          ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml");
          ac.getBean("beanId");
          說明:
          這種方式適用于采用Spring框架的獨立應(yīng)用程序,需要程序通過配置文件手工初始化Spring的情況。


          方法二:通過Spring提供的工具類獲取ApplicationContext對象
          代碼:

          import org.springframework.web.context.support.WebApplicationContextUtils;
          ApplicationContext ac1 =

          WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc)
          ApplicationContext ac2 = WebApplicationContextUtils.getWebApplicationContext(ServletContext sc)
          ac1.getBean("beanId");
          ac2.getBean("beanId");
          說明:
          這種方式適合于采用Spring框架的B/S系統(tǒng),通過ServletContext對象獲取ApplicationContext對象,然后

          在通過它獲取需要的類實例。
          上面兩個工具方式的區(qū)別是,前者在獲取失敗時拋出異常,后者返回null。


          方法三:繼承自抽象類ApplicationObjectSupport
          說明:
          抽象類ApplicationObjectSupport提供getApplicationContext()方法,可以方便的獲取到ApplicationContext。Spring初始化時,會通過該抽象類的setApplicationContext(ApplicationContext context)方法將ApplicationContext 對象注入。

          方法四:繼承自抽象類WebApplicationObjectSupport
          說明:
          類似上面方法,調(diào)用getWebApplicationContext()獲取WebApplicationContext

          方法五:實現(xiàn)接口ApplicationContextAware
          說明:
          實現(xiàn)該接口的setApplicationContext(ApplicationContext context)方法,并保存ApplicationContext 對象。Spring初始化時,會通過該方法將ApplicationContext 對象注入。

          以上方法適合不同的情況,請根據(jù)具體情況選用相應(yīng)的方法。

          這里值得提一點的是,系統(tǒng)中用到上述方法的類實際上就于Spring框架緊密耦合在一起了,因為這些類是知

          道它們是運行在Spring框架上的,因此,系統(tǒng)中,應(yīng)該盡量的減少這類應(yīng)用,使系統(tǒng)盡可能的獨立于當(dāng)前運

          行環(huán)境,盡量通過DI的方式獲取需要的服務(wù)提供者。

          方法五比較可行,可以設(shè)計一個工具類,專門來獲取Spring中的類。減少對業(yè)務(wù)代碼的侵入性。

          posted @ 2009-06-23 15:43 sillyha| 編輯 收藏
          http://www.gotapi.com/
          語言:英語
          簡介:HTML,CSS,XPATH,XSL,JAVASCRIPT等API的查詢網(wǎng)站。
          http://www.w3schools.com/
          語言:英語
          簡介:W3C制定的標準諸如XML,HTML,XSL等等的在線學(xué)習(xí)教程。
          http://www.xml.org.cn/
          語言:中文
          簡介:可以說是XML的中國官方網(wǎng)吧。W3C標準的翻譯組織與XML系列技術(shù)交流社區(qū).
          http://www.connectionstrings.com/
          語言:英語
          簡介:這里幾乎收集了所有的數(shù)據(jù)庫連接字符(connectionstring)了。
          http://www.itpub.net/
          語言:中文
          簡介:我個人認為是國內(nèi)最專業(yè)的綜合性行業(yè)性技術(shù)類社區(qū).
          http://www.netvtm.com/
          語言:中文
          簡介:內(nèi)容多翻譯于w3schools.com,少有原創(chuàng)。不過還是應(yīng)該鼓勵精品翻譯。
          http://www.regexlib.com
          語言:英語
          簡介:正則表達式庫。搜索正則表達式用。
          http://www.rexv.org/
          語言:英語
          簡介:用Ajax開發(fā)的在線正則表達式驗證器.
          http://www.koders.com/
          語言:英語
          簡介:代碼搜索引擎,可以搜索幾十種語言的代碼。
          http://www.123aspx.com/Rotor/
          語言:英語
          簡介:.Net Frameworks的源代碼。
          http://dotnet.aspx.cc/
          語言:中文
          簡介:孟憲會的資料站,雖資料大多比較簡單,卻解決了開發(fā)中的大部分問題?!
          http://www.dofactory.com/Patterns/Patterns.aspx
          語言:英語
          簡介:23種設(shè)計模式的實現(xiàn)參考。特點是UML+精練的示例代碼+簡潔的解說風(fēng)格。
          http://www.open-open.com/
          語言:中文
          簡介:Java開源大全,如果你用.NET,照著它的名字前加N找找應(yīng)該都有吧 ?!:)
          http://www.riacn.com/
          語言:中文
          簡介:我認為是國內(nèi)少有的RIA專業(yè)技術(shù)站于交流社區(qū).
          http://www.cnpaf.net/
          語言:中文
          簡介:中國協(xié)議分析網(wǎng),很全面的協(xié)議資料網(wǎng)。
          http://www.pinvoke.net/
          語言:英語
          簡介:通過.net調(diào)用win32等非受控API的資料大全。
          http://bbs.51js.com/
          語言:中文
          簡介:無憂腳本,專業(yè)的腳本技術(shù)社區(qū)。
          http://www.c-sharpcorner.com/
          語言:英語
          簡介:C# Corner,學(xué)習(xí)c#的好地方.
          http://blog.csdn.net/group/experts/
          語言:中文
          簡介:CSDN專家群,匯集CSDN專家的電子報.
          http://www.codeproject.com/
          語言:英語
          簡介:有很多可學(xué)習(xí)的示例代碼,特點是豐富,深入淺出.
          http://www.gotdotnet.com/
          語言:英語
          簡介:微軟開發(fā)維護的關(guān)于.net framework交流社區(qū).
          http://www.sourceforge.net/
          語言:英語
          簡介:全球最大的開源軟體站點
          http://www.asp.net/QuickStart/
          語言:英語
          簡介:Microsoft .NET Framework SDK QuickStart Tutorials
          http://www.matrix.org.cn/
          語言:中文
          簡介:與 Java 共舞,Java優(yōu)秀的專業(yè)社區(qū),文章質(zhì)量很高.做.Net的朋友也可以從其借鑒很多知識
          posted @ 2009-06-19 23:34 sillyha 閱讀(102) | 評論 (0)編輯 收藏
          主站蜘蛛池模板: 镇雄县| 石渠县| 信阳市| 托克逊县| 鄂伦春自治旗| 通河县| 犍为县| 永新县| 揭西县| 江津市| 武胜县| 阳春市| 东源县| 马尔康县| 札达县| 黄梅县| 宣威市| 天全县| 宜丰县| 金平| 西充县| 扎兰屯市| 襄汾县| 阆中市| 宁夏| 师宗县| 永丰县| 黑水县| 曲周县| 安福县| 东兰县| 叶城县| 石狮市| 长宁县| 南华县| 留坝县| 阿尔山市| 安图县| 伊川县| 内乡县| 汉寿县|