gpt4 book ai didi

java - 作为 Spring bean 的 Vaadin 组件

转载 作者:搜寻专家 更新时间:2023-11-01 03:02:34 25 4
gpt4 key购买 nike

问题:

什么时候 Vaadin 组件可以是 spring 容器中的一个 bean(@SpringComponent 注解)?

问题澄清:

我问这个问题是因为我知道使用@SpringView后Vaadin View可以是spring bean。但是,如果我用 @SpringComponent 注释 Button 组件,它将只创建一次。会不会有什么问题?

示例:

我有很多 JpaRepository bean:

public interface CustomerRepository extends JpaRepository<Customer, Long> 
// ...

public interface UserRepository extends JpaRepository<User, Long> {
// ...

我想在不同的地方使用它们——例如在 Tab 组件中(在 Vaadin TabSheet 中)。所以我有一个想法 - tabContent 也可以是 spring 组件:

@SpringView(name = "viewName")
public class SomeView extends VerticalLayout implements View {

@Autowired
private SomeTabContent tabContent;
//...
public void init() { // call every view enter()
removeAllComponents();
// Initialize whole view.
tabSheet.addTab(tabContent, /* ... */);
// ...
}

然后我可以注入(inject)所有需要的 bean:

@SpringComponent
public class SomeTabContent extends VerticalLayout {
@Autowired
private CustomerRepository customerRepository;

@Autowired
private UserRepository UserRepository;
}

这是正确的架构吗?

注意:我知道 Vaadin 具有 CDI 和数据绑定(bind)功能,但我不想使用它们。我也知道我可以在任何地方手动创建 Spring 应用程序上下文 - 但我认为这不是正确的方法。

最佳答案

如果您只使用@Component(或@SpringComponent),该类将为应用程序实例化一次,所以,是的,当您不希望多个 session 共享结果对象时,您会遇到问题。所以你也添加了@UIScope。这将确保您在每个 session 中获得此类的一个实例。您可以在类中存储 session 数据(就像您使用 Spring 的 @Session 一样,但这需要您使用 Spring 的 Dispatcher)。

在@UIScope 类中,您可以使用@Autowired 和@PostConstruct 等。我用它来扩展Windows 和Layout 等。您的类路径中需要com.vaadin:vaadin-spring:1.0.0。有关 vaadin-spring 的更多信息

关于java - 作为 Spring bean 的 Vaadin 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32005891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com