static靜態方法內調用Spring(依賴注入)的bean

前言:通常須要在static方法裏調用注入進來的service,由於是靜態方法,因此必須聲明該service也必須是static的,這時候你會發現注入不進來,會報null指針,這個時候須要使用 @PostConstruct來解決。java

 

第一種函數

Spring也基於JSR-250註解,包括@PostConstruct,@PreDestroy和@Resource 註解。雖然這些註釋都沒有真正必需的,由於你已經有其餘的候補,但仍是讓我給他們有關一個簡單的想法。@PostConstruct 和@PreDestroy 註解:要定義安裝和拆卸一個bean,咱們只是聲明瞭初始化方法和/或銷燬,<bean>方法的參數。在init-method屬性指定一個方法,是被稱爲bean上後當即實例化。一樣,銷燬規定了被稱爲bean被從容器中取出以前的方法。this

註解@PostConstruct 這個其實就是相似聲明瞭,當你加載一個類的構造函數以後執行的代碼塊,也就是在加載了構造函數以後,就將service複製給一個靜態的service。類上須要用@Component.net

  //解決static方法 調用注入對象的方法
    @Autowired
    private ConfigDaoImpl configDaoImpl;
    
    private static ConfigUtil configUtil;
    @PostConstruct
    public void initialize() {
        //@Component will call construct
        configUtil = this;
    }

第二種,經過set方法注入,類上須要用@Component指針

  //解決static方法 調用注入對象的方法
    private static UserService userService;

    @Autowired
    public void setUserService(UserService userService) {
        DubboAuthService.userService = userService;
    }

 

博客地址:http://my.oschina.net/wangniancode

相關文章
相關標籤/搜索