我在Spring 3.2.0
和Mybatis 3.3.0
Mybatis Spring 1.2.3.
我有几个使用这项技术的项目,他们需要在库中添加类似的新代码,这样我才能与外部系统进行交互,在此交互过程中我需要在数据库中调用几个方法。代码。
我创建了一个界面并将其放在一个包中,比如说:
com.mycompany.myapp.dao.MyNewService
该接口有一些方法。所有这些都在{em}相同的包路径中的Mybatis
映射文件MyNewService.xml
中定义。
我创建了所有这些代码的.jar文件。
在我的主应用程序中,我为此.jar文件添加了一个依赖项,它最终在WEB-INF\lib\MyHelpers.jar
在该应用程序中,我有一个根应用程序上下文spring文件,我尝试使用mybatis MapperScannerConfigurer
通过以下方式查找此新bean /服务:
<!--scan for mappers and let them be autowired -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.mycompany.myapp.dao" />
<property name="sqlSessionFactoryBeanName"
value="sqlSessionFactory" />
</bean>
当我运行此代码时,它似乎无法在我知道位于WEB-INF\lib\MyHelpers.jar
的程序包路径中找到此服务。
应用程序在启动时会发出警告:
WARN (ClassPathMapperScanner.java:167) - No MyBatis mapper was
found in '[com.mycompany.myapp.dao]' package.
Please check your configuration.
代码稍后在依赖注入过程中失败,其中包含大量的堆栈跟踪,实际上是:
2017-03-08 15:38:39,625 [[ACTIVE] ExecuteThread:'0'表示队列: 'weblogic.kernel.Default(自我调整)']错误 (org.springframework.web.servlet.DispatcherServlet:466) - 上下文 初始化失败
org.springframework.beans.factory.BeanCreationException:错误 创建名为'orderDetailsController'的bean:注入 自动连接依赖失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:不能 autowire字段:private com.mycompany.myapp.dao.MyNewService com.mycompany.otherapp.controller.OrderDetailsController.myNewService ;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有 匹配找到[com.mycompany.myapp.dao.MyNewService]类型的bean 对于依赖:预计至少有1个bean有资格作为autowire 这种依赖的候选人。依赖注释: {@ org.springframework.beans.factory.annotation.Autowired(所需=真)}
如果我深入研究Mybatis代码,当它使用一些ResourceResolver代码时,它根本无法从.jar中的包路径中找到资源。 IF 我直接将代码移到我的项目中而不是添加.jar依赖项,代码运行正常而没有错误。
当然,问题是我必须在六个项目中放置相同的代码,所以我想我会在这个.jar文件中使用它并使用MapperScannerConfigurer
。我们在所有项目中使用它,但所有.xml在部署时都在应用程序WEB-INF\classes
内,在WEB-INF\lib
内的.jar文件中不。
任何想法如何实现这一目标?总之,它类似于:
Model.jar
接口和.xml映射文件制作名为Mybatis
的文件WEB-INF\lib
如果您需要更多说明,我当然可以添加它。