这篇文章主要讲解java的基础知识--代理。
代理其实是一种设计模式,下面的讲解是参照<<Java编程思想>>的内容。
我们先举个简单的示例来阐述什么是代理。
假如我们有一个接口Interface。
package spring3.aop.aop2; public interface Interface { public void do1(); public void do2(String str); }
我们在定义一个真实的类Target,来实现我们的接口Interface
package spring3.aop.aop2; public class Target implements Interface { @Override public void do1() { System.out.println("Target.do1()"); } @Override public void do2(String str) { System.out.println("Target.do2(" + str + ")"); } }
我们在写一个代理类Proxy,它有一个属性,来存放目标对象。
package spring3.aop.aop2; public class Proxy implements Interface { private Interface target; public Proxy(Interface target) { this.target = target; } @Override public void do1() { System.out.println(" before Target.do1()"); target.do1(); System.out.println(" after Target.do1()"); } @Override public void do2(String str) { System.out.println("before Target.do2(" + str + ")"); target.do2(str); System.out.println("before Target.do2(" + str + ")"); } }
我们来运行下,看看代理效果
package spring3.aop.aop2; public class ProxyMain { public static void main(String[] args) { Interface target = new Target(); target.do1(); target.do2("test"); Interface proxy = new Proxy(target); proxy.do1(); proxy.do2("test"); } }
结果:
Target.do1() Target.do2(test) before Target.do1() Target.do1() after Target.do1() before Target.do2(test) Target.do2(test) before Target.do2(test)
以上就是最初的代理,静态代理。
就是使用一个和被代理对象有相同接口的代理类,用户实际使用这个代理类对象来完成相应操作,而不是直接使用目标类对象。但是静态代理又弊端,需要代理一个接口,就需要创建一个代理类,增加了代码量。
怎么办呢?
等待看后续的java动态代理。自己也可以先研究下。
未完待续。。。
相关推荐
了解这些基础知识可以帮助我们更好地掌握 Spring AOP 的实现细节。在分析源码时,可以参考作者的源码注释和相关文章,以便更深入地理解每一步操作。 总的来说,Spring AOP 通过动态代理技术实现了切面的插入,使得...
下面将详细阐述Spring AOP涉及的知识点及其相关jar包的作用。 首先,我们来看压缩包中包含的关键jar文件: 1. **aspectjweaver.jar**:这是AspectJ的织入器,负责在运行时动态地将切面代码插入到目标类中。AspectJ...
1. **Spring AOP基础**: - **代理模式**:Spring AOP基于动态代理实现,可以创建JDK动态代理或CGLIB代理,为目标对象提供增强功能。 - **通知(Advice)**:包括前置通知、后置通知、异常通知、环绕通知等,定义...
一、Spring AOP基础知识 1. **什么是AOP**:AOP是一种编程范式,用于处理系统中的横切关注点,即那些跨越多个类或方法的共同功能,如事务管理、日志记录等。AOP通过切面(Aspect)将这些关注点与业务逻辑分离,提高...
在Spring框架4.*版本中,可能会遇到一个常见问题,即缺少`spring-cglib-repack-3.2.5.jar`和`spring-objenesis-repack-2.6.jar`这两个jar...了解这些基础知识对于理解和优化Spring应用的性能、处理相关问题都非常重要。
5. **代理(Proxy)**:Spring AOP 使用动态代理技术创建对象,有两种代理方式:JDK 动态代理和 CGLIB 代理。前者适用于接口实现类,后者适用于没有接口的类。 6. **注解使用**:如 @Aspect、@Before、@After、@...
4. **使用Spring AOP的jar包**: - `spring-aop.jar`:Spring AOP的核心库,包含了AOP的API和实现。 - `spring-beans.jar`:Spring Bean的定义和管理,AOP与之紧密关联。 - `spring-core.jar`:Spring的基础库,...
本教程将带你了解Spring AOP的基础知识,帮助你入门这一强大技术。 ### 一、什么是AOP AOP是一种编程范式,旨在解决程序中的横切关注点问题,这些关注点通常与业务逻辑无关,但又需要在多个地方被调用,如日志记录...
4. **Spring AOP的应用场景**:事务管理是Spring AOP最常见的应用之一。通过在数据访问层的方法上声明@Transactional注解,可以实现声明式事务管理,无需编写事务管理代码。 5. **与MyBatis的集成**:MyBatis是一个...
Spring AOP,全称为Aspect Oriented Programming,是Spring框架中的一个重要模块,主要负责处理系统中的...文件"5.SpringAOP_01"和"6.SpringAOP_02"很可能是课程的分阶段内容,涵盖了从基础概念到进阶实践的详细讲解。
- `AspectException.java`定义了一个异常类,用于表示所有的AOP基础架构异常。从类的继承结构来看,`AspectException`是运行时异常(RuntimeException),代表这类异常是不检查的(unchecked)。它们通常被认为是...
**一、Spring AOP基础知识** 1. **切面(Aspect)**:切面是跨越多个对象的行为或关注点的模块化。在Spring AOP中,切面由通知(advises)和切点(pointcuts)定义。 2. **通知(Advice)**:通知是在特定连接点上...
2. **Spring AOP基础** - Spring AOP是基于动态代理实现的,它可以为普通POJO(Plain Old Java Object)提供拦截器风格的事务管理、日志记录等功能。有两种代理模式:JDK动态代理和CGLIB代理。前者适用于接口,后者...
Spring AOP基础** - **切⾯编程**: AOP允许开发者将横切关注点(如日志、事务、安全性等)定义为独立的模块,称为切面。切面可以包含通知(advice)、切入点(pointcut)和其他元数据。 - **通知(Advice)**: 通知...
了解了这些基础知识,我们可以通过以下几个步骤在Spring中使用AOP: 1. 定义切面:创建一个类,并使用`@Aspect`注解标记为切面。 2. 定义切点:在切面类中,使用`@Pointcut`定义切点表达式。 3. 编写通知:使用`@...
总结,这个"SpringAOP简单项目实现"涵盖了Spring AOP的基础知识,包括切面、通知、切入点的定义与配置,以及如何在实际项目中使用Maven进行构建和依赖管理。对于初学者来说,这是一个很好的实践案例,能够帮助他们...
本资源主要涵盖了静态代理和动态代理两种常见类型的代理模式,以及Spring AOP中动态代理的三种配置方式。以下是详细的知识点解析: ### 静态代理 静态代理是程序员手动创建代理类并实现相同接口的方式。代理类和...
本篇文章将探讨如何通过JDK动态代理实现Spring AOP的基础知识。 首先,我们要理解什么是JDK动态代理。在Java中,动态代理机制允许我们在运行时创建一个实现了特定接口的新类。这个新类的实例可以代理目标对象,执行...
这些知识点构建了Spring AOP的基础,通过这些,开发者可以灵活地实现横切关注点的解耦,提高代码的可维护性和复用性。在实际开发中,可以根据项目需求选择注解驱动或XML配置驱动的方式来实现AOP功能。
Spring AOP的实现主要依赖于两种技术:动态代理和AspectJ。对于接口,Spring使用Java动态代理(JDK Proxy)创建代理对象;而对于类,Spring则使用CGLIB库生成子类代理。这两种方式都是在运行时生成代理对象,从而在...