AOP
增加逻辑
1、写死在原来程序上 不灵活
2、继承的方式 不够灵活 耦合太强 且没加一段逻辑 加一层继承
3、组合的方式
将逻辑单独出来
然后动态代理
动态代理实现
public class LogInterceptor implements InvocationHandler { private Object target; public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { this.beforeMethod(); method.invoke(target,args); return null; } public void beforeMethod(){ System.out.println("start now..."); } public void setTarget(Object target) { this.target = target; } public Object getTarget() { return target; } }
//测试 //在执行userDao.save()之前 执行了LogInterceptor.beforeMethod() //实际产生的类是名为proxy$0的代理类 @Test public void testProxy() throws Exception{ UserDao userDao = new UserDaoImpl(); LogInterceptor li = new LogInterceptor(); li.setTarget(userDao); UserDao userDaoProxy = (UserDao)Proxy.newProxyInstance(userDao.getClass().getClassLoader(), userDao.getClass().getInterfaces(),li); userDaoProxy.save(new User()); }
spring中
1、annotation(@注解的意思...文档)
2、xml配置
1、
xml文件
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"> <context:annotation-config/> <context:component-scan base-package="com.bjsxt"></context:component-scan> <aop:aspectj-autoproxy/> <bean id="u" class="com.bjsxt.dao.impl.UserDaoImpl"> </bean> <bean id="userService" class="com.bjsxt.service.UserService" init-method="init"> <property name="userDao" ref="u"/> </bean> </beans>
@Aspect @Component public class LogInterceptor { @Pointcut("execution(public void com.bjsxt.dao.impl.UserDaoImpl.save(com.bjsxt.model.User))") public void myMethod(){}; @Before("myMethod()") public void beforeMethod(){ System.out.println("start now..."); } @After("myMethod()") public void afterMethod(){ System.out.println("end now..."); } @Around("myMethod()") public void aroundMethod(ProceedingJoinPoint pjp)throws Throwable{ System.out.println("method start now..."); pjp.proceed(); System.out.println("method end now..."); } }
@Test public void testAdd() throws Exception { ClassPathXmlApplicationContext factory = new ClassPathXmlApplicationContext("bean.xml"); UserService service = (UserService)factory.getBean("userService"); User u = new User(); service.add(u); service.getNames(); }
相关推荐
Spring-AOP-利用java中的动态代理和Spring的拦截器做到AOP
主要对Spring AOP的相关概念和简单的静态代理、动态代理以及常见的几种AOP配置方式做总结学习。主要包括:1. AOP的常见概念 2. 静态代理 3. jdk动态代理 4. Aspectj and Aspectjweaver 5. **aop-config** 6. CGLIB ...
spring之AOP(动态代理),包括jdk动态代理和CGLib动态代理
Spring以JVM的动态代理技术为基础,设计出了一系列的AOP横切实现,比如前置通知、返回通知、异常通知等。同时,Pointcut接口可以匹配切入点,可以使用现有的切入点来设计横切面,也可以扩展相关方法根据需求进行切入...
代理模式与动态代理--Spring AOP原理.doc
死磕Spring之AOP篇 - Spring AOP两种代理对象的拦截处理(csdn)————程序
为了说明Spring的AOP原理,本人使用代理模式中的动态代理完成演示AOP编程的原理的演示。相信,如果你耐心看完整个程序(几乎一行注释一行代码),那么你对Spring这个东西就不是觉得有什么神秘了! 阅读对象:凡是喜爱...
SpringAOP动态代理 Spring AOP 使用的动态代理主要有两种方式:JDK 动态代理和 CGLIB 代理。 JDK 动态代理:用于代理实现了接口的类。Spring 会使用 java.lang.reflect.Proxy 类来创建代理对象。 CGLIB 代理:用于...
通过动态代理模拟Spring AOP,通过动态代理模拟Spring AOP
AOP的意思就是面向切面编程。本文主要是通过梳理JDK中自带的反射机制,实现 AOP动态代理模式,这也是Spring AOP 的实现原理
springAOP配置实现动态代理,有利于熟悉动态代理原理,深入了解spring。
SpringAOP代理设计模式demo代码实现,从静态代理、动态代理两方面进行了编码实现
Spring Aop的底层实现技术 --- Jdk动态代理原理 很不错的一篇文章
SpringBoot下的Spring——DAY04——动态代理总结、AOP、自定义注解进行拦截、动态获取注解参数、通知方法 1.动态代理总结 1.1 JDK动态代理特点 1.2 CGlib动态代理 1.2.1 CGLib特点说明 1.3 动态代理的作用 2 Spring...
jdk动态代理--适合企业级开发,但是它要求必须面向接口编程,假如目标类没有实现接口,则没办法代理这个类。 cglib代理, 1.cglib(Code Generation Library)是一个强大的,高性能,高质量的Code生成类库。它可以在...
jdk 1.8 环境,1.8 之下的环境应该也可以运行 这些代码,然后 需要导入 jre 下面的 rt.jar 包,这个自己去找下
基于Spring 4.x企业应用开发实战。AOP概述、基础知识、创建切面、创建增强类、自动创建代理,
SpringAOP之探秘(动态代理、责任链模式、注解使用)- 详情:https://blog.csdn.net/Dream_Weave/article/details/85008674
spring-instrument.jar:Spring对服务器的代理接口 spring-instrument-tomcat.jar:Spring对tomcat连接池的集成 spring-jms.jar:为简化jms api的使用而做的简单封装。 外部依赖spring-beans,spring-dao,JMS API...
描述一下Spring AOP? 在Spring AOP中关注点(concern)和横切关注点(cross-cutting ...Spring AOP 代理是什么? 引介(Introduction)是什么? 连接点(Joint Point)和切入点(Point Cut)是什么? 织入(Weaving)是什么?