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"); } }
沒有留言:
張貼留言