欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

springboot如何解決非controller類引用service的問題

 更新時間:2022年02月24日 14:58:20   作者:xiexiangyan  
這篇文章主要介紹了springboot如何解決非controller類引用service的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

解決非controller類引用service問題

項目中遇到需要采用socket通信機制,由于這個方法沒有寫在控制類里面,調(diào)用service類的時候老是報java.lang.NullPointerException錯誤

解決辦法

1、首先將@Autowired注解注入Service或者Mapper接口

?@Autowired
? ? PaUserService pauserService;

2、設置靜態(tài)變量

private static DomSocketUtils domSocketUtils;

3、初始化靜態(tài)變量,注意要添加 @PostConstruct注解

?@PostConstruct ?//用于在依賴關系注入完成之后需要執(zhí)行的方法上,以執(zhí)行任何初始化
? ? public void init() {
? ? ? ? domSocketUtils = this;
? ? }

總的代碼如下

@Component()
public class DomSocketUtils extends ServerSocket {
    @Autowired
    PaUserService pauserService;
    private static final int SERVER_PORT = 8875; // 服務端端口
    private static DomSocketUtils domSocketUtils;
    private ServerSocket server;
    //    @PostConstruct
    public DomSocketUtils() throws Exception {
//        server=new ServerSocket(SERVER_PORT);
//        load();
    }
    @PostConstruct  //用于在依賴關系注入完成之后需要執(zhí)行的方法上,以執(zhí)行任何初始化
    public void init() {
        domSocketUtils = this;
    }
    /**
     * 使用線程處理每個客戶端傳輸?shù)奈募?
     * @throws Exception
     */
    @Async("taskExexutor")
    public void load() throws Exception {
        server=new ServerSocket(SERVER_PORT);
        while (true) {
            System.out.println("-----------等待連接-------- ");
            Socket socket = server.accept();//接收連接服務端的客戶端對象
            System.out.println("ip" + socket.getInetAddress() + "已連接");
            new Thread(new Transfer(socket),"thread1").start();// 每接收到一個Socket就建立一個新的線程來處理它
            System.out.println(Thread.currentThread().getName());
        }
    }
    /**
     * 處理客戶端傳輸過來的文件線程類
     */
    class Transfer implements Runnable {
        private Socket socket;
        private DataInputStream dis;
        private FileOutputStream fos;
        public Transfer(Socket socket) {
            this.socket = socket;
        }
        @Override
        public void run() {
            try {
                dis = new DataInputStream(socket.getInputStream());
                // 文件名和長度
                String imageurl="";
                String fileName = dis.readUTF(); //獲取文件名
                long fileLength = dis.readLong();
                File directory = new File("E://"); //創(chuàng)建絕對路徑
                if(!directory.exists()) {
                    directory.mkdir();
                }
                File file = new File("E://");
                fos = new FileOutputStream(basepath);//存入文件
                // 開始接收文件
                byte[] bytes = new byte[1024];
                int length = 0;
                while((length = dis.read(bytes, 0, bytes.length)) != -1) {
                    fos.write(bytes, 0, length);
                    fos.flush();
                }
                File file1 = new File(basepath);//讀取文件
                DicomInputStream dis = new DicomInputStream(file1);
                Attributes fmi = dis.readFileMetaInformation();
                Attributes attrs = dis.readDataset(-1, -1);
                PaUser  role = domSocketUtils.pauserService.getpaUserRole1(attrs.getString(Tag.PatientID));//驗證是否存在該病人
                System.out.println("======== 文件接收成功 [File Name:" + fileName + "] ");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    if(fos != null)
                        fos.close();
                    if(dis != null)
                        dis.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }

注:socket文件接收的是dicom文件

在非controller層如何調(diào)用service層服務

通過init方法進行服務注入

@Slf4j
@Component
public class ServerIOT {
? ? @Resource
? ? private EasybandDateService easybandDateService;
? ? @PostConstruct //通過@PostConstruct實現(xiàn)初始化bean之前進行的操作
? ? public void init() {
? ? ? ? serverIOT = this;
? ? ? ? serverIOT.easybandDateService = this.easybandDateService;
? ? ? ? // 初使化時將已靜態(tài)化的easybandDateService實例化
? ? }
}

調(diào)用方法形式如下

在前面添加當前類就可以了

boolean save = serverIOT.easybandDateService.save(easybandDate);

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • SpringBoot在項目停止(服務停止/關閉退出)之后執(zhí)行的方法

    SpringBoot在項目停止(服務停止/關閉退出)之后執(zhí)行的方法

    這篇文章主要給大家介紹了SpringBoot在項目停止(服務停止/關閉退出)之后執(zhí)行的兩種方法,實現(xiàn)DisposableBean接口和使用@PreDestroy注解,文中有詳細的代碼講解,具有一定的參考價值,需要的朋友可以參考下
    2023-12-12
  • 詳解Java線程編程中的volatile關鍵字的作用

    詳解Java線程編程中的volatile關鍵字的作用

    這篇文章主要介紹了Java線程編程中的volatile關鍵字的作用,針對其禁止進行指令重排序和讀寫內(nèi)存方面著重講解,需要的朋友可以參考下
    2015-12-12
  • Springboot 如何指定獲取出 yml文件里面的配置值

    Springboot 如何指定獲取出 yml文件里面的配置值

    這篇文章主要介紹了Springboot 如何指定獲取出 yml文件里面的配置值操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • MyBatis多表關聯(lián)查詢的實現(xiàn)示例

    MyBatis多表關聯(lián)查詢的實現(xiàn)示例

    本文主要介紹了MyBatis多表關聯(lián)查詢的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • Struts2學習手冊之文件上傳基礎教程

    Struts2學習手冊之文件上傳基礎教程

    Struts2提供的文件上傳下載機制十分簡便,使得我們寫很少的代碼,下面這篇文章主要給大家介紹了關于Struts2學習手冊之文件上傳的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2018-05-05
  • Java Web三層架構的配置詳解

    Java Web三層架構的配置詳解

    這篇文章主要介紹了Java Web三層架構的配置方法,需要的朋友可以參考下
    2014-10-10
  • Java數(shù)據(jù)結構之簡單鏈表的定義與實現(xiàn)方法示例

    Java數(shù)據(jù)結構之簡單鏈表的定義與實現(xiàn)方法示例

    這篇文章主要介紹了Java數(shù)據(jù)結構之簡單鏈表的定義與實現(xiàn)方法,簡單描述了鏈接的概念、原理,并結合實例形式分析了java定義與使用鏈表的相關步驟與操作技巧,需要的朋友可以參考下
    2017-10-10
  • Java的Struts框架中<results>標簽的使用方法

    Java的Struts框架中<results>標簽的使用方法

    這篇文章主要介紹了Java的Struts框架中<results>標簽的使用方法,Struts框架是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下
    2015-11-11
  • SpringMVC的源碼解析

    SpringMVC的源碼解析

    本文主要介紹了SpringMVC的源碼解析。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • 詳解Java雙軸快速排序算法

    詳解Java雙軸快速排序算法

    在排序算法中,快速排序是占比非常多的一環(huán),但是快速排序其思想一直被考察研究,也有很多的優(yōu)化方案。這里主要講解雙軸快速排序的思想和實現(xiàn)
    2021-06-06

最新評論