@Service注解失效

zcybb 2013-12-10 11:14:34
在jeesite中引入一个简单的spring data jpa 项目,运行时总是提示No bean named 'countryService' is defined,即我的@Service( 'countryService')注解失效了,求助这是什么原因?
单独测试这个简单的spring data jpa 项目时可以正常运行,就是导出为jar包放进jeesite项目中,在运行jeesite,调用spring data jpa 项目中的servlet时提示No bean named 'countryService' is defined
...全文
1714 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
zcybb 2013-12-11
  • 打赏
  • 举报
回复
引用 15 楼 oh_Maxy 的回复:
比如A的配置文件为A-config.xml,B的配置文件为B-config.xml 如果A工程为主,引用到B的类对象,使用A的配置文件时,要加一行: <import resource="B-config.xml" />
现在的情况是一个spring data jpa的项目B,独立启动时可以很正常的运行,把项目B导出为jar包,放到 jeesite的lib下面,启动jeesite之后,再去访问B中的东西显示项目B中的jpa配置失效,就是老是提示找 不到注解了@Service的类。但是把项目B中的代码拷贝到jeesite然后去访问又可以。项目B的配置文件可以读到,就是里面的jpa配置失效了。
zcybb 2013-12-11
  • 打赏
  • 举报
回复
引用 15 楼 oh_Maxy 的回复:
比如A的配置文件为A-config.xml,B的配置文件为B-config.xml 如果A工程为主,引用到B的类对象,使用A的配置文件时,要加一行: <import resource="B-config.xml" />
其实可以读到配置文件,就是里面的jpa配置失效了
zcybb 2013-12-10
  • 打赏
  • 举报
回复
引用 1 楼 oh_Maxy 的回复:
检查下: 调用的地方所属类有没有加注解? 还有扫描包路径的配置是否正确。
很奇怪的错误,我是把我的项目Export为jar包,发布jeesite到Tomcat中,然后把jar放到D:\Apache Software Foundation\Tomcat 7.0\webapps\jeesite\WEB-INF\lib中,再调试的
zcybb 2013-12-10
  • 打赏
  • 举报
回复
引用 2 楼 rui888 的回复:
是不是扫描到你的包了?
就是运行到 ApplicationContext ctx = new ClassPathXmlApplicationContext("spring-demo-cfg.xml"); CountryService countryService = ctx.getBean("countryService",CountryService.class); 就提示No bean named 'countryService' is defined 注解都有 @Service("countryService") public class CountryServiceImpl implements CountryService { @Autowired private CountryDao countrysDao; @Override //@RequiresPermissions("sys:country:view") public List<Country> findByNameLike(String name, Pageable pageable) { // TODO Auto-generated method stub Page<Country> countrys = countrysDao.findByNameLike(name, pageable); return countrys.getContent(); } @Override public Country findByCode(String code) { // TODO Auto-generated method stub return countrysDao.findByCode(code); } @Override @Transactional //@RequiresPermissions("sys:country:add") public Country createNewCountrys(Country countrys) { return countrysDao.save(countrys); } @Override @Transactional //@RequiresPermissions("sys:country:edit") public void UpdateCountrys(Country countrys) { // TODO Auto-generated method stub countrysDao.save(countrys); } @Override @Transactional //@RequiresPermissions("sys:country:delete") public void DeleteCountrys(String code) { // TODO Auto-generated method stub countrysDao.delete(code); } }
zcybb 2013-12-10
  • 打赏
  • 举报
回复
加了注解,路径都正确,单独运行的时候都可以,就是引入到jeesite中之后,注解就失效了
tony4geek 2013-12-10
  • 打赏
  • 举报
回复
是不是扫描到你的包了?
oh_Maxy 版主 2013-12-10
  • 打赏
  • 举报
回复
检查下: 调用的地方所属类有没有加注解? 还有扫描包路径的配置是否正确。
oh_Maxy 版主 2013-12-10
  • 打赏
  • 举报
回复
比如A的配置文件为A-config.xml,B的配置文件为B-config.xml 如果A工程为主,引用到B的类对象,使用A的配置文件时,要加一行: <import resource="B-config.xml" />
zcybb 2013-12-10
  • 打赏
  • 举报
回复
引用 13 楼 oh_Maxy 的回复:
[quote=引用 12 楼 u012057066 的回复:] [quote=引用 11 楼 oh_Maxy 的回复:] [quote=引用 5 楼 u012057066 的回复:] [quote=引用 1 楼 oh_Maxy 的回复:] 检查下: 调用的地方所属类有没有加注解? 还有扫描包路径的配置是否正确。
很奇怪的错误,我是把我的项目Export为jar包,发布jeesite到Tomcat中,然后把jar放到D:\Apache Software Foundation\Tomcat 7.0\webapps\jeesite\WEB-INF\lib中,再调试的[/quote] 配置文件是否都引入,要看看有没有用到里面的内容。建议都引入了吧。 要不这样:先别直接这样放到另外一个发布的工程下,先用Eclipse工具调试通了再说。 (A工程如果需要使用B工程下的一些类,将B工程class类达成jar包,导入到A工程中。如果这样还不行,就将B工程相关类直接拷贝到A工程下,一点点排查,到底是啥问题。)[/quote] 直接拷贝到jeesite项目中运行可以出结果,没问题。 就是以jar包导入到jeesite中出现那个问题。[/quote] 配置文件有区别么? 导jar的方式后,编译没报错的话,一定是配置文件的问题了。配置文件有没有额外import过? 那导入jar后的lib库展开,截个图看看呗?[/quote] 没有import,配置文件怎么import呢? 我是先把hotbridHis导出为jar包,放到D:\Apache Software Foundation\Tomcat 7.0\webapps\jeesite\WEB-INF\lib下面,然后把被引用项目hotbridHis的lib下面所有的jar都复制到jeesite发布后的lib下面。
oh_Maxy 版主 2013-12-10
  • 打赏
  • 举报
回复
引用 12 楼 u012057066 的回复:
[quote=引用 11 楼 oh_Maxy 的回复:] [quote=引用 5 楼 u012057066 的回复:] [quote=引用 1 楼 oh_Maxy 的回复:] 检查下: 调用的地方所属类有没有加注解? 还有扫描包路径的配置是否正确。
很奇怪的错误,我是把我的项目Export为jar包,发布jeesite到Tomcat中,然后把jar放到D:\Apache Software Foundation\Tomcat 7.0\webapps\jeesite\WEB-INF\lib中,再调试的[/quote] 配置文件是否都引入,要看看有没有用到里面的内容。建议都引入了吧。 要不这样:先别直接这样放到另外一个发布的工程下,先用Eclipse工具调试通了再说。 (A工程如果需要使用B工程下的一些类,将B工程class类达成jar包,导入到A工程中。如果这样还不行,就将B工程相关类直接拷贝到A工程下,一点点排查,到底是啥问题。)[/quote] 直接拷贝到jeesite项目中运行可以出结果,没问题。 就是以jar包导入到jeesite中出现那个问题。[/quote] 配置文件有区别么? 导jar的方式后,编译没报错的话,一定是配置文件的问题了。配置文件有没有额外import过? 那导入jar后的lib库展开,截个图看看呗?
zcybb 2013-12-10
  • 打赏
  • 举报
回复
引用 11 楼 oh_Maxy 的回复:
[quote=引用 5 楼 u012057066 的回复:] [quote=引用 1 楼 oh_Maxy 的回复:] 检查下: 调用的地方所属类有没有加注解? 还有扫描包路径的配置是否正确。
很奇怪的错误,我是把我的项目Export为jar包,发布jeesite到Tomcat中,然后把jar放到D:\Apache Software Foundation\Tomcat 7.0\webapps\jeesite\WEB-INF\lib中,再调试的[/quote] 配置文件是否都引入,要看看有没有用到里面的内容。建议都引入了吧。 要不这样:先别直接这样放到另外一个发布的工程下,先用Eclipse工具调试通了再说。 (A工程如果需要使用B工程下的一些类,将B工程class类达成jar包,导入到A工程中。如果这样还不行,就将B工程相关类直接拷贝到A工程下,一点点排查,到底是啥问题。)[/quote] 直接拷贝到jeesite项目中运行可以出结果,没问题。 就是以jar包导入到jeesite中出现那个问题。
oh_Maxy 版主 2013-12-10
  • 打赏
  • 举报
回复
引用 5 楼 u012057066 的回复:
[quote=引用 1 楼 oh_Maxy 的回复:] 检查下: 调用的地方所属类有没有加注解? 还有扫描包路径的配置是否正确。
很奇怪的错误,我是把我的项目Export为jar包,发布jeesite到Tomcat中,然后把jar放到D:\Apache Software Foundation\Tomcat 7.0\webapps\jeesite\WEB-INF\lib中,再调试的[/quote] 配置文件是否都引入,要看看有没有用到里面的内容。建议都引入了吧。 要不这样:先别直接这样放到另外一个发布的工程下,先用Eclipse工具调试通了再说。 (A工程如果需要使用B工程下的一些类,将B工程class类达成jar包,导入到A工程中。如果这样还不行,就将B工程相关类直接拷贝到A工程下,一点点排查,到底是啥问题。)
zcybb 2013-12-10
  • 打赏
  • 举报
回复
引用 8 楼 oh_Maxy 的回复:
两个工程的配置文件都叫spring-demo-cfg.xml么? 要么改名,要么把路径改改,不然都在classpath下,会冲突的。 另外,测试的时候使用的配置文件,增加个import书签,将调用的工程的配置文件引入进来。
求指教啊 怎么都不行,都报错,启动jeesite还可以,一post请求hotbridHis的servlet就报错
zcybb 2013-12-10
  • 打赏
  • 举报
回复
引用 8 楼 oh_Maxy 的回复:
两个工程的配置文件都叫spring-demo-cfg.xml么? 要么改名,要么把路径改改,不然都在classpath下,会冲突的。 另外,测试的时候使用的配置文件,增加个import书签,将调用的工程的配置文件引入进来。
jeesite下面的是我刚刚把两个项目合在一起测试用的,实际上jeesite里面是没有spring-demo-cfg.xml这个配置文件的。 加个import书签?你的意思是说把jar包所用的配置文件也加进来?
oh_Maxy 版主 2013-12-10
  • 打赏
  • 举报
回复
两个工程的配置文件都叫spring-demo-cfg.xml么? 要么改名,要么把路径改改,不然都在classpath下,会冲突的。 另外,测试的时候使用的配置文件,增加个import书签,将调用的工程的配置文件引入进来。
zcybb 2013-12-10
  • 打赏
  • 举报
回复
引用 6 楼 oh_Maxy 的回复:
[quote=引用 5 楼 u012057066 的回复:] [quote=引用 1 楼 oh_Maxy 的回复:] 检查下: 调用的地方所属类有没有加注解? 还有扫描包路径的配置是否正确。
很奇怪的错误,我是把我的项目Export为jar包,发布jeesite到Tomcat中,然后把jar放到D:\Apache Software Foundation\Tomcat 7.0\webapps\jeesite\WEB-INF\lib中,再调试的[/quote] 没试过将两个工程分别打包再合入到一个工程里。 看了4L,想问下你的两个工程的配置文件是怎么放的?路径? 还有,spring-demo-cfg.xml这个配置文件的内容,有没有兼顾扫描相关包路径[/quote] 就是想把jeesite作为主工程,HotbridHis是一个独立工程,作为jar放到jeesite的lib目录中。 spring-demo-cfg.xml是HotbridHis这个工程的配置文件,独立属于它,jeesite里面还有另外一个配置文件applicationContext.xml: <!-- 使用Annotation自动注册Bean,解决事物失效问题:在主容器中不扫描@Controller注解,在SpringMvc中只扫描@Controller注解。 --> <context:component-scan base-package="com.thinkgem.jeesite,com.hotbrid.his"><!-- base-package 如果多个,用“,”分隔 --> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> <!-- 配置 JPA Entity Manager --> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="jpaVendorAdapter" ref="hibernateJpaVendorAdapter"/> <property name="packagesToScan" value="com.hotbrid.his,com.thinkgem.jeesite"/><!-- 如果多个,用“,”分隔 --> <property name="jpaProperties"> <props> <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop> <prop key="net.sf.ehcache.configurationResourceName">cache/ehcache-hibernate-local.xml</prop> <prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop> <prop key="hibernate.cache.use_query_cache">true</prop> <prop key="hibernate.search.default.directory_provider">filesystem</prop> <prop key="hibernate.search.default.indexBase">${hibernate.search.default.indexBase}</prop> <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> </props> </property> </bean> <!-- 指定JPA实现厂商适配器 --> <bean id="hibernateJpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/> <!-- 配置 Spring Data JPA, base-package 如果多个,用“,”分隔 --> <jpa:repositories base-package="com.hotbrid.his,com.thinkgem.jeesite" repository-impl-postfix="Impl" transaction-manager-ref="transactionManager" entity-manager-factory-ref="entityManagerFactory"/> <!-- 配置 JPA Transaction --> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory"/> </bean> 这个的话把hotbridHis项目引入了,就是里面的com.hotbrid.his jeesite里面的配置文件就是它原来的配置文件。
oh_Maxy 版主 2013-12-10
  • 打赏
  • 举报
回复
引用 5 楼 u012057066 的回复:
[quote=引用 1 楼 oh_Maxy 的回复:] 检查下: 调用的地方所属类有没有加注解? 还有扫描包路径的配置是否正确。
很奇怪的错误,我是把我的项目Export为jar包,发布jeesite到Tomcat中,然后把jar放到D:\Apache Software Foundation\Tomcat 7.0\webapps\jeesite\WEB-INF\lib中,再调试的[/quote] 没试过将两个工程分别打包再合入到一个工程里。 看了4L,想问下你的两个工程的配置文件是怎么放的?路径? 还有,spring-demo-cfg.xml这个配置文件的内容,有没有兼顾扫描相关包路径

50,523

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧