Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.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_Naming Conventions - Fatal编程技术网

如何访问单例并用java命名?

如何访问单例并用java命名?,java,spring,naming-conventions,Java,Spring,Naming Conventions,我想在Java中创建一个单例,它需要从文件配置读取instanciate,以及其他逻辑(因此它不仅仅是一个新的MySingletonObject() 在春天实现这一目标的正确方法是什么?我想知道我是否应该做以下事情: public interface MySingletonObjectAccessor { MySingletonObject getInstance(); } @Service public class MySingletonObjectAccessorImpl implem

我想在Java中创建一个单例,它需要从文件配置读取instanciate,以及其他逻辑(因此它不仅仅是一个新的MySingletonObject()

在春天实现这一目标的正确方法是什么?我想知道我是否应该做以下事情:

public interface MySingletonObjectAccessor {
  MySingletonObject getInstance();
}

@Service
public class MySingletonObjectAccessorImpl implements MySingletonObjectAccessor {
  private MySingletonObject mySingletonObject;
  @Override
  public MySingletonObject getInstance() {
    return mySingletonObject;
  }

  MySingletonObjectAccessorImpl() {
    this.MySingletonObject = // complex logic here, that includes reading from a config file

  }
}
然后,用法将是:

@Autowired
MySingletonObjectAccessor msoa;

MySingletonObject mso = msoa.getInstance();

我走对了吗?如果是这样,MySingletonObjectAccessor服务的正确命名约定是什么?

您可以定义一个Bean并添加一个作用域使其成为单例

    @Configuration
    class MySingletonBeanConfiguration {

      //default is singleton scope
      @Bean
      public MySingletonBean mySingletonBean() {
        return new MySingletonBean();
      }
    }

您可以定义一个Bean并添加一个作用域以使其成为单例

    @Configuration
    class MySingletonBeanConfiguration {

      //default is singleton scope
      @Bean
      public MySingletonBean mySingletonBean() {
        return new MySingletonBean();
      }
    }

如果您使用单例作为配置,那么对单例使用
@Component
@Scope(value=ConfigurableBeanFactory.Scope\u singleton)

    @Configuration
    class MySingletonBeanConfiguration {

      //default is singleton scope
      @Bean
      public MySingletonBean mySingletonBean() {
        return new MySingletonBean();
      }
    }
如果它正在配置一个文件,那么使用FileConfig作为类名,按照java标准,类名必须指定它拥有什么以及它可以做什么。例如:-FileReadConfig、FileUploadConfig、DBConnectConfig、InitializedSingleton、StaticBlockSingleton、EnumSingleton

例如:-

@配置
公共类MySingleToObject{
私有MySingletonObject MySingletonObject;
公共静态最终字符串FILENAME=“/Users/xxx/Projects/xxx/config.xml”;
私有XMLObject配置=null;
私有布尔加载配置(字符串文件名){
缓冲读取器;
弦线;
字符串内容=”;
试一试{
reader=newbufferedreader(newfilereader(fileName));
而((line=reader.readLine())!=null){
内容+=行;
}
}捕获(IOEX异常){
LOGGER.log(Level.SEVERE,null,ex);
返回false;
}
/**
*如果没有内容,则文件必须无效
*/

如果(content.length()如果您使用单例作为配置,则使用
@Component
并对单例使用
@Scope(value=ConfigurableBeanFactory.Scope\u singleton)

    @Configuration
    class MySingletonBeanConfiguration {

      //default is singleton scope
      @Bean
      public MySingletonBean mySingletonBean() {
        return new MySingletonBean();
      }
    }
如果要配置文件,请使用FileConfig作为类名,根据java标准,类名必须指定其拥有的内容和可以执行的操作。例如:-FileReadConfig、FileUploadConfig、DBConnectConfig、AgentInitializedSingleton、StaticBlockSingleton、EnumSingleton

例如:-

@配置
公共类MySingleToObject{
私有MySingletonObject MySingletonObject;
公共静态最终字符串FILENAME=“/Users/xxx/Projects/xxx/config.xml”;
私有XMLObject配置=null;
私有布尔加载配置(字符串文件名){
缓冲读取器;
弦线;
字符串内容=”;
试一试{
reader=newbufferedreader(newfilereader(fileName));
而((line=reader.readLine())!=null){
内容+=行;
}
}捕获(IOEX异常){
LOGGER.log(Level.SEVERE,null,ex);
返回false;
}
/**
*如果没有内容,则文件必须无效
*/

如果(content.length()您的Spring扫描包中可以有这样一个公共配置类:

@Configuration
public class MySingletonProvider {

  @Bean
  public MySingleton nameTheMethodExactlyLikeTheBeanNameYouWant(@Value("${singleton.xml.file}") String xmlConfigFile) {
    Library lib = new Library(xmlConfigFile);
    return new MySingleton(lib);
  }
}

在Spring扫描包中可以有这样的公共配置类:

@Configuration
public class MySingletonProvider {

  @Bean
  public MySingleton nameTheMethodExactlyLikeTheBeanNameYouWant(@Value("${singleton.xml.file}") String xmlConfigFile) {
    Library lib = new Library(xmlConfigFile);
    return new MySingleton(lib);
  }
}


看起来您的单例直接成为Spring上下文的bean更有意义(毕竟Spring bean通常也都是单例)。您可以有一个\@Configuration类,该类提供一个\@Bean注释的方法来构建singleton。@RobbyCornelissen那么您建议避免创建服务和接口吗?为什么它“需要从文件读取”?通常,我们的想法是将该配置放入Spring本身(并且要求构造函数或生成器读取文件会使代码过度耦合)。@chrylis onstrike-我正在使用一个通过xml文件读取其配置的外部库。我希望能够在代码中的任何地方使用该库,而无需执行
新建库(“xmlFilePath”)
无处不在。这有意义吗?如果您的单例直接成为Spring上下文的bean,看起来会更有意义(Spring bean通常也都是单例)。您可以有一个\@Configuration类,该类提供一个\@Bean注释的方法来构建singleton。@RobbyCornelissen那么您建议避免创建服务和接口吗?为什么它“需要从文件读取”?通常,我们的想法是将该配置放入Spring本身(并且要求构造函数或生成器读取文件会使代码过度耦合)。@chrylis onstrike-我正在使用一个通过xml文件读取其配置的外部库。我希望能够在代码中的任何地方使用该库,而无需执行
新建库(“xmlFilePath”)
everywhere。这有意义吗?从技术上讲,除非您在该类中指定另一个作用域,否则bean是单例的。更重要的是,我对命名约定也非常感兴趣。您可以在配置类中创建bean,请参阅我的更新代码。从技术上讲,除非您在c中指定另一个作用域,否则bean是单例的这是一个类吗?更重要的是,我对命名约定也非常感兴趣。您可以在配置类中创建bean,请参阅我的更新代码。bean是单例的,除非您在我的示例中指定其他方式MySingleToObject是一个外部库。它从xml文件读取,我只想实例化它一次:
new MySingletonOb对象(“xmlFilePath”)
。你能记住这一点来更新你的代码吗?@gus.jz它只实例化一次。在构造函数中添加你想要的所有参数。@gus.jz,一旦参考链接。我将更新我的代码bean是单例的,除非你另外指定MySingleToObject在我的例子中是一个外部库。它从xml文件读取,我想安装只声明一次:
newmysingletonobject(“xmlFilePath”)
。您能用