猿问

将 SQLiteDatabase 实例用作 Application 类中的静态字段是个好主意吗?

Spring 只会在实例化 bean 之后或实例化时注入依赖项(取决于是否使用构造函数注入)。MyService但是,您现在在初始化 bean 之前发生的字段初始化期间访问依赖项。因此,它无法MyService在字段初始化期间访问,因为它尚未注入。


您可以通过更改为routingKeys同时在构造函数中使用构造函数注入和初始化来简单地修复它:


@Configuration

public class RabbitConfiguration {


    private List<String> routingKeys ;

    private MyService myService;


    @Autowired

    public RabbitConfiguration(MyService myService){

        this.myService = myService

        this.routingKeys = writeRoutingKeys();

    }


    private List<String> writeRoutingKeys() {

        return myService.getRoutingKeys(); 

    }

 }

或者简单地说:


@Autowired

public RabbitConfiguration(MyService myService){

    this.myService = myService

    this.routingKeys = myService.getRoutingKeys();

}我正在开发一个字典 android 应用程序。我在应用程序中使用数据库来获取单词及其含义。SQLiteDatabase在课堂上使用静态Application并在某些活动和课程中使用它是一种好方法吗?


public class App extends Application {

  public static SQLiteDatabase database;


  @Override

  public void onCreate() {

    super.onCreate();


    database = SQLiteDatabase.openOrCreateDatabase(

            Constants.MAIN_DB_PATH,

            null);

  }

并以这种方式使用它:


public class MainActivity extends AppCompatActivity {

    ...


    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);


        ...


        Cursor cursor = App.database.rawQuery(query, null);


        ...


    }

}

和:


public class MyClass{

    ...


    public MyClass() {

        ...


        Cursor cursor = App.database.rawQuery(query, null);


        ...

    }


}


元芳怎么了
浏览 101回答 1
1回答

隔江千里

由于您只需要此对象的一个实例,因此这是一种可行的方法。您可以定义数据库:public class Database{&nbsp; &nbsp; private static SQLiteDatabase localDatabase = null;&nbsp; &nbsp; private Database(){}&nbsp; &nbsp; public static SQLiteDatabase getLocalDatabase(){&nbsp; &nbsp; &nbsp; &nbsp; if (localDatabase == null){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; localDatabase = SQLiteDatabase.openOrCreateDatabase(...);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; return localDatabase;&nbsp; &nbsp; }}在您的活动代码中,您可以像这样使用它:Database.getLocalDatabase().rawQuery(...);&nbsp;编辑:要应用单例模式的所有规则,还要添加一个私有和空的构造函数,这样您就不会意外地实例化对象。
随时随地看视频慕课网APP

相关分类

Java
我要回答