2

MongoService クラスがあります

public class MongoService {

    private final Mongo mongo;
    private final String database;
    private static final Logger LOGGER = LoggerFactory.getLogger(MongoService.class);

    public MongoService(@Nonnull final String host, final int port, @Nonnull final String db) throws UnknownHostException {
        mongo = new Mongo(host, port);
        database = db;
    }

    public void putDocument(@Nonnull final DBObject document) {
        LOGGER.info("inserting document - " + document.toString());
        mongo.getDB(database).getCollection(getCollectionName(document)).insert(document, WriteConcern.SAFE);
    }

    public void putDocuments(@Nonnull final List<DBObject> documents) {
        for (final DBObject document : documents) {
            putDocument(document);
        }
    }

    @Nullable
    public <T extends DBObject> T getDocument(@Nonnull final T document) {
        final DBCollection collection = mongo.getDB(database).getCollection(getCollectionName(document));
        collection.setObjectClass(document.getClass());
        //noinspection unchecked
        return (T) collection.findOne(document);
    }

    @Nonnull
    public <T extends DBObject> List<T> getDocuments(@Nonnull final T document) {
        final List<DBObject> documents = new ArrayList<DBObject>();
        final DBCollection collection = mongo.getDB(database).getCollection(getCollectionName(document));
        collection.setObjectClass(document.getClass());
        final DBCursor dbCursor = collection.find();
        if (dbCursor != null) {
            documents.add(dbCursor.next());
        }
        //noinspection unchecked
        return (List<T>) documents;
    }
}  

ファイルからホスト、int、ポート、データベースを読み取るこのクラスのシングルトン Bean を作成したい

質問

これを達成するにはどうすればよいですか?

  • ファイルから構成パラメーターを提供する最良の方法は何ですか
  • どうすればシングルトンビーンにできますか?

私はSpringが初めてで、これを達成する方法がよくわかりません

4

2 に答える 2

4

Spring Bean はデフォルトでシングルトンなので、..

@Service
public class MongoService

注釈を使用して構成された Spring Bean にプロパティ値を注入するにはどうすればよいですか? を確認してください。プロパティを注入するために、それはかなり気の利いたものです。

于 2012-06-27T19:10:49.537 に答える
1

次のようにコンストラクターに値を渡すことができます

<bean id="mongoService" class="MongoService">
  <constructor-arg name="host" type="java.lang.String" value="localhost"/>
  <constructor-arg name="port" type="long" value="1234"/>
  <constructor-arg name="db" type="java.lang.String" value="dbname"/>
</bean>

name注:これはSpring 3の構文であり、古いバージョンはパラメーターをサポートしていません。削除するだけです。

プロパティをさらに外部化したい場合は、これを行うことができます。

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="locations" value="jdbc.properties"/>
</bean>

<bean id="mongoService" class="MongoService">
  <constructor-arg name="host" type="java.lang.String" value="${host}"/>
  <constructor-arg name="port" type="long" value="${port}"/>
  <constructor-arg name="db" type="java.lang.String" value="${db}"/>
</bean>

jdbc.propertiesがクラスパスにあることを確認してください。

jdbc.propertiesのエントリ

host=localhost
port=1234
db=dbname

編集:2番目の質問ですが、このmongoServiceBeanはデフォルトでシングルトンです。

于 2012-06-27T19:20:45.033 に答える