staticメソッドSpringBoot @Autowiredは、注入されるか、または静的変数

注:静的メソッドは、実行時に注入されたか、コンパイル時に変数プロファイル値は、何の例外は存在しません、報告されますNULLポインタを定義します。

春は正式に、この方法を推奨していません。

 原理:

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

ソリューション

静的の非静的変数のsetterメソッドを介して注入春のセットを使用して、注入方法は、我々はあなたが情報あなたの静的変数の設定に取得することができるように変更することができます。

static修飾子を除去するために、メソッドのセットを取得した後@Autowired上記設定方法に追加します

コードをコピー
/ **阿里云OSS配置查询* / 
プライベート静的OSSConfMapper ossConfMapper。
/ **阿里云OSS图片上传* / 
プライベート静的UploadImgOSS uploadImgOSS。

公共OSSConfMapper getOssConfMapper(){ 
    ossConfMapperを返します。
} 
@Autowired 
公共ボイドsetOssConfMapper(OSSConfMapper ossConfMapper)を{ 
    UploadUtil.ossConfMapper = ossConfMapper。
} 
公共UploadImgOSS getUploadImgOSS(){ 
    uploadImgOSSを返します。
} 
@Autowired 
公共ボイド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つの実装が存在します

一つの方法:静的変数またはメソッドを宣言し、そして、対応する変数に注入し、最後のコメントPostConstructのINITで実施される方法を、対応します。

コードは以下の通りです

コードをコピー
輸入lombok.extern.slf4j.Slf4j; 
輸入org.springframework.beans.factory.annotation.Autowired; 
輸入org.springframework.beans.factory.annotation.Value; 
輸入org.springframework.mail.SimpleMailMessage; 
輸入org.springframework.mail.javamail.JavaMailSender。
輸入org.springframework.stereotype.Component; 
輸入tylin.paas.transfers.util.DateUtil; 

輸入javax.annotation.PostConstruct; 
輸入java.text.SimpleDateFormatの。
輸入java.util.Date; 
輸入java.util.LinkedList; 
輸入はjava.util.List; 

SLF4J @ 
@Component 
パブリッククラスのErrorHandler { 


    @value( "$ {customer.mail.bankMail.sender}")
    プライベート文字列configSender。

    プライベート静的文字列の送信者。

    @value( "$ {customer.mail.bankMail.receiver}")
    プライベート文字列configReceiver。

    プライベート静的文字列の受信機。

    パブリック静的のErrorHandlerのErrorHandler。

    @Autowired 
    JavaMailSender autoJavaMailSender。

    プライベート静的JavaMailSender javaMailSender。


    @PostConstruct 
    公共ボイドのinit(){ 
        差出人= configSenderと、
        受信機= configReceiver。
        javaMailSender = autoJavaMailSender。
        ErrorHandlerがこの=。
    } 


    パブリック静的ボイドSENDMAIL(){ 
        
        SimpleMailMessageメッセージ=新しいSimpleMailMessage()。
        message.setFrom(送信者)。
        message.setTo(receiver.split( ";")); 
        message.setSubject( "あなたの件名"); 
        をmessage.setText( "あなたのコンテンツのテキスト"); 

        試み{ 
            javaMailSender.send(メッセージ); 
            log.info(「送信メッセージは";!)が正常であった
        }キャッチ(例外E){ 
            log.error("メッセージを送信するときに例外がE、」発生);! 
        } 
        
    } 

}
コードをコピー

 

第二の方法:

セットの中に注入すると

コードをコピー
輸入lombok.extern.slf4j.Slf4j; 
輸入org.junit.Test; 
輸入org.junit.runner.RunWith; 
輸入org.springframework.beans.factory.annotation.Autowired; 
輸入org.springframework.beans.factory.annotation.Value; 
輸入org.springframework.boot.test.context.SpringBootTest; 
輸入org.springframework.mail.SimpleMailMessage; 
輸入org.springframework.mail.javamail.JavaMailSender。
輸入org.springframework.stereotype.Component; 
輸入org.springframework.test.context.junit4.SpringRunner; 
輸入org.tylin.TylinERPApplication。

輸入java.text.SimpleDateFormatの。
輸入java.util.Date; 


@ SLF4J  
@Component
@SpringBootTest(クラス= TylinERPApplication.class)
@RunWith(SpringRunner.class)
publicクラスMailAutoSendTest { 
    プライベート静的文字列の送信者。

    //可以不要
    の公共文字列getSender(){ 
        戻り、送信者、
    } 
    @value( "$ {customer.mail.bankMail.sender}")
    公共ボイドsetSender(文字列の送信者){ 
        MailAutoSendTest.sender =差出人。
    } 

    プライベート静的文字列の受信機。

    //可以不要
    公共ストリングgetReceiver(){ 
        戻り受信機。
    } 

    @value( "$ {customer.mail.bankMail.receiver}")
    プライベート静的JavaMailSender javaMailSender。 
    公共ボイドsetReceiver(文字列の受信機){
        MailAutoSendTest.receiver =受信機。
    } 



    公共JavaMailSender getJavaMailSender(){ 
        戻りjavaMailSender。
    } 

    @Autowired 
    公共ボイドsetJavaMailSender(JavaMailSender javaMailSender)を{ 
        MailAutoSendTest.javaMailSender = javaMailSender。
    } 


    @Test 
    公共ボイドSENDMAIL(){ 
        SimpleMailMessageメッセージ=新しいSimpleMailMessage()。
        message.setFrom(送信者)。
        log.info(送信者)。
        log.info(受信機)
        message.setTo(receiver.split( ";")); 
        message.setSubject( "XXXX"); 

        日付日付=新しいDate();
        SimpleDateFormat DATEFORMAT =新しいてSimpleDateFormat( "YYYY-MM-DD HH:MM:SS")。

        message.setText( "XXXX" + DATEFORMAT。

        {試し
            javaMailSender.send(メッセージ); 
            log.infoは( "簡単なメッセージが送られました。"); 
        }キャッチ(例外E){ 
            log.error(、E "シンプルメールを送信中に例外が発生しました!"); 
        } 
    } 

}
コードをコピー

 

 
カテゴリー:  Javaの 、  SpringBoot

注:静的メソッドは、実行時に注入されたか、コンパイル時に変数プロファイル値は、何の例外は存在しません、報告されますNULLポインタを定義します。

春は正式に、この方法を推奨していません。

 原理:

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

ソリューション

静的の非静的変数のsetterメソッドを介して注入春のセットを使用して、注入方法は、我々はあなたが情報あなたの静的変数の設定に取得することができるように変更することができます。

static修飾子を除去するために、メソッドのセットを取得した後@Autowired上記設定方法に追加します

コードをコピー
/ **阿里云OSS配置查询* / 
プライベート静的OSSConfMapper ossConfMapper。
/ **阿里云OSS图片上传* / 
プライベート静的UploadImgOSS uploadImgOSS。

公共OSSConfMapper getOssConfMapper(){ 
    ossConfMapperを返します。
} 
@Autowired 
公共ボイドsetOssConfMapper(OSSConfMapper ossConfMapper)を{ 
    UploadUtil.ossConfMapper = ossConfMapper。
} 
公共UploadImgOSS getUploadImgOSS(){ 
    uploadImgOSSを返します。
} 
@Autowired 
公共ボイド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つの実装が存在します

一つの方法:静的変数またはメソッドを宣言し、そして、対応する変数に注入し、最後のコメントPostConstructのINITで実施される方法を、対応します。

コードは以下の通りです

コードをコピー
輸入lombok.extern.slf4j.Slf4j; 
輸入org.springframework.beans.factory.annotation.Autowired; 
輸入org.springframework.beans.factory.annotation.Value; 
輸入org.springframework.mail.SimpleMailMessage; 
輸入org.springframework.mail.javamail.JavaMailSender。
輸入org.springframework.stereotype.Component; 
輸入tylin.paas.transfers.util.DateUtil; 

輸入javax.annotation.PostConstruct; 
輸入java.text.SimpleDateFormatの。
輸入java.util.Date; 
輸入java.util.LinkedList; 
輸入はjava.util.List; 

SLF4J @ 
@Component 
パブリッククラスのErrorHandler { 


    @value( "$ {customer.mail.bankMail.sender}")
    プライベート文字列configSender。

    プライベート静的文字列の送信者。

    @value( "$ {customer.mail.bankMail.receiver}")
    プライベート文字列configReceiver。

    プライベート静的文字列の受信機。

    パブリック静的のErrorHandlerのErrorHandler。

    @Autowired 
    JavaMailSender autoJavaMailSender。

    プライベート静的JavaMailSender javaMailSender。


    @PostConstruct 
    公共ボイドのinit(){ 
        差出人= configSenderと、
        受信機= configReceiver。
        javaMailSender = autoJavaMailSender。
        ErrorHandlerがこの=。
    } 


    パブリック静的ボイドSENDMAIL(){ 
        
        SimpleMailMessageメッセージ=新しいSimpleMailMessage()。
        message.setFrom(送信者)。
        message.setTo(receiver.split( ";")); 
        message.setSubject( "あなたの件名"); 
        をmessage.setText( "あなたのコンテンツのテキスト"); 

        試み{ 
            javaMailSender.send(メッセージ); 
            log.info(「送信メッセージは";!)が正常であった
        }キャッチ(例外E){ 
            log.error("メッセージを送信するときに例外がE、」発生);! 
        } 
        
    } 

}
コードをコピー

 

第二の方法:

セットの中に注入すると

コードをコピー
輸入lombok.extern.slf4j.Slf4j; 
輸入org.junit.Test; 
輸入org.junit.runner.RunWith; 
輸入org.springframework.beans.factory.annotation.Autowired; 
輸入org.springframework.beans.factory.annotation.Value; 
輸入org.springframework.boot.test.context.SpringBootTest; 
輸入org.springframework.mail.SimpleMailMessage; 
輸入org.springframework.mail.javamail.JavaMailSender。
輸入org.springframework.stereotype.Component; 
輸入org.springframework.test.context.junit4.SpringRunner; 
輸入org.tylin.TylinERPApplication。

輸入java.text.SimpleDateFormatの。
輸入java.util.Date; 


@ SLF4J  
@Component
@SpringBootTest(クラス= TylinERPApplication.class)
@RunWith(SpringRunner.class)
publicクラスMailAutoSendTest { 
    プライベート静的文字列の送信者。

    //可以不要
    の公共文字列getSender(){ 
        戻り、送信者、
    } 
    @value( "$ {customer.mail.bankMail.sender}")
    公共ボイドsetSender(文字列の送信者){ 
        MailAutoSendTest.sender =差出人。
    } 

    プライベート静的文字列の受信機。

    //可以不要
    公共ストリングgetReceiver(){ 
        戻り受信機。
    } 

    @value( "$ {customer.mail.bankMail.receiver}") 
    公共ボイドsetReceiver(文字列の受信機){
        MailAutoSendTest.receiver =受信機。
    } 


    プライベート静的JavaMailSender javaMailSender。

    公共JavaMailSender getJavaMailSender(){ 
        戻りjavaMailSender。
    } 

    @Autowired 
    公共ボイドsetJavaMailSender(JavaMailSender javaMailSender)を{ 
        MailAutoSendTest.javaMailSender = javaMailSender。
    } 


    @Test 
    公共ボイドSENDMAIL(){ 
        SimpleMailMessageメッセージ=新しいSimpleMailMessage()。
        message.setFrom(送信者)。
        log.info(送信者)。
        log.info(受信機)
        message.setTo(receiver.split( ";")); 
        message.setSubject( "XXXX"); 

        日付日付=新しいDate();
        SimpleDateFormat DATEFORMAT =新しいてSimpleDateFormat( "YYYY-MM-DD HH:MM:SS")。

        message.setText( "XXXX" + DATEFORMAT。
 
        試み{ 
            javaMailSender.send(メッセージ); 
            log.info( "単純なメッセージが送信されました。"); 
        }キャッチ(例外E){ 
            ログ.ERROR( "簡単なメールの送信中に例外が発生した!"、E); 
        } 
    } 

}
コードをコピー

 

おすすめ

転載: www.cnblogs.com/kelelipeng/p/12099382.html