zoukankan      html  css  js  c++  java
  • spring中Utils工具类注入问题

    使用工具类的时候,我们想在static修饰的方法中,通过注入来调用其他方法,这里就存在问题。

      第一:普通工具类是不在spring的管理下,spring不会依赖注入

      第二:即便使用@Autowired完成注入,由于工具类是静态方法,只能访问静态变量和方法。但是spring不能直接注入static的。

        如:

    @Autowired
    private static JcustomerMapper jcustomermapper;

      这样直接注入会是null。为什么spring不能直接注入static变量

         static成员与类相关,其中static变量及初始化块会在类加载器第一次加载类时初始化和执行。而spring管理的是对象实例的创建和属性注入

        (初始化了static变量,也就是给该static变量分配内存了)

    解决这两个问题

      第一:在根据类上加入@Component,使它在spring的管理下,由spring完成该类的初始化和注入

      第二:  1.我们可以构建一个当前根据类对象的静态变量 private static JcustomerUtils jcustomerutils;

           2.并且在初始化的时候把当前工具类对象赋值给这个变量   

    @PostConstruct  //该注解的方法在构造函数执行后执行
     public void init() {
     jcustomerutils = this; 
    } 

            3.此时我们注入其它对象

     @Autowired
        private  JcustomerMapper jcustomermapper;

            4.通过jcustomerutils.jcustomermapper就可以调用jcustomermapper的变量和方法了

     下面是具体的代码

    package com.jinsenianhua.user.utils;
    
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import javax.annotation.PostConstruct;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    
    import com.jinsenianhua.common.utils.IDcardUtils;
    import com.jinsenianhua.common.utils.MyPhoneUtils;
    import com.jinsenianhua.common.utils.MyresultUtils;
    import com.jinsenianhua.user.dao.JcustomerMapper;
    import com.jinsenianhua.user.pojo.Jcustomer;
    import com.jinsenianhua.user.pojo.JcustomerExample;
    import com.jinsenianhua.user.pojo.JcustomerExample.Criteria;
    
    @Component  //声明组件 - 让spring初始化的时候在spring上下文创建bean并完成注入
    public class JcustomerUtils {
        
        @Autowired
        private  JcustomerMapper jcustomermapper;
        
        
        private static JcustomerUtils jcustomerutils;
        
        @PostConstruct
        public void init() {      
            jcustomerutils = this;  
        }  
        
        public static List<Jcustomer> findJcustomerByPhone(String phone) {
            JcustomerExample example = new JcustomerExample();
            Criteria createCriteria = example.createCriteria();
            createCriteria.andPhoneEqualTo(phone);
            List<Jcustomer> selectByExample = jcustomerutils.jcustomermapper.selectByExample(example );
            return selectByExample;
        }
    
    
        
    }

      如上代码,可以完成注入。

  • 相关阅读:
    Entity Framework 实体框架的形成之旅--界面操作的几个典型的处理(8)
    C#开发微信门户及应用(28)--微信“摇一摇·周边”功能的使用和接口的实现
    Winform开发框架中实现同时兼容多种数据库类型处理
    Entity Framework 实体框架的形成之旅--数据传输模型DTO和实体模型Entity的分离与联合
    C#开发微信门户及应用(27)-公众号模板消息管理
    知识图谱 知识计算--- 本体推理 规则推理 路径计算 社区计算 相似图计算 链接预测 不一致检测
    动态规划算法模板和demo
    dga model train and test code
    基于图的异常检测(三):GraphRAD
    InterpretML 微软可解释性机器学习包
  • 原文地址:https://www.cnblogs.com/jthr/p/13452534.html
Copyright © 2011-2022 走看看