2014年4月1日 星期二

Spring Bean Annotation

在spring3.0之後使用註解配置變得相當方便,

XML的配置方式將bean和配置拆開成兩個檔案,

但使用宣告可以將配置和bean放在同一個檔案裡,

更清楚表示相關的配置訊息,

下面介紹一個Bean從頭到尾大略的註解配置:

Class處註解Bean

package com.component;

import org.springframework.stereotype.Component;

@Component
public class ChangePass {

}

有以下四種方式可以為類別進行註解,

他們都會被spring容器轉為Bean:

@Controller      用在對Controller實現的class註解
@Component   一般的Bean,可配置在任何class
@Service          用在對Service實現的class註解
@Repository    用在對DAO實現的class註解

自動裝配Bean

有兩種方式可以在class裡面自動裝配bean,

@Autowired

package com.component;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.dao.DeptDAO;
import com.dao.UserDAO;

@Component
public class ChangePass {
 @Autowired
 private UserDAO userDAO;
 @Autowired(required = false)
 private DeptDAO deptDAO;
}

spring會透過類型匹配的方式去尋找,

如果只有一個UserDAO的Bean,

則會自動裝配上去,

預設的required是true,

表示一定要有匹配,

或者也可將其設定為false。

@Qualifier

利用Qualifier的方式,

spring會透過名稱去尋找,

當有多個UserDAO的bean時,

會以Qualifier的名稱去尋找對應的bean裝配。
package com.component;

import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

import com.dao.UserDAO;

@Component
public class UpdateAccount {
 @Qualifier("userDAO")
 private UserDAO userDAO;
}

Bean Scope & 週期

spring對於scope的配置和說明可以參照bean scope

其中在bean的init和destroy上,

可以用@PostConstruct和@PreDestroy來配置,
package com.component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

@Component
@Scope("prototype")
public class Item {
 public Item() {
  System.out.println("item construct");
 }

 @PostConstruct
 public void init() {
  System.out.println("item init");
 }

 @PreDestroy
 public void destroy() {
  System.out.println("item destroy");
 }
}

沒有留言:

張貼留言