项目:
Spring+Spring-data-jpa
后面又加入 Mybatis支持 ,包括bean SqlSessionTemplate
<bean id="sqlSessionTemplate" class="xxx.xxx">
<construnct-arg rel="sqlSessionFactory" />
---
baseService->baseServiceImpl->baseDao
baseDao->BaseDaoImpl {
//在这里注入
@Resource
private SqlSessionTemplate sqlSessionTemplate;
//这里sqlSessionTemplate 为 null
//但是
static {
ClasspathXmlApplication....
SqlSessionTemplate sqlSession = (SqlSessionTemplate)appContext.getBean("sqlSessionTemplate");
//sqlSession 又是有值的
}
}
//这是什么问题,问题发生在什么地方
你的@Resource 没引错包吧
import javax.annotation.Resource;
没错
@Weiseditor: @Resource(name = "sqlSessionTemplate")
@让我发会呆: 这招也试过了
我来试了
@Resource
public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
this.sqlSessionTemplate = sqlSessionTemplate;
} //也是不行;
@Weiseditor: 启动的时候没报异常吗?只是null而已?
@让我发会呆: 没有
就是在 调用时,才会发生错误,提示 sqlSessionTemplate = null;
@Autowired
private XxxxService xxxxService;
xxxxService.queryList(xxxx) ; //
@Weiseditor: http://www.cnblogs.com/xrq730/p/5313412.html 这片博文你看看吧
我现在也看不出来那点有问题,你多测试测试吧,可能是哪些意想不到的地方
@让我发会呆:
这是一个非常标准的spring-data-jpa 集成 hibernate 的环境,现在就在这个环境加上mybatis支持;
很奇怪,没法注入成功;
而且像
class BaseDaoImpl<T, id implements Serialxxxx> extends SimpleJpaRepository<T, id>...
{
Class<T> clazz = getClassGenricType(this.getClass);
//这里的目的是为了获取 T 的类型(包+实际的Pojo类名);
//正常的 spring+springmvc环境下是获取正常的
//在这里也不行;
}
spring 的 componment-scan 包含是整个的包,如果这里的 dao包是 com.study.xxx.dao;
componet-scan 指向 com.study;
----
public static Class getClassGenricType(
final Class clazz, final int index) {
Type genType = clazz.getGenericSuperclass();
if (!(genType instanceof ParameterizedType)) {
return Object.class;
}
Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
if (index >= params.length || index < 0) {
return Object.class;
}
if (!(params[index] instanceof Class)) {
return Object.class;
}
return (Class) params[index];
}
////////
郁闷....
有点类似于这篇里的配置实现;
http://blog.csdn.net/z69183787/article/details/42528397
有谁对spring-data-jpa 环境比较熟悉的,为什么SqlSession[template] 无法在 BaseDaoImpo 实现;
即RepositoryImpl 实现;
没人么,都回家过春节了?
你这个是spring的web项目吗
是的
@Weiseditor: 具体的报错信息?
@西风古道: 没有报错,就是执行调用时,debug到 sqlSessionTemplate 对象为 null;
如:
List xxx = xxxService.queryList("statementId", Map);
debug 到 BaseDaoImpl 的
@Resource
protected SqlSessionTemplate sqlSessionTemplate;
method {
return sqlSessionTemplate.selectList(.....);
//这里的sqlSessionTemplate 为 null
}
@Weiseditor: 这样没人能帮你,如果工程不需要保密的话,把基础框架文件发出来看看
@西风古道: 单一个配置文件也看不出来;
applicatoncontext.xml:
<context:annotation-config />
<context:component-scan package="xxx.xxx 最顶层">
<include .....Service />
<exclude .....Controller>
</context:xxxx>
<bean id=transactionManager....>
<property name="entityManagerFactory", .ref..>
</bean>
<tx:annotation-drieven ....transaction-manager="transactionManager">
<tx:device .... transaction-manager="transactionManager">
<aop:config ....proxy-target-class="true">
....
</xxx>
<jps:repositories ....package="xxx.xxxx.**.dao">
----
</xxxx>
<bean id="entityManagerFactory" ....>
....VendorApdapter = hibernate....
</xxxx>
<bean id="sqlSessionFactory" ....>
dataSource
mapperLocations
plugins
dialect
....
</...>
<bean id="sqlSessionTemplate">
ref="sqlSessionFactory"
</bean>
////////////////////////////////////////////////
module-base-frame
interface BaseService<T, ID SerrialXXXX> {
BaseDao<T, ID> getBasDao();
.....
}
interface BaseSearchService extends BaseService
interface BaseCurdService extends BaseSearchService
impl
class BaseSearchServiceImpl implement BaseSearchService<T, ID>
class BaseCurdServiceImpl extends BaseSearchServiceImpl implements BaseCurdService...
-----
dao
BaseDao<T, ID implements Serivalxxxx> extends Jparepository<T, ID>, JpaSpecificationExecutor<T,ID>....
BaseDaoImpl <T,ID > extends SimpleJpaRepository implements BaseDao<T, ID>....
--------------------------