Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取在其构造函数中使用依赖项注入的类的实例_Java_Spring_Dependency Injection_Components_Vaadin - Fatal编程技术网

Java 如何获取在其构造函数中使用依赖项注入的类的实例

Java 如何获取在其构造函数中使用依赖项注入的类的实例,java,spring,dependency-injection,components,vaadin,Java,Spring,Dependency Injection,Components,Vaadin,好的,所以这个标题可能不是最好的,但是我在这里没有看到。因此,我的Vaadin应用程序只有一页,没有其他路径。虽然web应用程序是一个页面,但我选择根据布局等将页面拆分为不同的类。有一个名为MainLayout.class的主类,它具有@Route(“”) 这里是该网站的概要,每个概要代表一个新类,该类扩展了组件的一段时间。(缺少下半部分以保持简洁性。) 现在的问题是,红色和蓝色组件都使用依赖注入来注入所需的服务。这很好,但是当purple布局想要保存红色和蓝色类的实例,以便可以将组件添加到自

好的,所以这个标题可能不是最好的,但是我在这里没有看到。因此,我的Vaadin应用程序只有一页,没有其他路径。虽然web应用程序是一个页面,但我选择根据布局等将页面拆分为不同的类。有一个名为MainLayout.class的主类,它具有@Route(“”)

这里是该网站的概要,每个概要代表一个新类,该类扩展了组件的一段时间。(缺少下半部分以保持简洁性。)

现在的问题是,红色和蓝色组件都使用依赖注入来注入所需的服务。这很好,但是当purple布局想要保存红色和蓝色类的实例,以便可以将组件添加到自身时,问题就出现了

我当前的方法: 我目前的方法感觉非常粗糙和错误,只是再次使用依赖注入,将蓝色和红色组件类注入到紫色类的构造函数中。此过程一直持续到到达MainLayout类

我的问题: 这个问题还有其他可能的解决方案吗?如果有,我该如何解决这个问题

主布局类:(它使用依赖项注入来获取所有其他也包含子组件的子布局,等等)

@Route(“”)
@页面标题(“你的天气应用程序”)
@CssImport(“./styles/shared styles.css”)
@保留刷新
公共类主布局扩展垂直布局{
私有静态最终长serialVersionUID=1L;
私人最终导航视图搜索栏;
私有最终CurrentInfoLayout CurrentInfoLayout;
私人最终MoreDetailInfoLayout MoreDetailInfoLayout;
@自动连线
公共主布局(导航视图搜索栏,
CurrentInfoLayout CurrentInfoLayout,
MoreDetailInfoLayout MoreDetailInfoLayout){
this.searchBar=搜索栏;
this.currentInfoLayout=currentInfoLayout;
this.moreDetailInfoLayout=moreDetailInfoLayout;
addClassName(“主布局”);
添加(this.searchBar、this.currentInfoLayout、this.moreDetailInfoLayout);
}
}
红色组件:(蓝色组件在某种程度上类似)

@组件
@望远镜
@CssImport(“./styles/current-info-styles.css”)
公共类CurrentDayView扩展了垂直布局{
私有静态最终长serialVersionUID=1L;
私人NowcastWeatherService NowcastWeatherService;
私人地理定位服务;
//这里还有其他代码
@自动连线
public CurrentDayView(NowcastWeatherService NowcastWeatherService、GeoLocationService GeoLocationService){
this.nowcastWeatherService=nowcastWeatherService;
this.geoLocationService=geoLocationService;
//此处的其他功能
}
//这里还有其他代码
}
紫色组件:(这是使用依赖项注入来获取其他组件。)

@组件
@望远镜
@CssImport(“./styles/current-info-styles.css”)
公共类CurrentInfoLayout扩展了水平布局{
私有CurrentDayView CurrentDayView;
私有当前温度查看当前温度查看;
@自动连线
公共CurrentInfoLayout(CurrentDayView CurrentDayView,CurrentTemperatureView CurrentTemperatureView){
this.currentDayView=currentDayView;
this.currentTemperatureView=currentTemperatureView;
this.searchBar=搜索栏;
//此处的其他功能
}
//这里还有其他代码
}
正如你可能知道的,我对这些东西很了解,所以我可能不知道依赖注入的最佳策略,等等。
谢谢你抽出时间

从spring和依赖注入的角度来看(我没有与Vaadin合作过),您做得对。您正在通过构造函数进行注入,这是推荐的方法。您可以做的更多是像在
MainLayout
中一样,将
final
关键字添加到注入的属性中


如果要避免使用依赖项注入,可以在实例化父组件时使用
Singleton
模式来检索所需组件的实例。

问题是什么?请添加您得到的错误/堆栈跟踪,或者这与您认为的不同。嗯,好的。假设我有一个组件,它使用一个服务,并通过依赖项注入获得它。其他任何想要使用服务的类实例的人都必须使用依赖注入。这个循环将重复,直到达到“顶级”级别。这不会导致紧密耦合和高度依赖的类吗?它们不应该是“松散”耦合的而不是直接耦合的吗?实际上,依赖注入有助于获得松散耦合的类,特别是当您使用接口而不是服务的实际实现时。