![](/img/trans.png)
[英]Not injected bean in class that extends abstract class in Spring Boot
[英]Value cannot injected into service class spring boot
我已經嘗試通過stackoverflow搜索,但我認為我找不到我想要的解決方案......
另外我嘗試使用答案https://stackoverflow.com/questions/45970442/spring-boot-value-returning-null
仍然無法正常工作...
這是我的 controller class
package com.vincent.springoauth.controller;
import com.vincent.springoauth.model.GiftCardRequest;
import com.vincent.springoauth.model.GiftCardResponse;
import com.vincent.springoauth.service.InCommGiftCardServiceImpl;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/gift-card")
public class GiftCardController{
@PostMapping("/activate")
public @ResponseBody
GiftCardResponse activate(GiftCardRequest request) {
GiftCardServiceImpl giftCardService = new GiftCardServiceImpl("");
return giftCardService.activate(request);
}
}
這是我的服務 class
package com.vincent.springoauth.service;
import com.vincent.springoauth.model.GiftCardRequest;
import com.vincent.springoauth.model.GiftCardResponse;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@Service
@Log4j2
public class GiftCardServiceImpl {
private final String baseEndpoint;
public GiftCardServiceImpl( @Value("${webserviceurl}")String baseEndpoint){
this.baseEndpoint = baseEndpoint;
}
public String accessToken() {
log.info("Access oauth token url address: " + baseEndpoint);
// will be use that base endpoint to manipulate stuff later
return "abcdefg";
}
public GiftCardResponse activate(GiftCardRequest request) {
log.info("Calling token ...");
accessToken();
log.info("Incomm Pre Auth Service");
// Generate preAuth request;
//RetailTransactionGenericRequestWrapper retailTransactionGenericRequest = buildRequest(request);
//log.info("RetailTransactionGenericRequest: " + retailTransactionGenericRequest);
GiftCardResponse response = GiftCardResponse.builder().responseCode("0").responseMessage("Success").build();
return response;
}
}
在我的application.properties
我有以下行webserviceurl=https://localhost/giftcard
在我的服務 class 中, webserviceurl
返回null
的問題。 我怎樣才能解決這個問題?
在您的 controller 中,您正在創建自己的服務實例,因此 Spring 不知道它並且無法注入該值。 您的服務 class 被注釋為服務,因此 Spring 將創建一個實例,該實例將注入值,但這不是您的 controller 正在使用的實例。
相反,您應該將該服務聲明為 controller 中的實例變量,並在該實例變量上使用 Autowire 注釋或使用構造函數自動裝配來確保 Spring 創建的 bean 是 Z594C103F2C6E04C3D8AZA 使用的那個。
@RestController
@RequestMapping("/api/gift-card")
public class GiftCardController{
private GiftCardServiceImpl giftCardService;
@Autowired
public GiftCardController(GiftCardServiceImpl giftCardService) {
this.giftCardService = giftCardService;
}
@Value
注釋用於將值注入 Spring 管理的 bean 中的字段。 在您的示例中,您自己創建GiftCardServiceImpl
並且 Spring 無法控制創建並從application.properties
注入webserviceurl
值。 您可以更改GiftCardController
以允許 Spring 執行此操作。
package com.vincent.springoauth.controller;
import com.vincent.springoauth.model.GiftCardRequest;
import com.vincent.springoauth.model.GiftCardResponse;
import com.vincent.springoauth.service.InCommGiftCardServiceImpl;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/gift-card")
public class GiftCardController{
private final GiftCardServiceImpl giftCardService;
public GiftCardController(GiftCardServiceImpl giftCardService) {
this.giftCardService = giftCardService;
}
@PostMapping("/activate")
public @ResponseBody
GiftCardResponse activate(GiftCardRequest request) {
return giftCardService.activate(request);
}
}
嘗試通過 Spring DI 注入GiftCardServiceImpl
,如下例所示
package com.vincent.springoauth.controller;
import com.vincent.springoauth.model.GiftCardRequest;
import com.vincent.springoauth.model.GiftCardResponse;
import com.vincent.springoauth.service.InCommGiftCardServiceImpl;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/gift-card")
public class GiftCardController{
@Autowired
private GiftCardServiceImpl giftCardService;
@PostMapping("/activate")
public @ResponseBody
GiftCardResponse activate(GiftCardRequest request) {
return giftCardService.activate(request);
}
}
當您通過簡單的new
關鍵字創建@Value
時,@Value 注釋僅適用於 Spring Bean。 Spring 沒有發現應該在構造函數中注入屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.