3

私は次の状況にあります
-ファイルからホスト、ポート、データベースを読み取るMongoServiceクラスがあります

xml構成

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>file:///storage/local.properties</value>
            </list>
        </property>
    </bean>
</beans>  

local.propertiesは次のように なります

### === MongoDB interaction === ###
host="127.0.0.1"
port=27017
database=contract

およびMongoServiceクラスとして

@Service
public class MongoService {

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

    public MongoService(@Nonnull final @Value("#{ systemProperties['host']}") String host, @Nonnull final @Value("#{ systemProperties['port']}") int port, @Nonnull final @Value("#{ systemProperties['database']}") String db) throws UnknownHostException {
        LOGGER.info("host=" + host + ", port=" + port + ", database=" + db);
        mongo = new Mongo(host, port);
        database = db;
    }
}

Beanが正常であることをテストしたい場合は、
MongoServiceTest.javaで次のようにします。

public class MongoServiceTest {

    @Autowired
    private MongoService mongoService;

}

それはそれを言って文句を言うcan not identify bean for MongoService

次に、上記のxmlに以下を追加します

<bean id="mongoService" class="com.business.persist.MongoService"></bean>

それからそれは言って文句を言う"No Matching Constructor found"

私がやりたいこと

a。)MongoServiceは、@Autowiredから構成パラメータを読み取る必要があります。<value>file:///storage/local.properties</value>

質問

a。)コンストラクターの値へのアクセスは正しいですか? (file name is local.properties and I am using @Value("#{ systemProperties['host']}") syntax)

@Autowired private MongoService mongoServiceb。)正しくロードされ、local.propertiesファイルから値を読み取る ように機能させる必要があるのは何ですか。

PS私はSpringを初めて使用しますが、これを機能させる方法がよくわかりません。

よろしくお願いします

4

2 に答える 2

2

次のように、configurexmlにconstructor-argを追加する必要があると思います。

<bean id="mongoService" class="com.business.persist.MongoService">

        <constructor-arg type="java.lang.String">
            <value>host</value>
        </constructor-arg>

        <constructor-arg type="int">
            <value>port</value>
        </constructor-arg>

        <constructor-arg type="java.lang.String">
            <value>database</value>
        </constructor-arg>

    </bean>

よくわかりませんが、Bstの方法はJavaベースのBean構成を追加することです。xmlからBean定義を削除し、次のようにJavaベースのcongfigを追加します

@Service
public class MongoService {

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

@bean
    public MongoService(@Nonnull final @Value("#{ systemProperties['host']}") String host, @Nonnull final @Value("#{ systemProperties['port']}") int port, @Nonnull final @Value("#{ systemProperties['database']}") String db) throws UnknownHostException {
        LOGGER.info("host=" + host + ", port=" + port + ", database=" + db);
        mongo = new Mongo(host, port);
        database = db;
    }
}

HTH

于 2012-06-29T19:25:00.203 に答える
0

デフォルトでは、Springはデフォルトのコンストラクター(引数なし)を使用してオブジェクトをインスタンス化し、setterメソッドを使用してすべてのプロパティを設定します。セッターを使用したくない(または使用できない)場合、またはデフォルトのコンストラクターを定義したくない場合は、コンストラクター引数として何を渡すかをSpringに指示する必要があります。

これがどのように行われるかを説明するブログ投稿です:
http ://www.javalobby.org/java/forums/t18396.html

基本的な構文は次のようになります。

<bean name="MyBean" class="com.example.BeanClass">
  <constructor-arg index="0"><ref bean="OtherBeanName"/></constructor-arg>
</bean>

index属性はオプションですがconstructor-arg、コンストラクターへのパラメーターと同じ順序でXML要素を順序付ける必要があります。

于 2012-06-29T19:07:07.627 に答える