我有一个代码是Spring Framework中的一个错误
错误原因我知道 所以我不知道如何解决这个问题。
我正在使用mybatis库
我有两个Account DataBase的多个DataSource
我创建了一个root-context.xml ----------------------- root-context.xml ---------------------- -------------------------------------
Oracle帐户1测试1
<bean id="dataSourceTest1" class="org.apache.commons.dbcp.BasicDataSource" destroy-m
ethod="close">
<property name="driverClassName" value="net.sf.log4jdbc.DriverSpy"/>
<property name="url" value="jdbc:log4jdbc:oracle:thin:@111.111.1111.1111:1111:Test1"/>
<property name="username" value="TEST1"/>
<property name="password" value="TEST1"/>
<property name="maxIdle" value="200"/>
<property name="maxActive" value="200"/>
<property name="minIdle" value="5"/>
</bean>
<bean id="sqlSessionFactoryTest1" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSourceTest1" />
<property name="mapperLocations" value="classpath*:test/service/server/test1/**/*.xml" />
</bean>
<bean id="sqlSessionTest1" class="org.mybatis.spring.SqlSessionTemplate" name="sqlSessionTest1">
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactoryTest1" />
</bean>
<mybatis-spring:scan base-package="test.service.server.test1" template-ref="sqlSessionTest1" />
Oracle Account test2
<bean id="dataSourceTest2" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="net.sf.log4jdbc.DriverSpy"/>
<property name="url" value="jdbc:log4jdbc:oracle:thin:@222.222.2222.222:2222:Test2"/>
<property name="username" value="Test2"/>
<property name="password" value="Test2"/>
<property name="maxIdle" value="200"/>
<property name="maxActive" value="200"/>
<property name="minIdle" value="5"/>
</bean>
<bean id="sqlSessionFactoryTest2" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSourceTest2" />
<property name="mapperLocations" value="classpath*:test/service/server/test2/**/*.xml" />
</bean>
<bean id="sqlSessionTest2" class="org.mybatis.spring.SqlSessionTemplate" name="sqlSessionTest2">
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactoryTest2" />
</bean>
<mybatis-spring:scan base-package="test.service.server.test2" template-ref="sqlSessionTest2"/>
----------------------- root-context.xml END ------------------ ---------------------------------------
我没有使用上下文:component-scan
<!-- <context:component-scan base-package="test.service.server.test1.test1service"/>-->
<!-- <context:component-scan base-package="test.service.server.test2.test2service"/>-->
我使用SpringJUnit4每个单元测试
顺序执行(DataSourceTest和SqlSessionFactory Test和SqlSession测试mapperScanTest)。
在mapperScanTest之前没有任何问题。
但是,星号使用注释@Service
时会发生错误------------------------------------------服务接口代码 - ----------------------------------
public interface Test2_SERVICE {
public List<Test2_VO> GET_ListVO();
}
-------------------------------------------实施服务代码 - ---------------------------------
@Service("Test2_SERVICE") *//<--Error annotaion*
public class Test2_SERVICEIMPLE implements Test2_SERVICE{
@Resource
Test2_MAPPER mapper;
@Override
public List<Test2_VO> GET_ListVO() {
return mapper.GET_ListMapperVO();
}
}
---------测试代码------------------------------
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "file:src/main/**/*-context.xml" })
public class TestService {
Logger logger = Logger.getLogger(Thread.currentThread().getClass());
@Autowired
@Qualifier("Test2_SERVICE")
Test2_SERVICE test2_SERVICE;
@Override
public void testString() {
logger.info("---------------------");
List<Test2_VO> listVO = test2_SERVICE.GET_ListVO();
logger.info(listVO );
logger.info("---------------------");
}
}
错误讯息-----------------------------------
引起: org.springframework.context.annotation.ConflictingBeanDefinitionException: bean类的注释指定bean名称'Test2_SERVICE' [test.service.server.test2.test2service.Test2_SERVICE]与。冲突 同名和类的现有的,不兼容的bean定义 [test.service.server.test2.test2service.Test2_SERVICEIMPLE]
-----------------------------------------------末端---------------------------------------------
@Service("Test2_SERVICE") *//<--Error annotaion*
问题直到对象Test2_MAPPER
才存在但是,错误始于Test2_SERVICE
@ Service ("Test2_SERVICE") Where there is only used here (Test2_SERVICEIMPLE).
由于这个问题
我痛苦了三天..
有人告诉我解决此错误消息的问题。
感谢您阅读我的文章。
答案 0 :(得分:1)
问题是您使用此注释为Test2_SERVICEIMPLE
创建名为“Test2_SERVICE”的bean:
@Service("Test2_SERVICE")
//creates the bean with id="TEST2_Service" of the type Test2_SERVICEIMPLE
public class Test2_SERVICEIMPLE implements Test2_SERVICE
然后将此Test2_SERVICEIMPLE
bean准确分配给接口Test2Service
@Autowired
@Qualifier("Test2_SERVICE")
//here you assign the bean of the not matching type Test2_SERVICEIMPLE to
//a variable of type Test2_SERVICE
Test2_SERVICE test2_SERVICE;
这意味着接口想要使用bean来实现...
只需删除/更改@Qualifier("Test2_SERVICE")
或更改@Service("Test2_SERVICE")
如何autowire annotation qualifiers以及如何name autodetected components