如何解决带有自动装配 Spring JPA bean 的 Vaadin 构造函数
我有一个 Spring Boot 应用程序
@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 Constructor 调用的吗?我们如何将 Autowired JPA bean 与 Vaadin 一起使用?
编辑: 我已将 @EnableJpaRepositories 添加到应用程序中,但自动装配仍然失败
@SpringBootApplication
@EnableJpaRepositories(basePackages= {"org.mypackage.tax.repo"})
public class TaxApplication {
解决方法
这就是 Spring 中自动装配的工作原理。
当您使用构造函数注入时,只要只有一个构造函数,您就可以省略 @Autowired
注释,但它仍然是自动装配的。
当您使用字段或 setter 时,将在构建 bean 后注入依赖项。这与 Vaadin 无关。
构造函数注入通常优于字段注入。它使类更易于测试,因为当您自己实例化它时,您可以轻松地将模拟或存根传递给构造函数。
,您可以尝试将 @EnableJpaRepositories
注释添加到您的 TaxApplication
类
将此添加到您的应用程序TaxApplication:
@EnableJpaRepositories(basePackages= {"com.tax.persistence"})
com.tax.persistence
是包含您的存储库的包。
您也可以使用 @Component
注释 MainView 使其成为 Spring bean。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。