1. 程式人生 > >java spring使用@Autowired與構造器進行變數初始化

java spring使用@Autowired與構造器進行變數初始化

如果要在構造器裡引用其他被依賴的bean來初始化類的變數,較好的實現方式是

  1. 用@Autowired註解建構函式
  2. 並且增加一個有依賴關係的傳參
  3. 同時類變數也用@Autowired註解以便其它函式使用(不必在建構函式裡使用this.client = client;這種方式來手動賦值)。
@Service
public class StoreService {
	@Autowired
	private Client client;

        private final Store store;

	@Autowired
	public StoreService(Client client) {
	    this.store = client.getStore();
	}

        public void doLogic(){
             this.client.print();
             this.store.print();
        }
}

還有一種方式是另外寫一個初始化函式並用@PostConstruct註解,但這種方式有個缺點是不能初始化final的類變數。

@Service
public class StoreService {
	@Autowired
	private Client client;

        private Store store;


        public StoreService() {

	}

	@PostConstruct
	private void init() {
             this.store = client.getStore();
	}


        public void doLogic(){
             this.client.print();
             this.store.print();
        }
}