但是,我们学习过aop之后,我们知道了有异常通知这种方式。
下面是代码的实现:
//dao层
public interface personDAO {
public void savePerson() throws Exception;
}
//dao层实现
public class personDAOImpl implements personDAO {
@Override
public void savePerson() throws Exception {
//抛出异常
throw new RuntimeException("dao wrong");
}
}
//service层
public interface personService {
public void savePerson() throws Exception;
}
//service层实现
public class personServiceImpl implements personService {
//引用dao层
private personDAO dao;
@Override
public void savePerson() throws Exception {
//调用dao层的方法
this.dao.savePerson();
}
//省略getter&setter方法
}
//action层
public class personAction {
//引用service层
private personService service;
public void savePerson() throws Exception{
//调用service层方法
this.service.savePerson();
}
//省略getter&setter方法
}
//异常切面
public class MyException {
public void showException(Throwable ex){
//输出异常信息
System.out.println(ex.getMessage());
}
}
配置文件配置:
<bean id="dao" class="cn.ansel.mvc.dao.impl.personDAOImpl"></bean>
<bean id="service" class="cn.ansel.mvc.service.impl.personServiceImpl">
<property name="dao" ref="dao"></property>
</bean>
<bean id="action" class="cn.ansel.mvc.action.personAction">
<property name="service" ref="service"></property>
</bean>
<!--
切面
-->
<bean id="myException" class="cn.ansel.mvc.exception.MyException"></bean>
<aop:config>
<aop:pointcut expression="execution(* cn.ansel.mvc.service.impl.*.*(..))" id="perform"/>
<aop:aspect ref="myException">
<aop:after-throwing method="showException" pointcut-ref="perform" throwing="ex"/>
</aop:aspect>
</aop:config>