基于代理类ProxyBean的AOP的实现
来源:互联网 发布:如何建设网络强国800字 编辑:程序博客网 时间:2024/05/13 05:41
一、编写通知类
前置通知:
package com.springtest.advice;import java.lang.reflect.Method;import org.apache.log4j.Logger;import org.springframework.aop.MethodBeforeAdvice;public class BeforeLogAdvice implements MethodBeforeAdvice {private Logger logger = Logger.getLogger(BeforeLogAdvice.class);@Overridepublic void before(Method method, Object[] arg1, Object target) throws Throwable {String className = target.getClass().getName();String methodName = method.getName();String logToText = "这是"+className+"类的"+methodName+"方法的置前通知";logger.info(logToText);}}
后置通知:
package com.springtest.advice;import java.lang.reflect.Method;import org.apache.log4j.Logger;import org.springframework.aop.AfterReturningAdvice;public class LogAdvice implements AfterReturningAdvice {private Logger logger = Logger.getLogger(LogAdvice.class);@Overridepublic void afterReturning(Object object, Method method, Object[] args, Object target) throws Throwable {String className = target.getClass().getName();String methodName = method.getName();String logToText = "这是"+className+"类的"+methodName+"方法的置后通知";logger.info(logToText);}}
环绕通知:
package com.springtest.advice;import org.aopalliance.intercept.MethodInterceptor;import org.aopalliance.intercept.MethodInvocation;import org.apache.log4j.Logger;public class AroundAdvice implements MethodInterceptor {private Logger logger = Logger.getLogger(AroundAdvice.class);@Overridepublic Object invoke(MethodInvocation methodInvocation) throws Throwable {long beginTime = System.currentTimeMillis();methodInvocation.proceed();long endTime = System.currentTimeMillis();String targetMethodName = methodInvocation.getMethod().getName();String logInfoText = "环绕通知:"+targetMethodName+"方法调用前时间"+beginTime+"毫秒,调用后时间"+endTime+"毫秒";logger.info(logInfoText);return null;}}
二、编写applocationContext
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="print" class="com.springtest.dao.Print"></bean><bean id="userDao" class="com.springtest.dao.UserDaoImpl"></bean><bean id="userBiz" class="com.springtest.dao.UserBizImpl"><property name="userDao" ref="userDao"></property></bean><bean id="logAdvice" class="com.springtest.advice.LogAdvice"></bean><bean id="beforeLogAdvice" class="com.springtest.advice.BeforeLogAdvice"></bean><bean id="aroundAdvice" class="com.springtest.advice.AroundAdvice"></bean><bean id="ub" class="org.springframework.aop.framework.ProxyFactoryBean"><property name="proxyInterfaces"><list><value>com.springtest.dao.UserBiz</value></list></property><property name="interceptorNames"><list><value>logAdvice</value><value>beforeLogAdvice</value><value>aroundAdvice</value></list></property><property name="target" ref="userBiz" /></bean></beans>
三、编写 UserDao和UserDaoImpl
package com.springtest.dao;public interface UserDao {public void addUser();}
package com.springtest.dao;public class UserDaoImpl implements UserDao {@Overridepublic void addUser() {System.out.println("增加用户!!!");}}
四、编写UserBiz和UserBizImpl
package com.springtest.dao;public interface UserBiz {public void addUser();}
package com.springtest.dao;public class UserBizImpl implements UserBiz {private UserDao userDao;@Overridepublic void addUser() {this.userDao.addUser();}public void setUserDao(UserDao userDao) {this.userDao = userDao;}}
五、编写测试类
package com.springtest;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.springtest.dao.UserBiz;public class TestAop {public static void main(String[] args) {ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");UserBiz userBiz = (UserBiz) applicationContext.getBean("ub");userBiz.addUser();}}
输出结果:
0 0
- 基于代理类ProxyBean的AOP的实现
- Spring基于代理的AOP实现
- Spring, 基于代理的AOP
- aop动态代理基于jdk的的实现
- 基于代理类ProxyFactoryBean的AOP实现---前置通知编码实现
- 基于代理类ProxyFactoryBean的AOP实现---后置通知编码实现
- AOP实现方式1——经典的基于代理的AOP实现
- AOP实现方式1——经典的基于代理的AOP实现
- 基于代理类ProxyFactoryBean的AOP实现---异常通知编码实例
- 基于代理类ProxyFactoryBean的AOP实现---环绕通知编码实例
- 代理实现spring的AOP
- Spring AOP之基于ProxyFactoryBean的代理
- 基于CGLIB代理的经典Spring Aop
- 基于Spring AOP的JDK动态代理和CGLIB代理
- 基于AOP的日志实现!
- 基于注解的AOP实现
- aop代理类的配置
- Spring之AOP的实现(JDK动态代理:只能代理接口,不能代理类)
- 分享:HTML常见面试题
- Hive差集工具
- 关于登录界面的背景图片设置问题
- Android自助餐之点击事件传递
- 高效程序员的7个共同特征
- 基于代理类ProxyBean的AOP的实现
- HDU1286-找新朋友(欧拉函数)
- Hive如何添加第三方JAR
- QT学习之路(6)构建文件对话框
- Codeforces 609D 二分 or 三分
- Android获得屏幕宽高的方法
- 学习资源传送门
- Google多线程面试题: 4个线程向4个文件里写入数据, 每个线程只能写一个值(待更新)
- VBS替换文本