在使用組件掃描時,需要現在XML配置中指定掃描的路徑
<context:component-scan back-package="yangjq.test">
容器實例化會掃描yangjq.test包及其子包下的所有組件類。
只有當組件類定義前面有下面的註解標記時,這些組件類才會被掃描到Spring容器
- @Component 通用註解
- @Name 通用註解
- @Repository 持久化層組件註解
- @Service 業務層組件註解
- @Controller 控制層組件註解
命名
組件在掃描過程會生成一個默認的id值(小寫開頭的類名),這個也可以在註解標記中自定義id值,比如:
//這個是默認的id,值為OracleUserDao@Repositorypublic class OracleUserDao implements UserDao{}//這個是自定義的id,值為loginService@Service("loginService")public class UserService{}組件的作用域
Spring管理的組件通常默認的作用域是”singleton”,如果需要其他的作用域,則可以用@Scope註解,只需要在註解中提供作用域的名稱就可以。
@Scope("prototype")@Repositorypublic class OracleUserDao implements UserDao{}初始化和銷毀
@PostConstruct和@PreDestroy註解標記用於指定初始化和銷毀的回調方法,比如:
public class ExampleBean{@PostConstruct public void init(){//.......初始化}@PreDestroy public void destroy(){//........銷毀}}對於具有依賴注入關係Bean的註解
它可以使用下面幾個任意一個實現關係注入
- @Resource
- @AutoWired/@Qualifier
- @Inject/@Named
通常用的@Resource比較多,就說個@Resource吧,其他的用的時候再搜索看下
@Resource註解標記可以用在字段定義或setter方法定義前面,默認首先按名稱匹配注入,然後類型匹配注入
public class UserSerivce{//@Resource 這個用在字段定義private UserDao userDao;@Resource //這個用在setter方法前面public void setUserDao(UserDao dao){this.UserDao=dao;}}遇到多個匹配Bean時注入會發生錯誤,可以顯式指定名稱,比如@Resource(name=”exampleDao”).
總結
以上就是本文關於基於註解的組件掃描詳解的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!