靜態工具類中使用注解注入service


在Controller中直接使用service可行,而封裝成工具類后調用出錯,原因在於不能采用new方式加載service,必須將service的加載過程在服務器運行時進行。

這是我當時遇到的問題和最后的解決結論:http://bbs.csdn.net/topics/392162820

這是當時提問的時候有人提供的解決方案文章地址:http://blog.csdn.net/p793049488/article/details/37819121

解決靜態工具類中使用注解注入service的重點在於兩點:

1、在工具類中聲明一個該工具類的靜態的內部對象

2、使用注解@PostConstruct把需要使用的service加載到上面定義的靜態內部對象中

例如下面的代碼,重點就是29—37行代碼:

 1 package com.shanshan.bo.utils;
 2 
 3 import java.util.List;
 4 
 5 import javax.annotation.PostConstruct;
 6 import javax.annotation.Resource;
 7 
 8 import org.springframework.stereotype.Component;
 9 
10 import com.shanshan.bo.pojo.SsFundDimBank;
11 import com.shanshan.bo.pojo.SsFundDimCurrencyType;
12 import com.shanshan.bo.pojo.SsbiUser;
13 import com.shanshan.bo.service.SsFundDimBankService;
14 import com.shanshan.bo.service.SsFundDimCurrencyTypeService;
15 import com.shanshan.bo.service.SsbiUserService;
16 
17 @Component
18 public class DataFactoryUtil {
19     
20     @Resource
21     private SsbiUserService userService;
22     
23     @Resource
24     private SsFundDimBankService bankService;
25     
26     @Resource
27     private SsFundDimCurrencyTypeService currencyTypeService;
28     
29     private static DataFactoryUtil dataFactoryUtil;
30     
31     @PostConstruct
32     public void init() {
33         dataFactoryUtil = this;
34         dataFactoryUtil.userService = this.userService;
35         dataFactoryUtil.bankService = this.bankService;
36         dataFactoryUtil.currencyTypeService = this.currencyTypeService;
37     }
38     
39     /**
40      * 根據用戶名去數據庫查詢用戶並返回
41      * Ps:暫不考慮用戶名重復的問題
42      * @param username
43      * @return User
44      */
45     public static SsbiUser selectByUsername(String username) {
46         if (username != null && !("".equals(username))) {
47             return dataFactoryUtil.userService.selectByUserCode(username);
48         }
49         return null;
50     }
51     
52     /**
53      * 查詢所有的銀行數據並返回
54      */
55     public static List<SsFundDimBank> selectAllBank() {
56         return dataFactoryUtil.bankService.selectAll();
57     }
58     
59     /**
60      * 查詢所有的幣制數據並返回
61      */
62     public static List<SsFundDimCurrencyType> selectAllCurrencyType() {
63         return dataFactoryUtil.currencyTypeService.selectAll();
64     }
65 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM