Spring Boot @Autowired внедряет статические переменные или статические методы

Примечание. Используйте static для определения метода внедрения или переменной значения файла конфигурации, во время компиляции не будет исключений, а во время выполнения будет сообщаться нулевой указатель.

Весенние чиновники не рекомендуют этот метод.

 принцип:

https://www.cnblogs.com/chenfeng1122/p/6270217.html

Решение

Используйте метод вставки набора Spring для вставки статических переменных через нестатические методы установки.Мы можем изменить его, чтобы статические переменные могли получать информацию, которую вы настроили.

Удалите модификатор static методов get и set, а затем добавьте @Autowired к методу set.

/** 阿里云OSS配置查询 */
private static OSSConfMapper ossConfMapper;
/** 阿里云OSS图片上传 */
private static UploadImgOSS uploadImgOSS;

public  OSSConfMapper getOssConfMapper() {
    return ossConfMapper;
}
@Autowired
public  void setOssConfMapper(OSSConfMapper ossConfMapper) {
    UploadUtil.ossConfMapper = ossConfMapper;
}
public  UploadImgOSS getUploadImgOSS() {
    return uploadImgOSS;
}
@Autowired
public  void setUploadImgOSS(UploadImgOSS uploadImgOSS) {
    UploadUtil.uploadImgOSS = uploadImgOSS;
}

Справочные документы

https://blog.csdn.net/kongrun12/article/details/76246369

https://blog.csdn.net/zxl646801924/article/details/81738231

https://blog.csdn.net/u014079773/article/details/66973830

 

Попробовав, есть два способа добиться

Метод 1. Объявите статическую переменную или метод, а затем вставьте соответствующую переменную и метод соответственно.Наконец, в init реализована аннотация PostConstruct.

код показать, как показано ниже

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Component;
import tylin.paas.transfers.util.DateUtil;

import javax.annotation.PostConstruct;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;

@Slf4j
@Component
public class ErrorHandler {


    @Value("${customer.mail.bankMail.sender}")
    private String configSender;

    private static String sender;

    @Value("${customer.mail.bankMail.receiver}")
    private String configReceiver;

    private static String receiver;

    public static ErrorHandler errorHandler;

    @Autowired
    JavaMailSender autoJavaMailSender;

    private static JavaMailSender javaMailSender;


    @PostConstruct
    public void init() {
        sender = configSender;
        receiver = configReceiver;
        javaMailSender = autoJavaMailSender;
        errorHandler = this;
    }


    public static void sendMail() {
        
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(sender);
        message.setTo(receiver.split(";"));
        message.setSubject("your subject");
        message.setText("your content text");

        try {
            javaMailSender.send(message);
            log.info("发送邮件成功!");
        } catch (Exception e) {
            log.error("发送邮件时发生异常!", e);
        }
        
    }

}

 

Метод 2: (Возможен Pro-тест)

Ввести во время набора

import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Component;
import org.springframework.test.context.junit4.SpringRunner;
import org.tylin.TylinERPApplication;

import java.text.SimpleDateFormat;
import java.util.Date;


@Slf4j
@Component
@SpringBootTest(classes = TylinERPApplication.class)
@RunWith(SpringRunner.class)
public class MailAutoSendTest {
    private static String sender;

    //可以不要
    public  String getSender() {
        return sender;
    }
    @Value("${customer.mail.bankMail.sender}")
    public void setSender(String sender) {
        MailAutoSendTest.sender = sender;
    }

    private static String receiver;

    //可以不要
    public  String getReceiver() {
        return receiver;
    }

    @Value("${customer.mail.bankMail.receiver}")
    public void setReceiver(String receiver) {
        MailAutoSendTest.receiver = receiver;
    }


    private static JavaMailSender javaMailSender;

    public JavaMailSender getJavaMailSender(){
        return javaMailSender;
    }

    @Autowired
    public void setJavaMailSender(JavaMailSender javaMailSender){
        MailAutoSendTest.javaMailSender = javaMailSender;
    }


    @Test
    public void sendMail() {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(sender);
        log.info(sender);
        log.info(receiver);
        message.setTo(receiver.split(";"));
        message.setSubject("xxxx");

        Date date = new Date();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd  HH:mm:ss");

        message.setText("xxxx"+dateFormat.format(date));

        try {
            javaMailSender.send(message);
            log.info("简单邮件已经发送。");
        } catch (Exception e) {
            log.error("发送简单邮件时发生异常!", e);
        }
    }

}

Пример профессионального теста:

@Component
public class NetEleUtil {

    private static WirelessResourceProperties resProps;

    public WirelessResourceProperties getResProps() {
        return resProps;
    }

//    @Autowired
    public void setResProps(WirelessResourceProperties resProps) {
        NetEleUtil.resProps = resProps;
    }

    /**
     * 根据网元英文简称获取网元中文名称
     *
     * @param obj
     * @return java.util.Map<java.lang.String,java.lang.Object>
     * @author liangzhaolin
     * @date 2020/10/22 11:00
     */
    public static String getNetEleTableCnName(String netEleType) {
        Map<String, String> tableMap = resProps.getTableCnName();
        String netEleTableCnName = tableMap.get(netEleType);

        return netEleTableCnName;
    }
}

 

рекомендация

отblog.csdn.net/londa/article/details/109219931