博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring的Annotation使用注意
阅读量:6521 次
发布时间:2019-06-24

本文共 1327 字,大约阅读时间需要 4 分钟。

使用了annotation的工程导出jar在运行时,报找不到@Service修饰的类。但是在工程里执行没有问题。报错如下:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'wikiCategoryMigrateService' is defined
解决:
1将bean定义定义到xml中。这样即使不存在directory entries(DE),Spring也能找到bean。
2使用export jar+Add directory entries把directory entries导出到classpath。但是由于export jar没办法将依赖的jar导出。所以需要使用外部cp指定。
3export runnable jar同时save as ant script, 然后修改ant script,将<jar destfile="/Users/zhonghua/Desktop/transfer.jar">里面添加属性 filesonly="false"。目前测试好象不行。
4利用maven的assemble打jar.
二种导出DE的办法:
DE一种是存在于jar被外界依赖,比如某个war依赖于某个jar,而该jar导出时没有包含DE应该也没关系。只要该jar位于war文件的/WEB-INFO/lib目录下,将来被同一个classloader加载就没有问题。个人理解war在调用jar的时候,会扫描jar形成DE并放到classpath下。
另一种情况是没有war调用jar,jar需要单独执行,此时生成DE的办法是导出jar的时候导出,ant是在jar的任务中添加filesonly="false", eclipse需要通过选中Add directory entries实现。
原理:annotation不会扫描jar,而是会扫描directory entries,因此Spring的文档中强调如果ant导出jar时,需要将files-only="false"
"The scanning of classpath packages requires the presence of corresponding directory entries in the classpath. When you build JARs with Ant, make sure that you do not activate the files-only switch of the JAR task".

 
参:http://stackoverflow.com/questions/8671061/directory-entries-in-generated-jar-archive-with-gradle
  http://stackoverflow.com/questions/6857130/spring-component-scan-not-scanning-jboss-server-lib-directory
 
 

转载地址:http://xrubo.baihongyu.com/

你可能感兴趣的文章
浅谈个人对类的理解
查看>>
打印圈1圈2
查看>>
java 插入数据mysql乱码显示?
查看>>
python列表的深浅拷贝、字典、元组及集合的常用方法
查看>>
window.location.href无法跳转
查看>>
django html模板继承 {%block 标记名} {%endblock%}
查看>>
Linux htop 使用
查看>>
PostgreSQL精简命令:
查看>>
1.4 Eclipse 自动补全功能
查看>>
从外部数据库驱动程序 (9499) 的意外的错误。
查看>>
Node.js:Buffer浅谈
查看>>
php数组转为JSON字符串(兼容中文)
查看>>
使用 RGraph(HTML5) 绘制折线图(三)
查看>>
window下安裝redis服務
查看>>
Oracle——PL/SQL(1)
查看>>
Ubuntu之Git更新
查看>>
参观微软Serbia开发中心和Office365 2019-01-31活动感悟
查看>>
第二题:创建记事本并写入内容
查看>>
Session的生命同期
查看>>
登录名称
查看>>