带有 Autowired Spring JPA bean 的 Vaadin 构造函数
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
我已经为帐户设置了一个 JPA 存储库 table:
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 Constructor调用的吗?我们如何将 Autowired JPA bean 与 Vaadin 一起使用?
编辑:
我已将@EnableJpaRepositories 添加到应用程序,但自动装配仍然失败
@SpringBootApplication
@EnableJpaRepositories(basePackages= {"org.mypackage.tax.repo"})
public class TaxApplication {
您可以尝试将 @EnableJpaRepositories
注释添加到您的 TaxApplication
class
将此添加到您的申请中 TaxApplication:
@EnableJpaRepositories(basePackages= {"com.tax.persistence"})
com.tax.persistence
是包含您的存储库的包。
您也可以用 @Component
注释 MainView 使其成为 Spring bean。
这就是 Spring 中自动装配的工作原理。
使用构造函数注入时,只要只有一个构造函数,就可以省略 @Autowired
注解,但它仍然是自动装配的。
当您使用字段或设置器时,将在构建 bean 后注入依赖项。这与 Vaadin 无关。
构造函数注入通常优于字段注入。它使 class 更容易测试,因为您可以在自己实例化时轻松地将模拟或存根传递给构造函数。
我有一个 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
我已经为帐户设置了一个 JPA 存储库 table:
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 Constructor调用的吗?我们如何将 Autowired JPA bean 与 Vaadin 一起使用?
编辑: 我已将@EnableJpaRepositories 添加到应用程序,但自动装配仍然失败
@SpringBootApplication
@EnableJpaRepositories(basePackages= {"org.mypackage.tax.repo"})
public class TaxApplication {
您可以尝试将 @EnableJpaRepositories
注释添加到您的 TaxApplication
class
将此添加到您的申请中 TaxApplication:
@EnableJpaRepositories(basePackages= {"com.tax.persistence"})
com.tax.persistence
是包含您的存储库的包。
您也可以用 @Component
注释 MainView 使其成为 Spring bean。
这就是 Spring 中自动装配的工作原理。
使用构造函数注入时,只要只有一个构造函数,就可以省略 @Autowired
注解,但它仍然是自动装配的。
当您使用字段或设置器时,将在构建 bean 后注入依赖项。这与 Vaadin 无关。
构造函数注入通常优于字段注入。它使 class 更容易测试,因为您可以在自己实例化时轻松地将模拟或存根传递给构造函数。