http://blog.csdn.net/cdl2008sky/article/details/6265742 ide
(1) 、<context:component-scan base-package="*.*" />ui
該配置隱式註冊了多個對註解進行解析的處理器,如:spa
AutowiredAnnotationBeanPostProcessor .net
CommonAnnotationBeanPostProcessor hibernate
PersistenceAnnotationBeanPostProcessor prototype
RequiredAnnotationBeanPostProcessor component
其實,註解自己作不了任何事情,和XML同樣,只起到配置的做用,主要在於背後強大的處理器,其中就包括了<context:annotation-config/>配置項裏面的註解所使用的處理器,xml
因此配置了<context:component-scan base-package="">以後,便無需再配置<context:annotation-config>blog
(2)、@Component、@Repository、@Service、@Controller、@Autowired、@Resource接口
而Spring2.5就爲咱們引入了組件自動掃描機制
它能夠在classpath下尋找標註了@Service、@Repository、@Controller、@Component註解的類,並把這些類歸入Spring容器中管理,它的做用和在XML中使用bean節點配置組件是同樣的使用自動掃描機制,則需配置<context:component-scan base-package="com.jadyer"/>啓動自動掃描,其中base-package指定須要掃描的包,它會掃描指定包中的類和子包裏面類
@Service用於標註業務層組件
@Repository用於標註數據訪問組件,即DAO組件
@Controller用於標註控制層組件,如Struts中的Action
@Component泛指組件,當組件不要好歸類時,能夠使用這個註解進行標註
一、能夠使用諸如@Service("personDao")修改bean名稱,而它默認的是將首字母小寫的類名做爲<bean>名稱
二、若要更改<bean>做用域的話,能夠使用@Scope("prototype")註解來修改<bean>做用域
通常使用@Resource註解,而不要使用@Autowired註解
由於@Autowired註解是Spring提供的,而@Resource註解是J2EE提供的
在JDK6中就已經包含@Resource註解了,因此它沒有跟Spring緊密耦合
(3)、<tx:annotation-driven />
@Transactional 註解能夠被應用於接口定義和接口方法、類定義和類的 public 方法上。
Spring團隊的建議是你在具體的類(或類的方法)上使用 @Transactional 註解,而不要使用在類所要實現的任何接口上。
@Service
@Transactional(rollbackFor=Exception.class) //對當前類的全部方法起做用
@SuppressWarnings("serial")
public class ButtonBo extends GlobalBo {
....
@Transactional(propagation = Propagation.NOT_SUPPORTED, readOnly = true) //具體方法上
public Button findButton(String buttonid) throws BaseException {
return hibernateEntityDao.get(Button.class, buttonid);
}
}