常见的是Controller层调用service层,调用mapper层。但是因为一些业务需求,可能需要在普通类中直接调用service层或者mapper层接口,这时候如果使用普通类直接调用service层或者mapper层都会报null,就算在对应的service或者mapper层添加注解@Component加入Spring容器管理也不行,原因在于调用的service或mapper层是非静态的,就算你设置为静态的也是错误的。

下面方法经过测试,是可以使用的

@Component 
public class TestUtils {
    
    @Autowired
    private MyMapper myMapper;
    
    public static TestUtils testUtils;
    
    @PostConstruct
    public void init() {    
        testUtils = this;
    } 
     
    public static void test(int id){
        //直接掉mapper接口是没问题的,不会报空指针
        testUtils.itemMapper.queryUserById(id);
    }
}

 

还有一种方法针对解决service层调用问题,可以直接通过new一个srvice层实现类解决,但是这种方法针对mapper这种接口的时候就不太友好了,推荐上述解决方案。

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐