注:staticを使用して、インジェクションメソッドまたは構成ファイルの値変数を定義します。コンパイル中に例外は発生せず、実行時にnullポインターが報告されます。
春の関係者はこの方法を推奨していません。
原理:
https://www.cnblogs.com/chenfeng1122/p/6270217.html
解決
Springのsetinjectionメソッドを使用して、非静的セッターメソッドを介して静的変数を注入します。静的変数が構成した情報を取得できるように変更できます。
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
試した後、達成するための2つの方法があります
方法1:静的変数またはメソッドを宣言し、それに応じて対応する変数とメソッドを挿入します。最後に、PostConstructアノテーションがinitに実装されます。
コードは以下のように表示されます
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 :(プロテストが実行可能)
セット中に注入
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;
}
}