一、写一个ErrorLogger类,实现spring的ThrowsAdvice接口
package aop;
import java.lang.reflect.Method;
import java.sql.SQLException;
import java.util.Arrays;
import org.apache.log4j.Logger;
import org.springframework.aop.ThrowsAdvice;
public class ErrorLogger implements ThrowsAdvice{
private static final Logger log=Logger.getLogger(ErrorLogger.class);
public void afterThrowing(Method method,Object[]args,Object target,RuntimeException e){
log.error(method.getName()+Arrays.toString(args)+e);
}
public void afterThrowing(Method method,Object[]args,Object target,SQLException e){
log.error(method.getName()+"传递参数"+Arrays.toString(args)+e );
}
}
二、applicationContext.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">
<!-- 配置切面(将增强类关联给某个条件范围内的方法) -->
<bean id="errorLogger" class="aop.ErrorLogger"></bean>
<aop:config>
<!-- 配置切入点pointcut -->
<aop:pointcut expression="execution(* biz.impl.*.*(..))" id="myPoint"/>
<aop:advisor advice-ref="errorLogger" pointcut-ref="myPoint"/>
</aop:config>
</beans>
三、dao/dao.impl/UserDao类
public class UserDaoImpl implements UserDao {
@Override
public User findUser() {
System.out.println("===========Dao层查询User 1==============");
User u=new User("Tom",22);
throw new RuntimeException("出现异常");
//return u;
}
}
四、Test类
public class TestMain {
/**
* @param args
*/
public static void main(String[] args) {
//加载spring容器,解析配置文件
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
UserBiz userBiz=(UserBiz) ac.getBean("userBiz");
User u= userBiz.getUser(101);
System.out.println(u.getUname()+","+u.getAge());
}
}