使い方の質問:春AOP対AspectJのウィービング
質問
私は春AOPを使用して、レガシーアプリケーションのプロファイリングに取り組んでいると私は私が行う必要があります決定の周りにいくつかのデータポイントを取得したい。
これは私がこれまでにやっていることです。 私は春のコンテナによって管理されている豆をプロファイルするために私を助ける春AOPを使用してコードと構成を作成しています。
具体的には、ComboPooledDataSource
クラス - DAO層をプロファイリングしながらは、私は、レガシーアプリはC3P0フレームワークを使用していることを見つけます。このクラスはfinalクラスであるので、私はCGLIBは、最終的なクラス用のプロキシを作成することはできませんので、春AOPで任意のlonger-作業作業することができません!
このバリケードに直面したが、私は、アスペクトコンパイル時織り技法を使用することを計画しています。 私は、これは正しい判断であるかどうかを知りたいか、春AOP自体を使用してこの問題を克服するが、他の方法があります。私に知らせてくださいます。
の構成情報:
<bean id="sample_dao" class="com.foo.SampleDaoImpl">
<property name="dataSource" ref="sample_data_source"/>
..
<property name="sampleProperty" ref="sample_bean"/>
</bean>
<bean id="sample_data_source" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close" depends-on="some_sample">
<property name="driverClass" value="${driverClassName}"/>
<property name="jdbcUrl" value="${url}"/>
<property name="user" value="${username}"/>
<property name="password" value="${password}"/>
<property name="initialPoolSize" value="1"/>
<property name="maxPoolSize" value="4"/>
<property name="acquireIncrement" value="1"/>
<property name="preferredTestQuery" value="select 1 from sample_table"/>
<property name="idleConnectionTestPeriod" value="30"/>
<property name="testConnectionOnCheckin" value="true"/>
<property name="acquireRetryAttempts" value="3"/>
<property name="connectionCustomizerClassName" value="com.foo.SampleConnectionCustomizer"/>
解決
は、すでにプロジェクトではAspectJを使用するかどうかに応じて、次のアプローチに簡単に見つけるかもしれません
非最終デコレータのクラスのインスタンスであなたのComboPooledDataSourceインスタンスをラップ。 CGLIBは賢明任意ことなくデコレータプロキシことができるようになります。
と仮定 - 例のために - あなたのdataSource
クラスからSampleDaoImpl
属性のタイプがjavax.sql.DataSource
であること。
public class ComboPooledDataSourceDecorator implements javax.sql.DataSource {
private ComboPooledDataSource delegate;
public void setDelegate(ComboPooledDataSource delegate) {
this.delegate = delegate;
}
public Connection getConnection() {
return delegate.getConnection();
}
// other methods of javax.sql.DataSource
}
このような春にワイヤーそれます:
<bean id="sample_data_source" class="mystuff.ComboPooledDataSourceDecorator">
<property name="delegate">
<bean class="com.mchange.v2.c3p0.ComboPooledDataSource">
...
</bean>
</property>
</bean>
所属していません StackOverflow