基于代理类ProxyFactoryBean的AOP实现---异常通知编码实例

 代码:

1.配置文件

  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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
	<!-- 配置创建UserDAOImpl的实例 -->
	<bean id="userDAO" class="com.springtest1.dao.UserDAOImpl">	 
	</bean>
	<!-- 配置创建UserBizImpl的实例 -->
	<bean id="userBiz" class="com.springtest1.biz.UserBizImpl">
	  <!-- 依赖注入数据访问层组件 -->
	  <property name="userDAO" ref="userDAO" />
	</bean>	
		
	<!-- 定义前置通知 -->
	<bean id="logAdvice" class="com.springtest1.aop.LogAdvice"></bean>
    
    <!-- 定义后置通知 -->
	<bean id="afterLogAdvice" class="com.springtest1.aop.AfterLogAdvice"></bean>
	
	<!-- 定义异常通知 -->
	<bean id="throwsLogAdvice" class="com.springtest1.aop.ThrowsLogAdvice"></bean>
	
	<!-- 定义代理类,名 称为ub,将通过ub访问业务类中的方法 -->
	<bean id="ub" class="org.springframework.aop.framework.ProxyFactoryBean">
	  <property name="proxyInterfaces">
	    <value>com.springtest1.biz.UserBiz</value>
	  </property>
	  <property name="interceptorNames">
	    <list>	     
	     <value>logAdvice</value>	
	     <!-- 织入后置通知 -->
	     <value>afterLogAdvice</value>  
	      <!-- 织入异常通知 -->
	     <value>throwsLogAdvice</value>
	    </list>
	  </property>
	  <property name="target" ref="userBiz"></property>
	</bean>
</beans>

 

 2.数据访问层

     UserDAO.java

package com.springtest1.dao;

public interface UserDAO {
   //添加用户
	public void addUser(String username,String password);
	//删除用户
	public void delUser(int id);
}

 

   UserDAOImpl.java

package com.springtest1.dao;

public class UserDAOImpl implements UserDAO {

	@Override
	public void addUser(String username, String password) {
		// TODO Auto-generated method stub
       System.out.println(username+"用户添加成功");
	}

	@Override
	public void delUser(int id) {
		// TODO Auto-generated method stub
       System.out.println("编号为"+id+"的用户被删除");
	}

}


 

3.编写业务逻辑层

   UserBiz.java

package com.springtest1.biz;

public interface UserBiz {
   //添加用户
	public void addUser(String username,String password);
	//删除用户
	public void delUser(int id);
}


    UserBizImpl.java


package com.springtest1.biz;

public interface UserBiz {
   //添加用户
	public void addUser(String username,String password);
	//删除用户
	public void delUser(int id);
}


 

package com.springtest1.biz;

import com.springtest1.dao.UserDAO;
import com.springtest1.dao.UserDAOImpl;
public class UserBizImpl implements UserBiz {
	//使用UserDAO接口声明了一个对象
	//并为其添加set方法,用于依赖注入
	UserDAO userDAO;
	public void setUserDAO(UserDAO userDAO){
		this.userDAO=userDAO;
	}

	@Override
	public void addUser(String username, String password) {
		// TODO Auto-generated method stub
       userDAO.addUser( username, password);
	}

	@Override
	public void delUser(int id) {
		// TODO Auto-generated method stub
       userDAO.delUser(id);
       throw new RuntimeException("这是特意抛出的异常信息!");
	}

}

 

 4.编写方面代码

    ThrowsLogAdvice.java

package com.springtest1.aop;
import org.apache.log4j.Logger;
import java.lang.reflect.Method;
import org.springframework.aop.*;

public class ThrowsLogAdvice implements ThrowsAdvice {
	private Logger logger=Logger.getLogger(LogAdvice.class);
    public void afterThrowing(Method method, Object[] args, Object target, Throwable exeptionClass){
    	//获取被调用的类名
		String targetClassName=target.getClass().getName();
		//获取被调用的方法名
		String targetMethodName=method.getName();
		//日志格式字符串
		String logInfoText="异常通知:执行"+targetClassName+"类的"+targetMethodName+"方法时发生异常";
		//将日志信息写入配置的文件中
		logger.info(logInfoText);
    }
}

 

5.测试类

  AOPTest.java

package com.springtest1;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.springtest1.biz.UserBiz;

public class AOPTest {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//加载applicationContext.xml配置
		ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
		//获取配置中的UserBizImpl实例
		UserBiz userBiz =(UserBiz)context.getBean("ub");	
		userBiz.addUser("zhangsan","123");
		userBiz.delUser(1);
	}
 
}


 

 6.截图


 



package com.springtest1.dao;

public interface UserDAO {
   //添加用户
	public void addUser(String username,String password);
	//删除用户
	public void delUser(int id);
}


 


 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潇潇雨歇_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值