spring五种通知类型(二)
e() {
System.out.println("删除用户信息");
//模拟NullPointException
// String s = null;
// s.length();
}
public boolean save() {
System.out.println("保存用户信息");
return true;
}
public void update() {
System.out.println("更新用户信息");
}
}
g. 修改AopBean
[java]
package tarena.aop;
public class AopBean {
//前置通知方法
public void mybefore(){
System.out.println("--前置通知--");
}
//后置通知方法
public void myafterReturning(Object retVal){
System.out.println("--后置通知--" + retVal);
}
}
h. 修改aop.xml
[html]
class="tarena.service.UserServiceImpl">
expression="within (tarena.service.*)" />
pointcut-ref="servicepointcut"/>
returning="retVal"
pointcut-ref="servicepointcut"/>
i. 运行Test1
4) 异常通知
a. 修改AopBean
[java]
package tarena.aop;
public class AopBean {
//前置通知方法
public void mybefore(){
System.out.println("--前置通知--");
}
//后置通知方法
public void myafterReturning(Object retVal){
System.out.println("--后置通知--" + retVal);
}
//异常通知方法
public void myafterException(){
System.out.println("--异常通知--");
}
}
b. 修改aop.xml
[html]
class="tarena.service.UserServiceImpl">
expression="within (tarena.service.*)" />
pointcut-ref="servicepointcut"/>
returning="retVal"
pointcut-ref="servicepointcut"/>
pointcut-ref="servicepointcut"/>
c. 修改UserServiceImpl
[java]
package tarena.service;
public class UserServiceImpl implements UserService {
public void delete() {
System.out.println("删除用户信息");
//模拟NullPointException
String s = null;
s.length();
}
public boolean save() {
System.out.println("保存用户信息");
return true;
}
public void update() {
System.out.println("更新用户信息");
}
}
d. 运行Test
因为在执行目标方法delete()时发生了异常,所以触发了异常通知
e. 修改UserServiceImpl
如果我们在delete()方法中捕获了异常。
[java]
package tarena.service;
public class UserServiceImpl implements UserService {
public void delete() {
System.out.println("删除用户信息");
try {
//模拟NullPointException
String s = null;
s.length();
} catch (Exception e) {
}
}
public boolean save() {
System.out.println("保存用户信息");
return true;
}
public void update() {
System.out.println("更新用户信息");
}
}
f. 运行Test1
如果我们在执行delete()方法时捕获了异常,异常通知就丌会执行
和后置通知相同,我们可以获取异常对象
g. 修改AopBean
[java]
package tarena.aop;
public class AopBean {
//前置通知方法
public void mybefore(){
System.out.println("--前置通知--");
}
//后置通知方法
public void myafterReturning(Object retVal){
System.out.println("--后置通知--" + retVal);
}
//异常通知方法
public void myafterException(Exception ex){
System.out.println("--异常通知begin--");
ex.printStackTrace();
System.out.println("--异常通知end--");
}
}
h. 修改aop.xml
[html]