基于代理类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>

	<!-- 定义代理类,名 称为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>	  
	    </list>
	  </property>
	  <property name="target" ref="userBiz"></property>
	</bean>
</beans>


 

 2.编写业务逻辑层

    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;

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("这是特意抛出的异常信息!");
	}

}

 

 3.编写数据访问层

  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+"的用户被删除");
	}

}

 

  4.编写AOP切面编程

  LogAdvice.java

package com.springtest1.aop;

import java.lang.reflect.Method;
import org.springframework.aop.MethodBeforeAdvice;
import org.apache.log4j.Logger;

public class LogAdvice implements MethodBeforeAdvice {

	private Logger logger=Logger.getLogger(LogAdvice.class);
	public void before(Method method, Object[] args, Object target) throws Throwable {
		//获取被调用的类名
		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.截图


 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

潇潇雨歇_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值