目前分類:Spring (31)

瀏覽方式: 標題列表 簡短摘要

  利用在客戶端測試的空檔,測試Spring出品的Java Mail。

import javax.mail.internet.MimeMessage;

import org.springframework.mail.javamail.JavaMailSenderImpl;

Jemmy 發表在 痞客邦 留言(0) 人氣()

  立冬後思春一下^^。應客戶要求,希望jdbc.properties不要被包進jar裡,可外顯手動修改再重啟standalone程式。在Spring3的applicationContext.xml改一下就好,原為

<util:properties id="jdbcProperties" location="classpath:jdbc.properties"/>

Jemmy 發表在 痞客邦 留言(0) 人氣()

  在尋求jQuery不能在FireFox 3.x運行的解法時,意外發現@Bean的新用法,如下:

@Bean(name={"/account",

Jemmy 發表在 痞客邦 留言(0) 人氣()

  目前研究進度是可以回傳JSON格式在DataTables.js正常顯示,但中文卻成了亂碼。UTF8已是通用的頁面編碼,過去得自撰Filter對response進行編碼,現在Spring提供了Filter,解決了亂碼問題,在web.xml設定如下:

<filter>

Jemmy 發表在 痞客邦 留言(0) 人氣()

  在前一篇Spring3對JSR-330的支援,可以使用@Qualifier指定bean name,以區分同一Interface的不同implementation。而Spring還提供getBeansOfType這個method取所有實作同一Interface的所有的bean:

@RunWith(SpringJUnit4ClassRunner.class)

Jemmy 發表在 痞客邦 留言(0) 人氣()

  Spring3聲明完全支援JSR-330規格:@Inject、@Qualifier、@Named、@Provider、@Scope和@Singleton,最早Google Guice 2也支援,兩者有異曲同工之妙。在Spring3把@Autowired完全可以用@Inject(javax.inject)取代,因為@Autowired在JSR-330之前就有了,而現在有一個需求是,吾人定義一個共用的Interface:IBaseDao<T>,放著insert、update、delete等共同操作,但T可能是不同物件,如Account、Employee等,在Spring 2.5.x以前的版本,是在context xml裡配置好不同bean name,但在Spring3的annotion context如何做到?答案是@Qualifier。

在Config類別設定如下:

Jemmy 發表在 痞客邦 留言(0) 人氣()

  剛學技術時,SQL學得最好,Log是最差,現在反而倒過來了,對ORM產品上手特別鈍感,這也許我很快先學會iBatis的緣故,慣用SQL操作,卻沒有物件對映到資料庫的概念。以下飯粒只是用JUnit很簡單的存取一個Accounts table裡名字欄位,因為併使Spring3的annotation context、JPA using Hibernate,試完後,真的會癱掉:

  使用AnnotationConfigContext載入Config類別進行JUnit,其測試程式如下:

Jemmy 發表在 痞客邦 留言(0) 人氣()

  EJB可以說原來執政黨Sun在platform選區大力支持的候選人,但含著金湯匙的EJB太過顢頇,給在野黨Spring有機可乘,成為Java playform的當選人。隨著支持度水漲船高,Spring3也逐漸肥起來,但還稱不上顢頇,面對Google出品的Guice謹慎以對,連Guice特有的annotation DI到Spring3也學得十足十。但Google挾著Android和GAE的優勢,端看Spring怎麼瘦身擠進Mobile和Cloud的大窄門。

  廢話結束,Spring3的@Import上還真的不太好用。寫一個DBConfig的@Configuration,提供DataSource的@Bean方便給application.xml與AnnotationConfigApplicationContext繼承,如下:

Jemmy 發表在 痞客邦 留言(0) 人氣()

  斷續踹了兩三天,搞定使用Annotation配置Data Tier,作為Spring-Security驗證來源。一樣用jdbc.properties對定義連線資訊,和applicationContext.xml放同一處可以被classpath找到,是故在applicationContext.xml設定如下:

<?xml version="1.0" encoding="UTF-8"?>

Jemmy 發表在 痞客邦 留言(0) 人氣()

  Spring applicationContext.xml的<context:component-scan>標籤用途比我想像的還要實用。而且後來才知道,有了<context:component-scan>,另一個<context:annotation-config/>標籤根本可以移除掉,因為被包含進去了。原本我survery Spring3通常只配置成<context:component-scan base-package="com.foo.bar"/>,意即在base-package下尋找有@Component和@Configuration的target Class。而現在如下的飯粒:

<context:component-scan base-package="com.foo" use-default-filters="false">

Jemmy 發表在 痞客邦 留言(0) 人氣()

  沿續上篇的AspectJ 5 for Spring annotation的疑問,也讓我首次去檢驗Open Source的程式碼。其實Open Source的code以前都不看,就有一種怕改到不能用的自卑心作祟。而OOP的好處不在於改,可以繼承,所以我寫了MyDispatchAction繼承MappingDispatchAction的class,讓原本protected的getMethodName,變成public探出頭來呼吸一下,而業務Action再繼承我寫的。

import javax.servlet.ServletException;

Jemmy 發表在 痞客邦 留言(0) 人氣()

  AOP主要用於Logging、Audit、Profiler、認證授權。其中AspectJ較之於Spring AOP和JBoss AOP更負盛名的AOP產品。AspectJ 5則是支援到JDK 5.0版以上,較之前版,完全Java化,包括annotation。但最大的美中不足是,竟無法對Struts1的MappingDispatchAction或DispatchAction進行weave,據http://howsun.blog.sohu.com/106725713.html這篇Blog所寫,DispatchAction和AOP都是採Reflection,所以無法對會採取Reflection的類別再做一次Reflection,真是殘念。但也讓我找到一個偷吃步的絕技,這個留到最後說,先對AspectJ 5 for Spring3 annotation做個入門筆記:

  1. applicationContext.xml的設定:

    <?xml version="1.0" encoding="UTF-8"?>

Jemmy 發表在 痞客邦 留言(0) 人氣()

  Spring3新功能之一是可以建立內嵌資料庫,便於開發者測試所用,目前支援HSQL、H2和Apache的Derby,預設是HSQL。習於Maven的我,至少要在pom.xml加入這個dependency吧!

<dependency>

Jemmy 發表在 痞客邦 留言(0) 人氣()

  早先有兩篇Blog:JUnit的Parameteried在Spring的測試Spring3的@Component與@Configuration湊在一起,有個問題產生了,就是JUnit4如何對Annotation Context(即AnnotationConfigApplicationContext)進行單元測試?而Spring 3.0.1還沒支援到此,卻有國外網友寫出解決方式了,http://stackoverflow.com/questions/2228820/add-spring-3-0-0-java-based-ioc-to-junit-4-7-tests

  1. 先寫實作org.springframework.test.context.ContextLoader介面的Class,為什麼test要加粗,是因為Spring好像不只一個名為ContextLoader的類別或介面,而這Class本來就要用在Test。

    public class AnnotationConfigContextLoader implements ContextLoader {

Jemmy 發表在 痞客邦 留言(0) 人氣()

  在Spring 3.0.1官方文件裡指出有三種指定Transaction Manager的方式,分別是jdbc、jta和以Hibernate為例的orm。jdbc需要指定DataSource甚至它的Connection Pool,如下:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

Jemmy 發表在 痞客邦 留言(0) 人氣()

  @Component在前篇Spring3 annotation搭配Struts1提到一顆飯粒,還提供@Autowired和@Inject來替代applicationContext.xml的Dependency Injection(DI,依賴注入),但這在Spring 2.5就有了。而@Configuration則才是Spring3提供的,我這兩天被這兩個annotation搞混,因為它們底下都有個@Bean的annoation。直到再做一顆飯粒,才煮熟了。

  經過@Component與@Configuration聲明的Class,把applicationContext.xml予以類別化,減少XML複雜化。不同在於@Component藉由在applicationContext.xml加注以下內容:

Jemmy 發表在 痞客邦 留言(0) 人氣()

  Spring3於2009/12/16釋出3.0版,於2010/2/18釋出3.0.1版。把Spring3引為架構核心,必須用Spring3的新功能和既有的Struts1搭配,終於有成果了。

  古早時代寫的一篇Struts 1被Spring托管的配置,繼續沿用。弄一個LoginAction為飯粒:

Jemmy 發表在 痞客邦 留言(0) 人氣()

  Spring在Servlet 2.4以上的container是用Listener,在web.xml設定如下:

<web-app>

Jemmy 發表在 痞客邦 留言(0) 人氣()

  據Google結果,JUnit的參數化測試不被Spring 2.5的SpringJUnit4ClassRunner所支援,但仍有法可解,如下:

@RunWith(Parameterized.class)

Jemmy 發表在 痞客邦 留言(0) 人氣()

  java.lang.NoSuchMethodError: org.springframework.util.ReflectionUtils.isEqualsMethod(Ljava/lang/reflect/Method;)Z

  這個錯誤經Google指示,ReflectionUtils的isEqualsMethod method是在Spring 2.5.6才有的。我一定用到2.5.5以前的版本造成的。但在Maven的pom.xml設定,是2.5.6沒有錯,直到去看Java Build Path,發現[Maven Dependencies]裡,竟然在spring-2.5.6.jar前就已經引用了2.0.5了,而[Maven Dependencies]是無法使用Edit去編輯所引用的Jar,它的來源由pom.xml決定。

Jemmy 發表在 痞客邦 留言(0) 人氣()

1 2