Bean用のクラスはpublicコンストラクタを持たず、プライベートしかできません。 このプライベートコンストラクタは、Beanの作成時に呼び出されますか?おかげさまで 専用コンストラクタを持つJava Spring Bean
答えて
はい、Springはプライベートコンストラクタを呼び出すことができます。可視性に関係なく、適切な引数を持つコンストラクタが見つかった場合、コンストラクタをアクセス可能に設定するためにリフレクションを使用します。
docsへの参照を教えてください。コンストラクターにはパラメーターがあり、xmlファイルにはこの引数に値が割り当てられています。 – user710818
あなたは、beanが特にprivate bean(){...}のようなものを持っていれば、それを呼び出すことができますか?それはどのように可能であり、それは「プライベート」の全目的に反するものです。 –
申し訳ありませんが、私はおそらくそれが引数なしコンストラクタであることについて間違っています。私は自分のプロジェクトで気づいたことだけに挑戦しています。 Springのドキュメンテーションでどこでも見たことがあるとは言えません。しかしこれはインスタンス化を行うクラスのjavadocです。http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/beans/BeanUtils.html#instantiateClass(java.lang.reflect.Constructor,%20java.lang.Object .. 。) –
通常、このようなBeanには静的なファクトリメソッドがあります。そのメソッドを指定して、そのBeanのインスタンスを取得することができます。 3.3.1.3 here.を参照してください。これは、可視性の制限に反するのではなく、Springが推奨する方法です。
strange、静的メソッドはありません。パブリックコンストラクタはありませんが、私がデバッグするときにプライベートコンストラクタが呼び出されます! by sun.reflect.NativeConstructorAccessorImpl – user710818
詳細/コードなしでは、それ以上コメントすることはできません! –
あなたが間違っていると思います。特定のコードはありません - 私はデバッガでは標準のsun/springメソッドのみを参照しています。 – user710818
あなたはいつもThe IoC container: Instantiation using an instance factory methodから、むしろデフォルトコンストラクタに頼るよりも、Beanを作成するファクトリメソッドを使用することができます。これは、あなたのBeanのデフォルト以外のコンストラクタを使用することができるという利点があり
<!-- the factory bean, which contains a method called createInstance() -->
<bean id="serviceLocator" class="com.foo.DefaultServiceLocator">
<!-- inject any dependencies required by this locator bean -->
</bean>
<!-- the bean to be created via the factory bean -->
<bean id="exampleBean"
factory-bean="serviceLocator"
factory-method="createInstance"/>
、およびファクトリメソッドBeanの依存関係も同様に挿入できます。
ですが、私は工場を見つけることができません。別の方法で存在する可能性がありますか? – user710818
@Matthew:彼は厄介な第三者コードの周りにSpringを改造しているようだ。それはちょうど厄介なことです。 –
@Donal、いいえ、私は彼がコメントで言ったことを理解していませんでした。 –
はい、プライベートコンストラクタは、春に呼び出されます。 私のコードを考えてみましょう:
Bean定義ファイル:
<bean id="message" class="com.aa.testp.Message">
<constructor-arg index="0" value="Hi Nice"/>
</bean>
Beanクラス:
package com.aa.testp;
public class Message {
private String message;
private Message(String msg) {
// You may add your log or print statements to check execution or invocation
message = msg;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public void display() {
System.out.println(" Hi " + message);
}
}
上記のコードは正常に動作します。したがって、春はプライベートコンストラクタを呼び出しました。
- 1. 子プロパティタグを持つカスタムSpring Beanタグ
- 2. アプリケーションコンテキスト(Spring)のJava Bean定義
- 3. 実行時コンストラクタ引数を持つスプリングBean
- 4. 一時的にインジェクションされたSpringサービスBeanを持つJSF 2 viewScope bean
- 5. Springを持たないHibernate SessionFactory bean
- 6. Spring autowired bean作成
- 7. Spring MVCコントローラのコンストラクタ
- 8. 専用のコンテンツを持つWordpressフィード
- 9. いくつかのプロパティ値を持つJava Beanのクローニング - BeanUtils
- 10. パラメータ付きSpringプロトタイプBean?
- 11. JPA pure approchを持つSpring
- 12. @Namedを持つスプリングセットBean名
- 13. Spring Bean Creationヘルプ
- 14. Spring ApplicationContext Beanスコープ
- 15. メインメソッドクラスのSpring beanインジェクション
- 16. SpringリクエストスコープBean
- 17. ref-beanを使用してspring beanプロパティー値を設定する
- 18. SpringとScala - Function1のコンストラクタ - arg
- 19. セッション対応のSpring Bean
- 20. Java Beanの検証:クラスレベルの制約を持つGroupSequence
- 21. SpringキャッチBean作成例外
- 22. カスタムスコープを持つSpringアプリケーションでBeanをプログラムで「公開」する方法
- 23. Spring Beanの配線
- 24. Bean定義プロファイルを使用したSpring 3.1 Beanの可視性
- 25. Spring、Bean、enumのvalueOf
- 26. JavaプログラミングのBean
- 27. BeanがSpringで複数の親を持つことは可能ですか?
- 28. null SpringセッションでHeaderHttpSessionStrategyを持つHttpSessionManager
- 29. そのオブジェクトのインスタンスを作成するメソッドを持つJavaコンストラクタ
- 30. Java汎用コンストラクタ
これを試してから結果を投稿するのはどうですか? – dm3
難しいです - 私はすべてのソースを持っていません。 – user710818