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;
        }
    
    
        
    }

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

  • 相关阅读:
    每日一篇文献:Robotic pick-and-place of novel objects in clutter with multi-affordance grasping and cross-domain image matching
    每日一篇文献:Intuitive Bare-Hand Teleoperation of a Robotic Manipulator Using Virtual Reality and Leap Motion
    每日一篇文献:Virtual Kinesthetic Teaching for Bimanual Telemanipulation
    HEBI Robotic Arm VR Teleoperation
    「iQuotient Case」AR device teleoperated robotic arm
    VR and Digital Twin Based Teleoperation of Robotic Arm
    HEBI Robotic Arm VR Teleoperation
    Human Robot Interaction
    Immersive Teleoperation Project
    机器人演示学习
  • 原文地址:https://www.cnblogs.com/jthr/p/13452534.html
Copyright © 2011-2022 走看看