在service层注入mapper时报空指针的解决

在service层注入mapper时报空指针

今天又遇到一个极其刁钻的问题,废话不多说先上代码,测试单元

@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringBoot_Run.class)
@ContextConfiguration(locations = { "classpath:mybatis/mappers/RevMapper.xml" })
public class TestTransaction {
 @Autowired
 RevMapper remapper;
 @Test
 public void testInsert() {
  ReData data = new ReData();
  data.setReTime(new Date()).setSeID("fdewfcdsfdssdfdsf").setSendDate(new Date());
  remapper.insertObject(data);
 }

然后是service代码

public class ReService {

 @Autowired
 private RevMapper reMapper;
 private Socket socket=null;
 private BufferedReader br=null;
 private PrintWriter pw=null;
 public void recevice() {
  try {
    //创建服务器,并开放3081端口
      ServerSocket serv

RevMapper 类在测试的时候注入的好好地,为毛在service中就是空,一直空,空空空!!!

网上说的@mapperScan还有@mapper的注解我都加了一遍,这是为毛!!!!!

在博览全部大神的CSDN中,我发现大家都是抄过来抄过去,小弟佩服!!

解决!!!

因为我在启动类是这样写的

@SpringBootApplication(exclude=DataSourceAutoConfiguration.class)
@MapperScan(“cn.yungtay.mapper”)
public class SpringBoot_Run {
public static void main(String[] args) {
 SpringApplication.run(SpringBoot_Run.class, args);
 ReMapper re=new ReMapper();
 re.receive;
}
}

厉害的欧巴们不要喷,我第一反应是这样的!!

问题出来了,当一个对象是new出来的时候,他是不交给spring管理的,所以对象根本注入不进去,null是理所当然的

第二个问题,你想一个方法随着主启动类而启动,你可以这么干

@Service
public class ReService implements ApplicationRunner{
@Autowired
private RevMapper reMapper;
private Socket socket=null;
。。。。。。。。。。。。。
@Override
public void run(ApplicationArguments args) throws Exception {
 // TODO Auto-generated method stub
 你所需要启动的方法XXXXXXXX
}

感觉自己又智慧了一点!

springmvc普通类(非control,service)注入mapper为null

在给项目写一个定时器的时候,需要用到注入mapper进行数据库操作,用像serviceimpl里的注入

@Autowired
UserMapper usermapper;

无效,debug后发现usemapper为null,说明没有注入成功

后看到其他文章知道了new出来的thread不在spring的容器中,所以无法注入成功,获得bean

但是按照他的方法依旧为null,他的想法是主动注入bean,应该是对的。

不过我这个可能有点特殊,于是最后只能使用终极大法

ApplicationContext  ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
usermapper = (UserMapper) ac.getBean("UserMapper");
usermapper.deleteAllCookies();

不要忘了给mapper个名字,例

@Repository(value="UserMapper")
public interface UserMapper {
public List<User> selectByExample(@Param("username1")String username,@Param("password")String password);
public int insertToken(@Param("username1")String username,@Param("token")String token);
public String checkToken(String token);
public int logout(@Param("username1")String username,@Param("token")String token);
public int deleteAllCookies();
}

这个方法主观上感觉不是很好,先这样吧!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 关于mybatis mapper类注入失败的解决方案

    重新创建了一个项目,代码结构有所改变,结果在启动服务时,一直报如下错误 严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating b

  • 详解SpringBoot 多线程处理任务 无法@Autowired注入bean问题解决

    在多线程处理问题时,无法通过@Autowired注入bean,报空指针异常, 在线程中为了线程安全,是防注入的,如果要用到这个类,只能从bean工厂里拿个实例. 解决方法如下: 1.创建一个工具类代码: package com.hqgd.pms.common; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.spri

  • 浅谈@mapper引入不到引入的是@MapperScan的问题

    两种防水都可以,但是使用方式不同. @mapper需要mybatis和mybatis-spring的版本足够的高才可以. 不然导入不到@mapper. 补充知识:关于MyBatis的@Mapper和@MapperScan注解的一点思考 最近有空回顾mybatis,想起@Mapper注解一直没弄明白是干嘛的,代码上的注释写的很简单(Marker interface for MyBatis mappers),开发过程中也没用到,但网上各种资料偶有出现他的身影.问了度娘,都没讲清楚,我决定自己思考下这

  • mapper接口注入两种方式详解

    这篇文章主要介绍了mapper接口注入两种方式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.使用模板方式: <!--使用模板类实现mybatis --> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg name="sqlSessionFacto

  • spring+springmvc整合mabytis时mapper注入失败问题解决方法

    好久不搭架构,今天使用spring+springmvc整合mabytis的时候,坑爹的两个问题发生了. 花了一晚上解决这两个问题.现在将错误经验总结分享下,避免以后遇到坑继续往里跳. 1. 单元测试的时候,单元测试失败报错: A ServletContext is required to configure default servlet handling 十月 28, 2016 9:03:33 下午 org.springframework.context.support.GenericAppl

  • 在service层注入mapper时报空指针的解决

    在service层注入mapper时报空指针 今天又遇到一个极其刁钻的问题,废话不多说先上代码,测试单元 @RunWith(SpringRunner.class) @SpringBootTest(classes = SpringBoot_Run.class) @ContextConfiguration(locations = { "classpath:mybatis/mappers/RevMapper.xml" }) public class TestTransaction { @Au

  • springboot实现在工具类(util)中调用注入service层方法

    一.新建BeanUtil类 import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeansException; import org.springframework.beans.factory.DisposableBean; import org.springframework.context.ApplicationContext; import org.springframework.context.Applic

  • 解决mybatis 执行mapper的方法时报空指针问题

    mybatis报空指针 今天在test类掉用service层往数据库存数据的时候,控制台报空指针异常.找了很久找不到原因. 解决 配置文件,注解,依赖都是对的. 最后发现是因为在test类调用service时没有加@Resource注解,加上就好了.@Autowired 调用mybatis的xml中sql语句报空指针 svn下载项目后,启动项目后发现一个奇怪的问题:登陆系统时,需要验证用户密码等信息(使用mybatis的xml里语句调用oracle数据库,会报空指针问题),检查数据库配置,sql

  • Mybatis-Plus实体类注解方法与mapper层和service层的CRUD方法

    目录 1 注解 1.1 @TableName 1.2 @TableId 1.3 @TableField 1.4 @TableLogic 2 mapper层的CRUD方法 2.1 增(insert) 2.2 删(delete) 2.3 改(update) 2.4 查(select) 3 service层的CRUD方法 3.1 批量添加或者更新 3.2 查询表中总记录数 1 注解 1.1 @TableName   之前在入门案例中我们分析过:使用mp底层方法生成的SQL语句中,表名为mapper或者

  • 关于MVC的dao层、service层和controller层详解

    目录 MVC的dao层.service层和controller层 1.dao层 2.service层 3.controller层 4.view层 5.它们之间的关系 关于dao层/mapper层的一些笔记 1.BaseMapper 2.@mapper MVC的dao层.service层和controller层 1.dao层 dao层主要做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,dao层的设计首先是设计dao层的接口,然后在Spring的配置文件中定义此接口的实现类,然后就可以

  • 解决IDEA service层跳转实现类的快捷图标消失问题

    IDEA service层跳转实现类的快捷图标消失了,但别人IDEA同样的代码可以正常看到跳转图标..(暗示:这只是你的IDEA 编译器的bug) 可以观察到CVontroller注入该类对象时也会冒红线: Could not autowire. No beans of 'xxxx' type found 所以,根本原因就是IDEA找不到这个类的实现类! 当然,冒红线好解决(可以正常编译,只是IDEA bug了): 法一: 解决idea@Autowired报红线问题 法二: @Resource

  • 结合Service层讲解DAO层的异常处理操作

    domain:只是定义一个javabean. dao:对于数据库的操作,都放到dao层,也就是dao里面通常是对数据库的增.删.改.查等操作. service:完成相应的业务逻辑处理,调用dao层. (web)servlet:完成界面请求.对界面进行跳转等等.servlet调用service层. 例子: 在domain包中,新建Xxx.java:在dao包中,新建IXxxDAO.java:在impl包中,新建XxxDAOImpl类:在test包中,新建XxxDAOTest.java,在XxxDA

  • SpringBoot在自定义类中调用service层等Spring其他层操作

    背景: 做了一个TCP服务器来接入智能设备,然后需要将设备实时发送的定位等关键信息存储到数据库. 为了考虑将来可能对外提供rest接口,采用将TCP服务器集成到SpringBoot框架,当然,也是为了能最快利用mybatis框架实现数据访问,然后依次解决了如何启动,如何注销等各种问题,然后在TCP服务器消息处理时,需要写数据库,直接调用DAO层,编译报错. 改为调用Service层,编译正常,运行到调用的地方,报空指针异常,跟踪到异常位置,发现service为空,也就是按照之前controlle

  • Spring main方法中如何调用Dao层和Service层的方法

    目录 Spring main方法调用Dao层和Service层的方法 如何在普通类中直接访问service层或dao层 第一种方案 第二种方案 Spring main方法调用Dao层和Service层的方法 在web环境中,一般serviceImpl中的dao之类的数据库连接都由容器启动的时候创建好了,不会报错. 但是在main中,没有这个环境,所以需要获取环境: ApplicationContext ctx = new FileSystemXmlApplicationContext("src/

  • spring配置不扫描service层的原因解答

    目录 spring配置自动扫描原理介绍 自动扫描组件的使用 细节问题总结 spring配置不扫描service层原因 我将contoller给springmvc进行扫描,然后其余所有交给spring扫描 然后发现service层的EmployeeService并没有扫描到出现以下问题 Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type ‘spr

随机推荐