Spring中Bean的註冊與注入——註解方式
阿新 • • 發佈:2019-02-09
<beans>
// 註解Autowired的註解處理器
<bean class="....AutowiredAnnotationBeanPostProcessor" />
// 註解Resouce、PostConstruct、PreDestroy的註解處理器,符合JSR-250標準的註解
<bean class="....CommonAnnotationBeanPostProcessor" />
// 註解PersistenceUnit、PersistenceContext的註解處理器
<bean class="....PersistenceAnnotationBeanPostProcessor" />
// 註解Required的註解處理器
<bean class="....RequiredAnnotationBeanPostProcessor" />
// 此句可直接代替上述四個配置
<context:annotation-config />
// 使用上述註解的類必須先被註冊為bean,開啟註解掃描,上述所有功能用如下一句話完成
// 可掃描類前的註解Component、Repository、Service、Controller,四個註解可將其標註的類註冊為bean
<context:component-scan base-package ="..*" />
// 完成aop的註解Aspect、Pointcut、Before、After、Around的註解處理器,預設false使用jdk動態代理,true使用cglib
<aop:aspectj-autoproxy proxy-target-class="true" />
</beans>
// 註解Component標註任何類,其擴充套件Repository標註dao、Service標註服務、Controller標註控制器,引數為bean的id
// 註解Scope指定bean的作用域,預設singleton,如果dao、service、controller全部使用預設單例,在設計時就必須規避併發問題
// 同一個例項多執行緒會共享成員屬性,區域性屬性為執行緒獨有,由此在設計dao、service、controller時,使用者自己定的變數必須為區域性
@Repository("xxDao")
@Scope("singleton")
public class XxDaoImpl implements XxDao {
..
}
@Service("yyServiceRpc")
public Class YyServiceRpc {
// 外部服務
public YyService yyService;
..
}
@Service("xxService")
public class XxServiceImpl implements XxService {
// 預設按屬性名尋找匹配的bean,找不到按屬性型別尋找匹配的bean
// 可通過引數使其按指定的名字尋找匹配的bean,找不到報錯,不會再按屬性型別尋找匹配
@Resource(name = "xxDao")
XxDao xxDao;
// 註解Autowired按屬性型別尋找匹配的bean,引數required設定允許找不到bean,一般僅在測試用
// 若匹配型別的bean有多個會拋異常,註解Qualifier指定按給定的名字尋找匹配的bean
@Autowired(required = false)
@Qualifier("yyServiceRpc")
YyServiceRpc yyServiceRpc;
..
}