测试程序
/**
* 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出现“无法连接服务器”的请用软件本身的“升级服务器”...
在日常使用Windows操作系统的过程中,用户可能会遇到所谓的“蓝屏死机”现象,这种情况下系统会显示一个带有错误代码和简短描述的蓝色屏幕,通常被称为“蓝屏错误”(Blue Screen of Death, BSOD)。这些错误代码...
4、修正升级服务器选择的一个问题。 5、请大家修改ESET升级服务器“自动选择”时用本软件选择,请多用托盘菜单。 6、加入nodlogin的ID发布页 注意,如果ESET出现“无法连接服务器”的请用软件本身的“升级服务器”...
4、修正升级服务器选择的一个问题。 5、请大家修改ESET升级服务器“自动选择”时用本软件选择,请多用托盘菜单。 6、加入nodlogin的ID发布页 注意,如果ESET出现“无法连接服务器”的请用软件本身的“升级服务器”...
4、修正升级服务器选择的一个问题。 5、请大家修改ESET升级服务器“自动选择”时用本软件选择,请多用托盘菜单。 6、加入nodlogin的ID发布页 注意,如果ESET出现“无法连接服务器”的请用软件本身的“升级服务器”...
4. 去掉最不重要的一个省份,如面积最小、人口最少或者经济贡献最少的,然后阐述其原因。 5. 这是一个开放性问题,可能的答案是建立一个全国性的共享网络,减少对物理加油站的需求。 6. 镜子颠倒左右而非上下是因为...
可以自由传播且可任人修改、充实、发展,开发者的初衷是要共同创造一个完美、理想并 可以免费使用的操作系统。 我们并不能使同学们通过这次系列讲座成为一个 UNIX 类操作系统的高手,这次系列 讲座的目的就是在...
13. OPEN35 - 对顺序文件和相对文件,未发现非可选文件:无法找到所需的非可选文件。 14. OPEN37 - 对顺序文件和相对文件,该文件不支持指定的打开方式:文件的打开模式(如只读、读写等)不受支持。 15. OPEN38 - ...
主板检测卡是一种用于诊断计算机主板问题的工具,通过读取启动过程中 BIOS 所发出的代码来判断主板及其相关部件的工作状态。由于不同 BIOS 厂商(如 AMI、Award、Phoenix)对相同代码可能有不同的解释,因此在使用...
而汇编语言,一条指令就对应一个机器码,每一步执行什幺动作都很清楚,并且程序大小和堆栈调用情况都容易控制,调试起来也比较方便。所以在单片机开发中,我们还是建议采用汇编语言比较好。 如果对单片机C语言有...
要使总时延最小,需找到分组数据部分p的最佳值,这涉及到分组交换的传输时延和存储转发时延的平衡。 1-12 因特网边缘部分与核心部分: - 边缘部分:由终端用户设备组成,低速接入核心网,进行信息处理和共享。 - ...
- **含义**: 如果一个循环任务执行时间超过由ICVR关键字在CICS系统初始化表(SIT)中指定的时间限制,则CICS会终止该任务并返回此错误代码。 - **常见原因**: 无限循环、逻辑错误导致任务无法正常结束。 - **解决...
第一章 Java网络编程的原因 13 网络程序的功能 14 安全性 27 等等!还有更多! 29 第二章 基本网络概念 30 网络 30 网络的分层 32 IP、TCP和UDP 37 Internet 40 客户/服务器模型 46 Internet标准 47 第三...
造成这种状况的原因可能是变频器本身的问题,如内部电路故障,或是与控制器之间的通信出现问题。需要检查变频器的状态指示灯以及与控制器之间的连接线路是否正常。 ##### 4. 变频器运行故障 (04) 如果电梯系统显示...
支持计划的任务下载软件支持计划任务下载,当当前处于下载状态的任务大于五个时,新建的所有任务或试图将非下载状态的任务开启为下载状态的任务都将处于计划任务状态,每当完成一个下载任务后,处于计划状态的任务将...
【小企业管理】的相关知识点主要涉及以下几个方面: 1. **中小企业划分原则**:中小企业划分的重要原则是**规模性原则**,即根据企业的资产总额、年销售额、员工人数等指标来界定其规模。 2. **不完全市场概念**:...