ここで尋ねる決定的な答えが見つからない - 1つのBeanに対してのみCGLIBプロキシを有効にすることは可能ですか?シナリオは次のとおりです - 私はautowiredクラスを持っていて、インターフェイスを実装していないので、今度はそのメソッドの小さなサブセットをカバーするインターフェイスを追加したいと思います。 このクラスのみが、Springのデフォルト動作に影響を与えないCGLIBを使用している(JDKの動的プロキシが優先されます)?
私はJavaベースの設定を使用しています。Springはインタフェースの代わりに実装を選択的に使用する
-1
A
答えて
1
クラスは現在、クラスベースのプロキシを有効にするためのサポートはありません。代わりに、自分でプロキシを作成する必要があります。これの欠点は、Springがどのように動作するかについての親密な知識が必要であることです(これは私が持っていることです:))。
与えられたクラスにクラスベースのプロキシを作成するには、ProxyFactory
またはProxyFactoryBean
を使用する必要があります。 @Bean
メソッドは、実際のクラスではなくプロキシを返します。 Springはそれがすでにプロキシであることを検出するのに十分なほど巧妙です(少なくともそれはすべきです)。もう一度プロキシするのではなく、既に作成されたプロキシにアドバイスを追加する必要があります。自動配線やSpringが提供する他のすてきなものを壊さずにこの作業を行うには、これを処理する特定のBeanPostProcessor
を作成したいと思うかもしれません。
public YourBeanPostProcessor implements BeanPostProcessor {
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
if (bean instanceof YourBean) {
ProxyFactory factory = new ProxyFactory(bean);
factory.setProxyTargetClass(true);
return factory.getProxy();
}
return bean;
}
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
}
これは通常、BeanPostProcessor
と同じようにBeanとして登録します。
@Bean
public static YourBeanPostProcessor yourBeanPostProcessor() {
return new YourBeanPostProcessor();
}
事前に作成されたクラスベースのプロキシがあり、これをSpringが検出して使用する必要があります。
関連する問題
- 1. 選択は代わりに
- 2. Apache Httpclientの代わりにSpring RestTemplateを使用するには?
- 3. 代わりの選択onClick
- 4. jpaの代わりにmybatisを使用するspring-hateoasを実装する方法
- 5. TypeScript宣言の代わりに実装
- 6. 実行時に使用するCRTP実装を選択する
- 7. Spring MVCとHibernateでモデルの代わりにBeanを使用する目的
- 8. Spring Security:FilterInvocationの代わりにMethodInvocationを使用する方法
- 9. スプリングバッチの代わりにSpringクラウドデータフローを使用する利点
- 10. ジャンゴ - models.CharField-選択肢 - オプションボタンの代わりに、選択ボックス
- 11. スタイリングの選択とチェックボックスの代わりにUniformjsの代わりに?
- 12. Spring-Boot:Stormpathの代わりに
- 13. 代わりにstdoutを慣用的に使用する
- 14. Spring:実際のオブジェクトの代わりにモックを作成する
- 15. キーの代わりに選択フィールドの値を取り出す
- 16. selectedIndexの代わりに選択したテキストを使用します
- 17. 次のように選択する代わりに、AngularJS
- 18. Nettyの代わりにJettyでSpring WebClientを使用するには?
- 19. each()の代わりにjquery live()を実装する方法
- 20. スタティックカラーの代わりにカラーピッカーを実装する方法
- 21. JDBCの代わりにバックエンドのAPIを使用したSpringセッション
- 22. Beansを使用する代わりにSpringエンティティを使用します。
- 23. SQL Serverで複数選択の代わりに単一選択を返す
- 24. .jarファイルの代わりにSpringの.classを実行します
- 25. springの代わりにthymeleaf jspを使用する利点は何ですか
- 26. Mercurial。放棄 - 代わりの実装ブランチプラクティス?
- 27. divの代わりにdivの代わりにJSのプリペンドを使用する
- 28. nullの代わりにデフォルト値を返すJavaマップの実装
- 29. 選択フォームでimgの代わりにiconを使用するにはどうすればいいですか?
- 30. 選択メニューの代わりにオートコンプリートフィールドを探しています
なぜですか?あなたが間違っているインターフェースを使用している間に具体的なインスタンスにプログラムする必要がある場合、または少なくともあなたのインターフェースはあなたが表現しようとしている意図と一致しません。 –
@ M.Deinum私は知っている、知っている、ありがとう。あなたはその質問に対する答えを知っていますか? – skwisgaar
答えは基本的にそれを行うことではなく、適切なインターフェースを持ち、それを使用することではありません。この単一のインスタンスをプロキシ化するだけの場合は、プロキシを手動で作成するか、クラスベースのプロキシを有効にしてからすべてのものに使用する必要があります。 –