Spring Boot @Autowired fügt statische Variablen oder statische Methoden ein

Hinweis: Verwenden Sie static, um eine Injektionsmethode oder eine Wertvariable für die Konfigurationsdatei zu definieren. Während der Kompilierung tritt keine Ausnahme auf, und zur Laufzeit wird ein Nullzeiger gemeldet.

Frühlingsbeamte empfehlen diese Methode nicht.

 Prinzip:

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

Lösung

Verwenden Sie die Set-Injection-Methode von Spring, um statische Variablen über nicht statische Setter-Methoden zu injizieren. Wir können sie ändern, damit die statischen Variablen die von Ihnen konfigurierten Informationen erhalten.

Entfernen Sie den statischen Modifikator der Methoden get und set und fügen Sie der set-Methode @Autowired hinzu.

/** 阿里云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;
}

Referenzdokumente

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

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

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

 

Nach dem Versuch gibt es zwei Möglichkeiten, dies zu erreichen

Methode 1: Deklarieren Sie eine statische Variable oder Methode und fügen Sie dann eine entsprechende Variable und Methode entsprechend ein. Schließlich wird die PostConstruct-Annotation in init implementiert.

Code wie unten anzeigen

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

}

 

Methode 2: (Pro-Test möglich)

Während des Abbindens injizieren

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

}

Pro Testbeispiel:

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

 

Ich denke du magst

Origin blog.csdn.net/londa/article/details/109219931
Empfohlen
Rangfolge