如下,Spring-mybatis中,实现类中为什么可以注入一个接口呢?
@Service("userService")publicclassUserServiceImplimplementsIUserService{@Resourcepriv...
@Service("userService")
public class UserServiceImpl implements IUserService {
@Resource
private IUserDao userDao; //就是这里,IUserDao这个接口,为什么可以注入呢?接口难道不是只能实现吗。这个spring注入进来的是个什么鬼。。。
@Override
public User getUserById(int userId) {
// TODO Auto-generated method stub
return this.userDao.selectByPrimaryKey(userId); //这userDao是接口了。接口还能直接调用方法吗。。。这什么操作
}
} 展开
public class UserServiceImpl implements IUserService {
@Resource
private IUserDao userDao; //就是这里,IUserDao这个接口,为什么可以注入呢?接口难道不是只能实现吗。这个spring注入进来的是个什么鬼。。。
@Override
public User getUserById(int userId) {
// TODO Auto-generated method stub
return this.userDao.selectByPrimaryKey(userId); //这userDao是接口了。接口还能直接调用方法吗。。。这什么操作
}
} 展开
2个回答
展开全部
这是spring-mybatis的机制,你在使用了mybatis的spring application.xml中,可找到mybatis的配置:
<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="/WEB-INF/spring/mybatis-config.xml"/>
<property name="mapperLocations">
<array>
<value>classpath:com/xxx/*.xml</value>
</array>
</property>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.xxx"/>
<property name="sqlSessionFactoryBeanName" value="sessionFactory"/>
</bean>
spring-mybatis将会解析xml,与对应的接口,组装成动态bean。spring-mybatis封装了这一过程,所以你只需要关注xml文件中对应接口的各个sql实现。
追问
大约就是一种spring mybatis配置好的特有机制嘛。如果是平常的java代码中就不可以这样用了吧
追答
那是肯定的了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询