首页 新闻 会员 周边

Spring 注解失败问题 @Resource null

0
悬赏园豆:50 [待解决问题]

项目:

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 又是有值的

  }

}

//这是什么问题,问题发生在什么地方

Weiseditor的主页 Weiseditor | 初学一级 | 园豆:74
提问于:2017-01-13 11:48
< >
分享
所有回答(2)
0

你的@Resource 没引错包吧

让我发会呆 | 园豆:2929 (老鸟四级) | 2017-01-13 11:57

import javax.annotation.Resource;

没错

支持(0) 反对(0) Weiseditor | 园豆:74 (初学一级) | 2017-01-13 13:32

@Weiseditor: @Resource(name = "sqlSessionTemplate")

支持(0) 反对(0) 让我发会呆 | 园豆:2929 (老鸟四级) | 2017-01-13 13:56

@让我发会呆: 这招也试过了

我来试了

@Resource

public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {

  this.sqlSessionTemplate = sqlSessionTemplate;

} //也是不行;

支持(0) 反对(0) Weiseditor | 园豆:74 (初学一级) | 2017-01-13 14:00

@Weiseditor: 启动的时候没报异常吗?只是null而已?

支持(0) 反对(0) 让我发会呆 | 园豆:2929 (老鸟四级) | 2017-01-13 14:01

@让我发会呆: 没有

就是在 调用时,才会发生错误,提示 sqlSessionTemplate = null;

@Autowired

private XxxxService xxxxService;

xxxxService.queryList(xxxx) ; //

支持(0) 反对(0) Weiseditor | 园豆:74 (初学一级) | 2017-01-13 14:05

@Weiseditor: http://www.cnblogs.com/xrq730/p/5313412.html 这片博文你看看吧

我现在也看不出来那点有问题,你多测试测试吧,可能是哪些意想不到的地方

支持(0) 反对(0) 让我发会呆 | 园豆:2929 (老鸟四级) | 2017-01-13 14:14

@让我发会呆: 

这是一个非常标准的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];
}

////////

郁闷....

支持(0) 反对(0) Weiseditor | 园豆:74 (初学一级) | 2017-01-13 14:22

有点类似于这篇里的配置实现;

http://blog.csdn.net/z69183787/article/details/42528397

支持(0) 反对(0) Weiseditor | 园豆:74 (初学一级) | 2017-01-13 14:24

有谁对spring-data-jpa 环境比较熟悉的,为什么SqlSession[template] 无法在 BaseDaoImpo 实现;

即RepositoryImpl 实现;

支持(0) 反对(0) Weiseditor | 园豆:74 (初学一级) | 2017-01-16 11:30

没人么,都回家过春节了?

支持(0) 反对(0) Weiseditor | 园豆:74 (初学一级) | 2017-01-17 15:36
0

你这个是spring的web项目吗

西风古道 | 园豆:214 (菜鸟二级) | 2017-01-17 16:55

是的

支持(0) 反对(0) Weiseditor | 园豆:74 (初学一级) | 2017-01-18 08:59

@Weiseditor: 具体的报错信息?

支持(0) 反对(0) 西风古道 | 园豆:214 (菜鸟二级) | 2017-01-18 09:21

@西风古道: 没有报错,就是执行调用时,debug到 sqlSessionTemplate 对象为 null;

如:

List xxx = xxxService.queryList("statementId", Map);

debug 到 BaseDaoImpl 的

@Resource

protected SqlSessionTemplate sqlSessionTemplate;

method {

      return sqlSessionTemplate.selectList(.....);

  //这里的sqlSessionTemplate 为 null

}

支持(0) 反对(0) Weiseditor | 园豆:74 (初学一级) | 2017-01-18 09:26

@Weiseditor: 这样没人能帮你,如果工程不需要保密的话,把基础框架文件发出来看看

支持(0) 反对(0) 西风古道 | 园豆:214 (菜鸟二级) | 2017-01-18 09:30

@西风古道: 单一个配置文件也看不出来;

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>....

--------------------------

 

支持(0) 反对(0) Weiseditor | 园豆:74 (初学一级) | 2017-01-18 13:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册