vaadin构造函数与自动连接的springjpabeans

gc0ot86w  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(337)

我有一个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);
  }
}

我已经用springjpa设置了数据访问

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);
}

在我看来 AccountRepository 不明白 @Autowired 通过Spring框架,
我可以通过构造函数注入获得它的一个示例:

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构造函数调用的吗?如何将自动连线的jpa bean与vaadin一起使用?
编辑:我已经在应用程序中添加了@enablejparepositories,但是自动布线仍然失败

@SpringBootApplication
@EnableJpaRepositories(basePackages= {"org.mypackage.tax.repo"})
public class TaxApplication {
a9wyjsp7

a9wyjsp71#

这就是spring中自动布线的工作原理。
在使用构造函数注入时,可以省略 @Autowired 注解,只要只有一个构造函数,但它仍然是自动连接的。
当您使用字段或设置器时,依赖项将在bean构造之后被注入。这与瓦丁无关。
构造注入通常优于现场注入。它使类更易于测试,因为当您自己示例化它时,可以很容易地将mock或stub传递给构造函数。

42fyovps

42fyovps2#

你可以尝试添加 @EnableJpaRepositories 对您的 TaxApplication

vcirk6k6

vcirk6k63#

将此添加到应用程序:

@EnableJpaRepositories(basePackages= {"com.tax.persistence"})
``` `com.tax.persistence` 是包含存储库的包。
还可以使用注解mainview `@Component` 使之成为 Spring Bean 。

相关问题