最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

解決非controller類引用service問題

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

解決辦法

1、首先將@Autowired注解注入Service或者M(jìn)apper接口

?@Autowired
? ? PaUserService pauserService;

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

private static DomSocketUtils domSocketUtils;

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

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

總的代碼如下

@Component()
public class DomSocketUtils extends ServerSocket {
    @Autowired
    PaUserService pauserService;
    private static final int SERVER_PORT = 8875; // 服務(wù)端端口
    private static DomSocketUtils domSocketUtils;
    private ServerSocket server;
    //    @PostConstruct
    public DomSocketUtils() throws Exception {
//        server=new ServerSocket(SERVER_PORT);
//        load();
    }
    @PostConstruct  //用于在依賴關(guān)系注入完成之后需要執(zhí)行的方法上,以執(zhí)行任何初始化
    public void init() {
        domSocketUtils = this;
    }
    /**
     * 使用線程處理每個(gè)客戶端傳輸?shù)奈募?
     * @throws Exception
     */
    @Async("taskExexutor")
    public void load() throws Exception {
        server=new ServerSocket(SERVER_PORT);
        while (true) {
            System.out.println("-----------等待連接-------- ");
            Socket socket = server.accept();//接收連接服務(wù)端的客戶端對(duì)象
            System.out.println("ip" + socket.getInetAddress() + "已連接");
            new Thread(new Transfer(socket),"thread1").start();// 每接收到一個(gè)Socket就建立一個(gè)新的線程來處理它
            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());
                // 文件名和長(zhǎng)度
                String imageurl="";
                String fileName = dis.readUTF(); //獲取文件名
                long fileLength = dis.readLong();
                File directory = new File("E://"); //創(chuàng)建絕對(duì)路徑
                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));//驗(yàn)證是否存在該病人
                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層服務(wù)

通過init方法進(jìn)行服務(wù)注入

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

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

在前面添加當(dāng)前類就可以了

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

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

相關(guān)文章

  • springboot 防止重復(fù)請(qǐng)求防止重復(fù)點(diǎn)擊的操作

    springboot 防止重復(fù)請(qǐng)求防止重復(fù)點(diǎn)擊的操作

    這篇文章主要介紹了springboot 防止重復(fù)請(qǐng)求防止重復(fù)點(diǎn)擊的操作,URL 攔截器可以使用 spring 攔截器,但使用 spring,每個(gè)需要過濾的新 URL 都需要添加配置,因此這里使用 AOP 注解 的形式來實(shí)現(xiàn),結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • 淺談SpringSecurity注解與AOP切面執(zhí)行順序

    淺談SpringSecurity注解與AOP切面執(zhí)行順序

    這篇文章主要介紹了淺談SpringSecurity注解與AOP切面執(zhí)行順序,引入Spring Security后,在Controller的方法中會(huì)出現(xiàn)Spring Security的方法注解與AOP同時(shí)存在的問題,這是就會(huì)設(shè)計(jì)順序問題,需要的朋友可以參考下
    2023-10-10
  • IDEA自定義Maven倉(cāng)庫(kù)的實(shí)現(xiàn)

    IDEA自定義Maven倉(cāng)庫(kù)的實(shí)現(xiàn)

    使用Maven進(jìn)行Java程序開發(fā)時(shí),開發(fā)者能夠極大地提高開發(fā)效率,本文主要介紹了IDEA自定義Maven倉(cāng)庫(kù)的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • java中List常用的4種stream()方法解析

    java中List常用的4種stream()方法解析

    Java中的List接口從Java 8開始新增了stream()方法,用于創(chuàng)建一個(gè)Stream流對(duì)象,這篇文章主要給大家介紹了關(guān)于java中List常用的4種stream()方法的相關(guān)資料,需要的朋友可以參考下
    2024-02-02
  • java中你的項(xiàng)目應(yīng)該如何正確分層

    java中你的項(xiàng)目應(yīng)該如何正確分層

    這篇文章主要介紹了java中你的項(xiàng)目應(yīng)該如何正確分層,業(yè)務(wù)分層對(duì)于代碼規(guī)范是比較重要,決定著以后的代碼是否可復(fù)用,感興趣的可以了解一下
    2021-04-04
  • java可變參數(shù)(不定向參數(shù))的作用與實(shí)例

    java可變參數(shù)(不定向參數(shù))的作用與實(shí)例

    這篇文章主要給大家介紹了關(guān)于java可變參數(shù)(不定向參數(shù))的作用與實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • SpringBoot中整合Shiro實(shí)現(xiàn)權(quán)限管理的示例代碼

    SpringBoot中整合Shiro實(shí)現(xiàn)權(quán)限管理的示例代碼

    這篇文章主要介紹了SpringBoot中整合Shiro實(shí)現(xiàn)權(quán)限管理的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • java使用Dijkstra算法實(shí)現(xiàn)單源最短路徑

    java使用Dijkstra算法實(shí)現(xiàn)單源最短路徑

    這篇文章主要為大家詳細(xì)介紹了java使用Dijkstra算法實(shí)現(xiàn)單源最短路徑,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Spring-boot原理及spring-boot-starter實(shí)例和代碼

    Spring-boot原理及spring-boot-starter實(shí)例和代碼

    spring-boot的starter是一個(gè)通過maven完成自包含并通過annotation配置使得可被spring上下文發(fā)現(xiàn)并實(shí)例化的一個(gè)可插拔的組件或服務(wù)。這篇文章主要介紹了Spring-boot原理及spring-boot-starter實(shí)例和代碼 ,需要的朋友可以參考下
    2019-06-06
  • Nacos的單機(jī)模式啟動(dòng)失敗問題及解決

    Nacos的單機(jī)模式啟動(dòng)失敗問題及解決

    這篇文章主要介紹了Nacos的單機(jī)模式啟動(dòng)失敗問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07

最新評(píng)論

泸水县| 新营市| 北海市| 泾源县| 翁牛特旗| 滦南县| 宁城县| 宁远县| 通江县| 江北区| 肥东县| 台中县| 皋兰县| 黄平县| 临武县| 垦利县| 信宜市| 清镇市| 永嘉县| 萝北县| 西乌珠穆沁旗| 客服| 牟定县| 德化县| 巴林左旗| 资阳市| 尚志市| 墨脱县| 驻马店市| 柏乡县| 甘孜县| 台北市| 三明市| 汉川市| 加查县| 巴彦淖尔市| 卢氏县| 盐亭县| 固始县| 永川市| 玉田县|