Vaadin视图中的java自动布线服务和组件不工作
各位程序员好!我对瓦丁比较陌生,所以请饶了我吧。 我正在尝试将我的服务层自动连接到我的视图中,如下所示:
@Route("")
@PWA(name = "First time bruh", shortName = "Project Base")
public class MainView extends VerticalLayout {
private TextField filterText = new TextField();
private Grid<Customer> grid = new Grid<>(Customer.class);
private CustomerForm customerForm = new CustomerForm(this);
@Autowired
private CustomerService customerService;
customerService依赖项注入工作正常,但是当我尝试在组件中使用它时,它返回null:
@Route
public class CustomerForm extends FormLayout {
@Autowired
private CustomerService customerService;
我已经尝试过用@Component和@SpringComponent注释这个类,但是依赖注入不起作用,我认为问题并不是因为这个类不是一个bean,因为MainView类也不是一个bean
我希望我创建的自定义子组件能够访问服务层
提前感谢您的帮助
# 1 楼答案
在Vaadin UI中,只能在路由端点(具有
@Route
注释的视图)中插入,并且只有在导航到注释中指定的路由时打开该视图。(因为只有到那时,该视图的实例化才会“自动”完成)经验法则是:每当你自己用
new
关键字实例化某个东西时,注入/自动连接都不起作用我对你情况的理解是:
你有一个
MainView
,你想在其中添加一个CustomerForm
以下是实现这一目标的方法:
将
CustomerService
注入MainView
,并将CustomerService
实例传递到CustomerForm
的构造函数中另一种方法是使
CustomerForm
a@Component
(记住在spring配置类中正确扫描它),将服务注入其中,然后将整个表单注入MainView
:# 2 楼答案
当您使用
new
关键字自己创建实例时,注入不起作用如果用
@Route
注释该类,那么当导航到该路径时,Vaadin框架将注入依赖项在你的情况下,如果你没有导航到它,你必须把它变成一个Springbean。添加
@Component
或@SpringComponent
(第一个别名),然后在MainView
中自动连接它,或者自动连接ApplicationContext
并从那里获取它可以同时使用
@Route
和@Component
,这样它可以自动连接,但也可以导航到如果添加
@Component
注释,请记住选择适当的范围,或者@UIScope
在导航时重用同一实例,或者Scope.PROTOTYPE
始终创建一个新实例