2011-12-20 20 views
1

サーブレットコンテナとしてtomcat 6でCDI(Weld)を使用しています。コンフィグレーション内にWeldLifecycleListenerを持たせることで、正当性検査注入を行うことはかなり簡単です。春の自動依存性注入

私の質問は、Spring用のWeldLifecycleListenerに相当するApplicationContextからのBeanのインスタンス化を避けることですか?

+0

「アプリケーションのコンテキストを避ける」とはどういう意味ですか? –

答えて

1

私はWeldLifecycleListenerわからないですが、あなたは春のconfigファイルでのSpring Beanにautowire属性を使用することができ、自動依存性注入

  1. のためのポインタを与えることができます。これについて読む
  2. 名前で豆を探すために、タイプと@Qualifierでオートワイヤリングする場合は、@Autowiredアノテーションを使用することもできます。
  3. @Resource注釈は、名前による自動配線に使用できます。

  4. Spring設定でBeanを定義したくない場合は、コンポーネントスキャンを使用してコンポーネントを自動検出し、beanの@Componentアノテーションを使用します。この+ @ Autowire/@ Resourceは設定を簡素化します。

2

春3では、あなたは、このような@Named@InjectとしてJSR-330注釈を(http://blog.springsource.com/2009/09/29/spring-framework-3-0-rc1-released/を参照)を使用することができます。あなたはSpring構成ファイルに以下を追加することによって、コンポーネントスキャニングを有効にする

@Namedで注釈クラスが自動的に検出され、インスタンス化される:

${base-package}が直接的に(すべてのコンポーネントを含むパッケージである
<context:component-scan base-package="${base-package}" /> 

またはサブパッケージで)。

+0

これまでの回答をありがとうが、私の質問は、豆(java、xml、注釈)を定義する方法ではありませんでした。これまでのところ問題ありません。 Springでは、私はapplicationContextから取得したBean内で依存関係を解決することしかできませんでした。たとえば、次のように動作します。 ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext()); testBean =(TestBean)ctx.getBean( "testBean"); testBean内の依存関係は正しく解決されています。しかし、私は直接testBeanを呼び出すことはできません@AllicationContextを呼び出さずに。 – Sordul

+0

明確にするために、CDIによって管理されるサーブレットがありますが、Springに依存性を注入したいのですか?私はCDI専門家ではありませんが、CDIまたはSpringのいずれかを使用してそれらを管理する必要があると推測します。そうしないと、カスタムコンテキストを取得して依存関係を注入するカスタムコードを追加する必要があります。 –

+0

'@ Component'や' @Controller'をクラスに追加した場合は、依存関係を挿入しようとしているかもしれません(つまり、 'ctx = WebApplicationContext ...'を記述するクラス)。 –