测试程序
/**
* fanym版权所有
*/
package com.gc.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import com.gc.action.Logic2;
import com.gc.impl.LogicInterface;
/**
* @author fanym
*
*/
public class TestAop {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ApplicationContext actx=new FileSystemXmlApplicationContext("exception_config.xml");
LogicInterface logic=(LogicInterface)actx.getBean("logic1Proxy");
try {
logic.doInsert("李四");
logic.doUpdate("王五");
logic.doDelete("张三");
} catch (Exception e) {
// TODO: handle exception
}
}
}
exception_config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="Logic1" class="com.gc.action.Logic1"/>
<bean id="Logic2" class="com.gc.action.Logic2"/>
<!--设定为自动代理-->
<bean id="autoProxyCreator" class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>
<!--负责记录有异常发生时的信息-->
<bean id="exceptionHandler" class="com.gc.action.ExceptionHandler"/>
<bean id="exceptionHandlerAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="advice">
<ref bean="exceptionHandler"/>
</property>
<!--对指定类的任何方法有效-->
<property name="patterns">
<value>.*.*</value>
</property>
</bean>
<!--负责记录方法执行的时间-->
<bean id="timeHandler" class="com.gc.action.TimeHandler"/>
<bean id="timeHandlerAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="advice">
<ref bean="timeHandler"/>
</property>
<property name="patterns">
<value>.*.*</value>
</property>
</bean>
<bean id="logic1Proxy" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<value>com.gc.impl.LogicInterface</value>
</property>
<property name="target">
<ref bean="Logic1"/>
</property>
<!-- 指定要代理的类 -->
<property name="interceptorNames">
<list>
<value>timeHandlerAdvisor</value>
</list>
</property>
</bean>
<bean id="logic2Proxy" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyTargetClass">
<value>true</value>
</property>
<property name="target">
<ref bean="Logic2"/>
</property>
<!-- 指定要代理的类 -->
<property name="interceptorNames">
<list>
<value>exceptionHandlerAdvisor</value>
</list>
</property>
</bean>
</beans>
执行时报错:
Exception in thread "main" java.lang.NullPointerException
at com.gc.action.TimeHandler.invoke(TimeHandler.java:24)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:176)
at $Proxy1.isSingleton(Unknown Source)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:278)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:313)
at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:89)
at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:74)
at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:65)
at com.gc.test.TestAop.main(TestAop.java:23)
折腾了半个小时后,问题终于发现了,原来在用CGLIB代理时,还设置了spring的aop自动代理,所以,把
<!--设定为自动代理-->
<bean id="autoProxyCreator" class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>删掉后,就可以了。
反思:还是基础知识不牢固。
分享到:
相关推荐
大致上找到了特征码没完没了的原因了 很可能是因为保护区域设置得过大,其中含有相当数量的隐含病毒特征, 导致启发式扫描的极高的实现机率。 实际测试中也发现当没有设置保护区域时, 定位出的特征码就很有限。...
另一个简单的做法是:先手动在样本所在目录下建一个名为 output 的子目录,然后在选择目录的对话框点 “取消”,这样输出文件就都放到这个output 目录下了。 3. 设置保护片段时,如果所保护的片段本身是...
4、修正升级服务器选择的一个问题。 5、请大家修改ESET升级服务器“自动选择”时用本软件选择,请多用托盘菜单。 6、加入nodlogin的ID发布页 注意,如果ESET出现“无法连接服务器”的请用软件本身的“升级服务器”...
//用下面命令可以得到一个硬盘的微码级别: # lscfg -vl pdisk* //IBM小型机AIX5.1操作系统密码文件丢失或者误删的恢复方法 进入维护模式: 1、将安装盘第一张放入光驱; 重启小型机选择主控台,按屏幕上提示的数字;...
4、修正升级服务器选择的一个问题。 5、请大家修改ESET升级服务器“自动选择”时用本软件选择,请多用托盘菜单。 6、加入nodlogin的ID发布页 注意,如果ESET出现“无法连接服务器”的请用软件本身的“升级服务器”...
4、修正升级服务器选择的一个问题。 5、请大家修改ESET升级服务器“自动选择”时用本软件选择,请多用托盘菜单。 6、加入nodlogin的ID发布页 注意,如果ESET出现“无法连接服务器”的请用软件本身的“升级服务器”...
4、修正升级服务器选择的一个问题。 5、请大家修改ESET升级服务器“自动选择”时用本软件选择,请多用托盘菜单。 6、加入nodlogin的ID发布页 注意,如果ESET出现“无法连接服务器”的请用软件本身的“升级服务器”...
4、修正升级服务器选择的一个问题。 5、请大家修改ESET升级服务器“自动选择”时用本软件选择,请多用托盘菜单。 6、加入nodlogin的ID发布页 注意,如果ESET出现“无法连接服务器”的请用软件本身的“升级服务器”...
可以自由传播且可任人修改、充实、发展,开发者的初衷是要共同创造一个完美、理想并 可以免费使用的操作系统。 我们并不能使同学们通过这次系列讲座成为一个 UNIX 类操作系统的高手,这次系列 讲座的目的就是在...
使用情况有一个全面快速的查询统计机制,财务预算管理系统就是为了解决这一问题而 设计,它包括:预算项目管理、预算数据管理、预算使用数据录入、部门报表生成、报 表生成几个模块。 在整个处理过程中涉及四类角色...
而汇编语言,一条指令就对应一个机器码,每一步执行什幺动作都很清楚,并且程序大小和堆栈调用情况都容易控制,调试起来也比较方便。所以在单片机开发中,我们还是建议采用汇编语言比较好。 如果对单片机C语言有...
第一章 Java网络编程的原因 13 网络程序的功能 14 安全性 27 等等!还有更多! 29 第二章 基本网络概念 30 网络 30 网络的分层 32 IP、TCP和UDP 37 Internet 40 客户/服务器模型 46 Internet标准 47 第三...
支持计划的任务下载软件支持计划任务下载,当当前处于下载状态的任务大于五个时,新建的所有任务或试图将非下载状态的任务开启为下载状态的任务都将处于计划任务状态,每当完成一个下载任务后,处于计划状态的任务将...