2

こことspringsource.orgの両方で、Springとサーブレットの自動配線に関するすべての質問と回答を読んだと思いますが、それでも機能させることができません。

私がやりたいのは、サーブレットにデータソースを自動的に設定することだけです。コンテナがSpringではなくサーブレットを作成することを理解しています。

これが私のテストサーブレットからのコードです:

package mypackage.servlets;

imports go here...

@Service
public class TestServlet extends HttpServlet
{
  private JdbcTemplate _jt;

  @Autowired
  public void setDataSource(DataSource dataSource)
  {
    _jt = new JdbcTemplate(dataSource);
  }

  etc etc

私のapplicationContext.xmlには、次のものがあります。

<context:annotation-config />
<context:component-scan base-package="mypackage.servlets />
<import resource="datasource.xml" />

そして私のdatasource.xmlで:

<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/db" />

これを機能させることができない場合は、サーブレットのinitメソッドでWebApplicationContextUtilsを使用しますが、これまで読んできたすべてのことを実行した後で、これを機能させたいと考えています。

Spring 3、Java1.6を使用しています。

ありがとう、

ポール

4

2 に答える 2

1

サーブレットを Spring MVC コントローラーに置き換える必要があります。Spring は、他の誰かによって作成されたクラス (サーブレット) を注入しないため、Spring 自体 (@Configurable を除く) を注入しません。

(非常に単純な例を得るには、STS Spring Template Project: MVC を参照してください)。

于 2011-03-17T15:53:50.160 に答える
0

私がやりたかったことは、サーブレットで無料で DataSource 参照を取得することでした。つまり、一部のクラスで静的な getDatasource メソッドを呼び出さないようにしました。

ここに私が学んだことと、それをどのように機能させたかを示します。

サーブレットは、Spring によって構成または自動配線することはできません。サーブレットは、Spring のアプリ コンテキストが読み込まれる前に作成されます。問題 SPR-7801 を参照してください: https://jira.springsource.org/browse/SPR-7801

私がしたことは、applicationContext.xml で DataSource を作成し、それをプロパティとしてエクスポートすることでした。

<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/db" />
<bean class="org.springframework.web.context.support.ServletContextAttributeExporter">
  <property name="attributes">
    <map>
      <entry key="myDatasource">
        <ref bean="dataSource"/>
      </entry>
    </map>
  </property>
</bean>

サーブレットの init メソッドで、次のプロパティを読み取ります。

public void init(ServletConfig config)
{
  Object obj = config.getServletContext().getAttribute("myDatasource");
  setDataSource((DataSource)obj);
}

public void setDataSource(DataSource datasource)
{
  // do something here with datasource, like 
  // store it or make a JdbcTemplate out of it
}

サーブレットからデータベースにアクセスする代わりに DAO を使用していた場合、それらを @Configurable とマークすることで @Autowired に接続するのは簡単で、@Transactional やその他の Spring グッズを使用することもできます。

于 2011-03-18T21:01:59.967 に答える