在 Spring 中实例化一个 POJO 设置 class,并使其可从所有代码访问
Instantiate a POJO setting class in Spring, and make it accessible from all code
我是 Spring 的新手,在尝试创建一个所有参数都由外部表单填充的 class 时遇到问题。但我想让这个实例成为唯一的,并且可以从项目其余部分的每个 class 访问,因为到目前为止该对象正在重新实例化,所以我没有保存我的设置。
我不知道是否有这方面的注释,以及我如何能够在任何其他 class.
中感染这个实例
@Data
@Builder
public class ProjectConfiguration {
//InputFile
File midiFile = null;
private String resourcesPath;
private Sequence sequence;
//OutputFile
private String exportPath;
private String exportFile;
//Video
private int width;
private int height;
//Audio
private int sampleRate; // Hz
//Preview
private IMediaViewer.Mode viewMode;
private boolean showStats;
}
你能给我一些指导吗?
我正在按照下面提供的指南更新代码,现在我有更多问题,但仍然无法正常工作。如果我使用
@Autowired
ProjectConfiguration配置;
在另一个class中调用相同的配置它returns这个错误
org.springframework.beans.factory.UnsatisfiedDependencyException:创建名称为 'com.kadathsound.midiread.MainView' 的 bean 时出错:通过字段 'configuration' 表示的不满足的依赖关系;嵌套异常是 org.springframework.beans.factory.NoUniqueBeanDefinitionException:没有 'com.kadathsound.midiread.model.config.ProjectConfiguration' 类型的合格 bean 可用:预期单个匹配 bean 但找到 2:projectConfiguration,getInstance
如果我删除 @Autowired,则会收到 NullPointer 异常,因为它仍在创建新实例。
这是新代码。请帮我。我完全迷失了这个。我阅读的所有文档都对我没有帮助,因为情况不同。
@Data
@Configuration
@NoArgsConstructor
public class ProjectConfiguration implements Serializable {
private File midiFile;
private String resourcesPath;
private Sequence sequence;
private String exportPath;
private String exportFile;
private int width;
private int height;
private int sampleRate;
private IMediaViewer.Mode viewMode;
private boolean showStats;
private static volatile ProjectConfiguration instance = null;
@Bean
public static ProjectConfiguration getInstance() {
if (instance == null) {
synchronized(ProjectConfiguration.class) {
if (instance == null) {
instance = new ProjectConfiguration();
}
}
}
return instance;
}
}
您可以为此 class 创建一个 bean 并使其可用于整个应用程序。您可以创建一个用@Configuration 注释的配置文件。声明一个方法,该方法 return 是您要使用 @Bean 注释的 class。在方法内部构建 class 使用您以某种方式收集的值 return 构建的 class.
您可以在@Autowired 的帮助下访问该 bean。
我认为这有帮助!!!
@Configuration
public class AppConfig {
/** build your class like this with all the necessary values
* and the spring will create the initial object for you and
* inject those into all the dependent classes
* @return
*/
@Bean
public ProjectConfiguration projectConfiguration(){
return ProjectConfiguration.builder()
.resourcesPath(...)
.sequence(...)
.build();
}
}
参考资料:https://www.javaguides.net/2018/09/spring-bean-annotation-with-example.html
我是 Spring 的新手,在尝试创建一个所有参数都由外部表单填充的 class 时遇到问题。但我想让这个实例成为唯一的,并且可以从项目其余部分的每个 class 访问,因为到目前为止该对象正在重新实例化,所以我没有保存我的设置。 我不知道是否有这方面的注释,以及我如何能够在任何其他 class.
中感染这个实例@Data
@Builder
public class ProjectConfiguration {
//InputFile
File midiFile = null;
private String resourcesPath;
private Sequence sequence;
//OutputFile
private String exportPath;
private String exportFile;
//Video
private int width;
private int height;
//Audio
private int sampleRate; // Hz
//Preview
private IMediaViewer.Mode viewMode;
private boolean showStats;
}
你能给我一些指导吗?
我正在按照下面提供的指南更新代码,现在我有更多问题,但仍然无法正常工作。如果我使用 @Autowired ProjectConfiguration配置; 在另一个class中调用相同的配置它returns这个错误
org.springframework.beans.factory.UnsatisfiedDependencyException:创建名称为 'com.kadathsound.midiread.MainView' 的 bean 时出错:通过字段 'configuration' 表示的不满足的依赖关系;嵌套异常是 org.springframework.beans.factory.NoUniqueBeanDefinitionException:没有 'com.kadathsound.midiread.model.config.ProjectConfiguration' 类型的合格 bean 可用:预期单个匹配 bean 但找到 2:projectConfiguration,getInstance
如果我删除 @Autowired,则会收到 NullPointer 异常,因为它仍在创建新实例。 这是新代码。请帮我。我完全迷失了这个。我阅读的所有文档都对我没有帮助,因为情况不同。
@Data
@Configuration
@NoArgsConstructor
public class ProjectConfiguration implements Serializable {
private File midiFile;
private String resourcesPath;
private Sequence sequence;
private String exportPath;
private String exportFile;
private int width;
private int height;
private int sampleRate;
private IMediaViewer.Mode viewMode;
private boolean showStats;
private static volatile ProjectConfiguration instance = null;
@Bean
public static ProjectConfiguration getInstance() {
if (instance == null) {
synchronized(ProjectConfiguration.class) {
if (instance == null) {
instance = new ProjectConfiguration();
}
}
}
return instance;
}
}
您可以为此 class 创建一个 bean 并使其可用于整个应用程序。您可以创建一个用@Configuration 注释的配置文件。声明一个方法,该方法 return 是您要使用 @Bean 注释的 class。在方法内部构建 class 使用您以某种方式收集的值 return 构建的 class.
您可以在@Autowired 的帮助下访问该 bean。
我认为这有帮助!!!
@Configuration
public class AppConfig {
/** build your class like this with all the necessary values
* and the spring will create the initial object for you and
* inject those into all the dependent classes
* @return
*/
@Bean
public ProjectConfiguration projectConfiguration(){
return ProjectConfiguration.builder()
.resourcesPath(...)
.sequence(...)
.build();
}
}
参考资料:https://www.javaguides.net/2018/09/spring-bean-annotation-with-example.html