Static method SpringBoot @Autowired injected or static variables

Note: The static method to define an injected or variable profile values, there will be no exceptions when you compile, will be reported null pointer at runtime.

Spring officially does not recommend this method.

 principle:

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

Solution

Injection method using the set of spring, injected through a static non-static variable setter methods, we can change so that you can get to a static variable configuration of the information you.

To get, set of methods to remove static modifier and then added to the set method above @Autowired

Copy the code
/ ** * Ali cloud OSS configure the query /
private static OSSConfMapper ossConfMapper;
/ ** * Ali cloud OSS picture upload /
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;
}
Copy the code

Reference Documents

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

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

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

 

After attempts, there are two implementations

One way: declare a static variable or method, and then injected into a corresponding variable and corresponding method, implemented at the last comment PostConstruct init.

code show as below

Copy the code
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;
java.util.LinkedList import;
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 ( "send mail success!");
        } catch (Exception e) {
            log.error ( "exception occurs when sending messages!", e);
        }
        
    }

}
Copy the code

 

Second way:

When injected into the set

Copy the code
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;

    //Can not
    public  String getSender() {
        return sender;
    }
    @Value("${customer.mail.bankMail.sender}")
    Void public setSender (String sender) {
        MailAutoSendTest.sender = runs;
    }

    private static String receiver;

    //Can not
    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 ( "simple message has been sent.");
        } catch (Exception e) {
            log.error ( "exception occurs while sending a Simple Mail!", e);
        }
    }

}
Copy the code

 

 
Category:  the Java SpringBoot

Note: The static method to define an injected or variable profile values, there will be no exceptions when you compile, will be reported null pointer at runtime.

Spring officially does not recommend this method.

 principle:

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

Solution

Injection method using the set of spring, injected through a static non-static variable setter methods, we can change so that you can get to a static variable configuration of the information you.

To get, set of methods to remove static modifier and then added to the set method above @Autowired

Copy the code
/ ** * Ali cloud OSS configure the query /
private static OSSConfMapper ossConfMapper;
/ ** * Ali cloud OSS picture upload /
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;
}
Copy the code

Reference Documents

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

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

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

 

After attempts, there are two implementations

One way: declare a static variable or method, and then injected into a corresponding variable and corresponding method, implemented at the last comment PostConstruct init.

code show as below

Copy the code
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;
java.util.LinkedList import;
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 ( "send mail success!");
        } catch (Exception e) {
            log.error ( "exception occurs when sending messages!", e);
        }
        
    }

}
Copy the code

 

Second way:

When injected into the set

Copy the code
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;

    //Can not
    public  String getSender() {
        return sender;
    }
    @Value("${customer.mail.bankMail.sender}")
    Void public setSender (String sender) {
        MailAutoSendTest.sender = runs;
    }

    private static String receiver;

    //Can not
    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 ( "simple message has been sent.");
        } catch (Exception e) {
            log.error ( "exception occurs while sending a Simple Mail!", e);
        }
    }

}
Copy the code

 

Guess you like

Origin www.cnblogs.com/kelelipeng/p/12099382.html