マスターコントローラーにJava.util.prefs.Preferences Beanを注入しようとしています。コントローラーは次のようになります。
@Controller
class MyController {
@Autowired
private Preferences preferences;
}
Application-context.xmlファイルは、Java.util.prefs.PreferencesのBeanを作成します。ファクトリメソッドを使用するため、Beanを作成するための次のエントリがあります。
<bean id="preferences" class="Java.util.prefs.Preferences" factory-method="userNodeForPackage" />
Preferences.userNodeForPackage(param)は、Preferenceに関連するクラスをパラメーターとして受け取ります。この場合、Springは呼び出しを実行してBeanを作成する必要があります。
Preferences.userNodeForPackage(MyController.class);
ファクトリメソッドでインスタンス化されたSpring Beanにクラスを渡すにはどうすればよいですか?ありがとう
環境情報:
Java 7
Spring 3.1
constructor-arg
要素を指定できます
<bean id="preferences" class="Java.util.prefs.Preferences" factory-method="userNodeForPackage">
<constructor-arg type="Java.lang.Class" value="com.path.MyController" />
</bean>
これは公式ドキュメント here 、セクション5.4.1で説明されています。
静的ファクトリメソッドへの引数は、コンストラクタを実際に使用した場合とまったく同じように、要素を介して提供されます。ファクトリーメソッドによって返されるクラスの型は、この例では静的ファクトリーメソッドを含むクラスと同じ型である必要はありません。インスタンス(非静的)ファクトリメソッドは(クラス属性の代わりにfactory-bean属性を使用することを除いて)基本的に同じ方法で使用されるため、ここでは詳細を説明しません。
さて、XMLベースの設定方法はわかりませんが、Configuration
クラスを介してインスタンス化する方法を説明できます。
@Configuration
public class Config {
@Bean(name="preferences")
public Java.util.prefs.Preferences preferences() {
// init
return Java.util.prefs.Preferences.userNodeForPackage(YourExpectedClass.class);
}
}
追伸:
完全な注釈ベースのアプローチを使用している場合、web.xmlでスキャンするための構成クラス/パッケージを追加する必要があります[contextClass=org.springframework.web.context.support.AnnotationConfigWebApplicationContext]
または以下のように設定ファイルで:
<context:component-scan base-package="com.comp.prod.conf" />
public class Preferences
{
SomeBean someBean;
public void setSomeBean(SomeBean someBean){
this.someBean = someBean;
}
public static Preferences createSampleBeanWithIntValue(SomeBean someBean)
{
Preferences preferences= new Preferences();
preferences.setSomeBean(someBean);
return preferences;
}
}
<bean id="someBean" class="Java.util.prefs.SomeBean"/>
<bean id="preferences" class="Java.util.prefs.Preferences" factory-method="userNodeForPackage" >
<constructor-arg ref="someBean "/>
</bean>
リファレンスをご覧ください
Springフレームワークは、ファクトリメソッドを使用してBeanを注入する機能を提供します。そのために、bean要素の2つの属性を使用できます。
factory-method:Beanを注入するために呼び出されるファクトリメソッドを表します。 factory-bean:factoryメソッドが呼び出されるBeanの参照を表します。ファクトリメソッドが静的でない場合に使用されます。クラスのインスタンスを返すメソッドは、ファクトリメソッドと呼ばれます。
public class A {
public static A getA(){//factory method
return new A();
}
}
最初に、xmlファイルまたはアノテーションを使用して、「Preferences」クラスのBeanを作成します。
これを使用できます<context:annotation-config>
xml構成を使用してBeanを作成して@Autowiredアノテーション機能をアクティブにした場合
(または)
<context:component-scan base-package="com.estudo.controller" />
アノテーションを使用してBeanを作成した場合。
注:上記のタグは、spring servlet xmlファイルで定義します