使用问题:Spring AOP与AspectJ编织
我正在使用SpringAOP分析一个遗留应用程序,我想获得一些关于我需要做出的决策的数据点 这就是我到目前为止所做的: 我已经使用SpringAOP创建了代码和配置,这将帮助我分析Spring容器管理的bean 在分析dao层时,我发现遗留应用程序使用c3p0框架——具体地说,是ComboPooledDataSource类。因为这个类是最终类,我不能再使用SpringAOP了——因为cglib不能为最终类创建代理 面对这个障碍,我计划使用方面编译时编织技术。 我想知道这是否是正确的决定,或者是否有其他方法可以使用SpringAOP本身克服这个问题。请让我知道 配置信息:使用问题:Spring AOP与AspectJ编织,spring,aop,aspectj,Spring,Aop,Aspectj,我正在使用SpringAOP分析一个遗留应用程序,我想获得一些关于我需要做出的决策的数据点 这就是我到目前为止所做的: 我已经使用SpringAOP创建了代码和配置,这将帮助我分析Spring容器管理的bean 在分析dao层时,我发现遗留应用程序使用c3p0框架——具体地说,是ComboPooledDataSource类。因为这个类是最终类,我不能再使用SpringAOP了——因为cglib不能为最终类创建代理 面对这个障碍,我计划使用方面编译时编织技术。 我想知道这是否是正确的决定,或者是否
<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应该能够代理decorator,而不会变得更聪明 为了示例起见,假设SampleDaoImpl类中的dataSource属性为javax.sql.dataSource类型: 将其连接到弹簧中,如下所示:
<bean id="sample_data_source" class="mystuff.ComboPooledDataSourceDecorator">
<property name="delegate">
<bean class="com.mchange.v2.c3p0.ComboPooledDataSource">
...
</bean>
</property>
</bean>
这解决了我的问题-谢谢!但是,我可能会选择AspectJ weaving,因为Spring还未涵盖应用程序的某些部分。@KM如果答案对您有效,您应该接受答案投票计数器下方有一个勾号
<bean id="sample_data_source" class="mystuff.ComboPooledDataSourceDecorator">
<property name="delegate">
<bean class="com.mchange.v2.c3p0.ComboPooledDataSource">
...
</bean>
</property>
</bean>