日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

注册注解BeanDefinition

發(fā)布時(shí)間:2024/4/13 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 注册注解BeanDefinition 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

AnnotationConfigWebApplicationContext 是AnnotationConfigApplicationContext 的Web 版,它們對(duì)于注解Bean 的注冊(cè)和掃描是基本相同的,但是AnnotationConfigWebApplicationContext對(duì)注解Bean 定義的載入稍有不同,AnnotationConfigWebApplicationContext 注入注解Bean 定義源碼如下:

//載入注解Bean定義資源 @Override protected void loadBeanDefinitions(DefaultListableBeanFactory beanFactory) {//為容器設(shè)置注解Bean定義讀取器AnnotatedBeanDefinitionReader reader = getAnnotatedBeanDefinitionReader(beanFactory);//為容器設(shè)置類路徑Bean定義掃描器ClassPathBeanDefinitionScanner scanner = getClassPathBeanDefinitionScanner(beanFactory);//獲取容器的Bean名稱生成器BeanNameGenerator beanNameGenerator = getBeanNameGenerator();//為注解Bean定義讀取器和類路徑掃描器設(shè)置Bean名稱生成器if (beanNameGenerator != null) {reader.setBeanNameGenerator(beanNameGenerator);scanner.setBeanNameGenerator(beanNameGenerator);beanFactory.registerSingleton(AnnotationConfigUtils.CONFIGURATION_BEAN_NAME_GENERATOR, beanNameGenerator);}//獲取容器的作用域元信息解析器ScopeMetadataResolver scopeMetadataResolver = getScopeMetadataResolver();//為注解Bean定義讀取器和類路徑掃描器設(shè)置作用域元信息解析器if (scopeMetadataResolver != null) {reader.setScopeMetadataResolver(scopeMetadataResolver);scanner.setScopeMetadataResolver(scopeMetadataResolver);}if (!this.annotatedClasses.isEmpty()) {if (logger.isInfoEnabled()) {logger.info("Registering annotated classes: [" +StringUtils.collectionToCommaDelimitedString(this.annotatedClasses) + "]");}reader.register(this.annotatedClasses.toArray(new Class<?>[this.annotatedClasses.size()]));}if (!this.basePackages.isEmpty()) {if (logger.isInfoEnabled()) {logger.info("Scanning base packages: [" +StringUtils.collectionToCommaDelimitedString(this.basePackages) + "]");}scanner.scan(this.basePackages.toArray(new String[this.basePackages.size()]));}//獲取容器定義的Bean定義資源路徑String[] configLocations = getConfigLocations();//如果定位的Bean定義資源路徑不為空if (configLocations != null) {for (String configLocation : configLocations) {try {//使用當(dāng)前容器的類加載器加載定位路徑的字節(jié)碼類文件Class<?> clazz = ClassUtils.forName(configLocation, getClassLoader());if (logger.isInfoEnabled()) {logger.info("Successfully resolved class for [" + configLocation + "]");}reader.register(clazz);}catch (ClassNotFoundException ex) {if (logger.isDebugEnabled()) {logger.debug("Could not load class for config location [" + configLocation +"] - trying package scan. " + ex);}//如果容器類加載器加載定義路徑的Bean定義資源失敗//則啟用容器類路徑掃描器掃描給定路徑包及其子包中的類int count = scanner.scan(configLocation);if (logger.isInfoEnabled()) {if (count == 0) {logger.info("No annotated classes found for specified class/package [" + configLocation + "]");}else {logger.info("Found " + count + " annotated classes in package [" + configLocation + "]");}}}}} }

以上就是解析和注入注解配置資源的全過(guò)程分析。

?

?

總結(jié)

以上是生活随笔為你收集整理的注册注解BeanDefinition的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。