[英]Vaadin constructor with Autowired Spring JPA beans
我有一個 Spring 引導應用程序
@SpringBootApplication
public class TaxApplication {
private static final Logger log = LoggerFactory.getLogger(TaxApplication.class);
public static void main(String[] args) {
SpringApplication.run(TaxApplication.class, args);
}
}
我已經使用 Spring JPA 進行了數據訪問
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto=none
spring.jpa.hibernate.show-sql=true
我為 Account 表設置了一個 JPA 存儲庫:
public interface AccountRepository extends JpaRepository<Account, Long> {
List<Account> findByNameStartsWithIgnoreCase(String name);
}
在我的 MainView 中, AccountRepository
沒有被 Spring 框架@Autowired
,
我可以通過構造函數注入獲得它的一個實例:
public MainView(AccountRepository accountRepository) {
}
但是如果我嘗試使用自動裝配構造函數輸出'null'
@Route
@Configurable
@PageTitle("Basic App Layout")
@CssImport(value = "combobox-styles.css", themeFor="vaadin-combo-box-overlay")
public class MainView extends AppLayout {
@Autowired
AccountRepository accountRepository;
public MainView() {
System.out.println(accountRepository);
}
}
這是因為代碼是從 MainView 構造函數中調用的嗎? 我們如何將Autowired JPA bean 與 Vaadin 一起使用?
編輯:我已將@EnableJpaRepositories 添加到應用程序,但自動裝配仍然失敗
@SpringBootApplication
@EnableJpaRepositories(basePackages= {"org.mypackage.tax.repo"})
public class TaxApplication {
這就是 Spring 中的自動裝配的工作原理。
當您使用構造函數注入時,只要只有一個構造函數,您就可以省略@Autowired
注釋,但它仍然是自動裝配的。
當您使用字段或設置器時,將在構建 bean 后注入依賴項。 這與 Vaadin 無關。
構造函數注入通常優於字段注入。 它使 class 更易於測試,因為您可以在自己實例化它時輕松地將模擬或存根傳遞給構造函數。
您可以嘗試將@EnableJpaRepositories
注釋添加到您的TaxApplication
class
將此添加到您的應用程序TaxApplication :
@EnableJpaRepositories(basePackages= {"com.tax.persistence"})
com.tax.persistence
是包含您的存儲庫的 package。
您也可以使用@Component
注釋MainView以使其成為 Spring bean。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.