0

spring1.2方法拦截器,怎么拦截指定的方法,!!!!

最近有个需求就是在日志的记录,日志必须记录到数据库。并却把执行的SQL也写入数据库,DAO模块用的是ibatis框架。于是自然就想到了aop技 术。但是由于现在spring版本比较低 为1.2.8版本。现在就是给DAO加一个代理类,就在spring容器内注册了一个自己的拦截器,但是spring拦截器,但是貌似spring拦截器 只能拦截具体的某个bean,但是我现在的目的是某个bean的一些方法
(像查询之内的操作就不被拦截,也不记录到日志)通过发射获取到SQL。

1.代理类通过CGLIB库生成
2.spring版本1.2.8
具体的拦截器配置代码:
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator" >
<property name="proxyTargetClass" value="true"></property>    
                <property name="beanNames">
                <list>
                   <value>*Dao.add</value>
                    </list>
                </property> 
              
                <property name="interceptorNames">    
                        <list>        
                              <value>logInterceptor</value>      
    
                        </list>    
                </property>   
        </bean>  
3.注明:*************

  在红色处:我想在此处加上类似这样的配置 但是此配置就连bean都不能拦截了,如果换成 <value>*Dao</value> 就能拦截所有的bean了和所有方法。这样那些查询就会被拦截到。
但是我又不想在程序判断是否查询方法,因为如果在查询判断,也会生成代理对象。这样做效率就会低很多。

网大家多多指教,小弟感激不及。



问题补充:谢谢 问题已经解决了,后来看了一下spring关于方法拦截和bean拦截的代码,发现了一个NameMatchMethodPointcutAdvisor(切入点为匹配方法)的类,再加上BeanNameAutoProxyCreator(代理bean)。

A.
1.先匹配bean
2.后匹配方法
这样做侧重点就在于bean
BeanNameAutoProxyCreator是先匹配bean,匹配bean的时候已经生成了代理DaoProxy,这样再去看是否拦截指定的方法,已经毫无意义了。

B.
1.先匹配方法
2.再匹配bean
这样侧重点就在方法了,自然就拦截不到不需要拦截的方法了。
所以现在的侧重点是先匹配方法,然后去匹配bean,这样不需要拦截的方法,自然就不会生成代理而去调用目标对象了。
所以先用NameMatchMethodPointcutAdvisor匹配方法
再用BeanNameAutoProxyCreator匹配bean这样问题就搞定了。

   我在Manager中调用Dao代理的时候,首先Manager通过注入进来的Dao,然后去看具体使用这个bean调用的什么方法,通过 NameMatchMethodPointcutAdvisor过滤,然后通过BeanNameAutoProxyCreator过滤,问题就搞定了。