用织梦做的网站,国家官方网站,建筑人才网怎么样,wordpress+头像加速面向对象编程
契约接口#xff1a;Aware
aware:意识到的
契约接口(Aware)是Spring框架中的一个特性#xff0c;它允许Bean对象意识到它们所在的环境并与之进行交互#xff0c;用于提供特定的功能或信息给Bean对象。这些接口通常作为回调接口#xff0c;在Bean初始化过程…面向对象编程
契约接口Aware
aware:意识到的
契约接口(Aware)是Spring框架中的一个特性它允许Bean对象意识到它们所在的环境并与之进行交互用于提供特定的功能或信息给Bean对象。这些接口通常作为回调接口在Bean初始化过程中被Spring容器调用以便向Bean提供额外的环境信息或资源。通过实现相对应的Aware接口Bean可以获取对应的Spring容器实例或其他相关资源。
举个例子
ApplicationContextAware:通过实现该接口Bean可以获取当前所在ApplicationContext实例从而可以访问容器的功能和资源。BeanFactoryAware:通过实现该接口。Bean可以获取当前所在的BeanFactory实例从而可以获取其他Bean对象或进行自定义的Bean实例化操作。BeanNameAware通过实现该接口Bean可以获取自身在容器中的Bean名称。EnvironmentAware通过实现该接口Bean可以获取Spring的Environment对象从而可以获取配置属性、配置文件等环境相关的信息。ResourceLoaderAware通过实现该接口Bean可以获取ResourceLoader对象从而可以加载外部资源文件。
设计模式
单例模式Bean默认是以单例模式创建的容器中只有一个实例。这样可以保证整个应用程序中共享同一个对象实例提高性能并减少资源消耗。工厂模式Spring中BeanFactory和ApplicationContext充当了工厂的角色负责创建和管理Bean对象。通过使用工厂模式可以将对象的创建和配置细节与使用代码分离提供了更高的灵活性和可扩展性。观察者模式JSR 303、380参数校验时Spring使用观察者模式实现当属性值发生变化时绑定器会通知监听器进行相应的处理。Bean生命周期管理中BeanPostProcessor接口允许开发人员在Bean实例化、初始化、销毁的过程中插入自定义逻辑。实现BeanPostProcessor接口的类可以作为观察者观察并修改Bean的创建和初始化过程。适配器模式(Adapter)Spring中的适配器模式常用于整合不同的技术或框架。例如Spring提供了JDBC适配器用于将不同数据库的驱动程序适配为统一的接口使得应用程序可以无缝切换不同数据库。同时在MDC中MDCAdapter也通过适配器模式适配Logback、log4j等。
面向切面编程
基于接口的JDK动态代理
JDK动态代理是通过Java的反射机制实现的。它要求目标对象实现一个或多个接口。在运行时通过Proxy类和InvocationHandler接口创建代理对象。代理对象实现了目标接口并将方法调用转发给InvocationHandler的invoke()方法在invoke()方法中可以添加切面逻辑。
基于类的CGLIB动态代理
CGLIBCode Generation Library动态代理是通过继承目标类并重写方法来实现的。它不要求目标对象实现接口而是创建目标类的子类作为代理对象。在运行时通过Enhancer类创建代理对象并设置回调函数MethodInterceptor在回调函数中可以添加切面逻辑。
字节码提升
ASMAnalyzing and Manipulating Java bytecodeJava字节码操作框架ASM是一个强大的Java字节码操作框架它可以直接操作Java字节码包括生成、转换和分析字节码。在AOP中ASM可用于生成动态代理类的字节码从而实现对目标对象方法的拦截和切面逻辑的织入。CGLIBCode Generation LibraryCGLIB是一个针对Java字节码的代码生成库它可以在运行时生成目标类的子类。在AOP中CGLIB可以通过生成目标类的子类来实现动态代理从而在方法调用前后插入切面逻辑。AspectJAspectJ是一个功能强大的AOP框架它提供了更为完整和细粒度的AOP支持。AspectJ不仅支持静态织入编译时织入还支持动态织入运行时织入。动态织入使用AspectJ提供的运行时代理机制来实现切面逻辑的织入。
面向元编程
面向元编程Metaprogramming是一种编程范式它涉及编写能够创建、操作或操纵其他程序或自身代码的程序。元编程使开发人员能够在运行时动态地操作代码结构、生成代码、修改代码行为等。
面向元编程的目标是通过编写代码来操作代码本身以提高代码的灵活性、可扩展性和可重用性。它允许程序在运行时动态地创建、修改和执行代码而不仅仅是编写静态的、预定义的代码。
面向元编程常用技术/工具
反射通过反射机制程序可以在运行时获取和操作类、方法、字段等的信息包括创建对象、调用方法、修改字段值等。反射使得程序能够动态地检查和操作代码结构。模式注解注解处理器允许开发人员编写自定义注解并在编译时处理这些注解以生成额外的代码。它可以用于自动生成代码、实现依赖注入、生成配置文件等。Environment它定义了访问应用程序环境和配置属性的方法。最典型的用例是通过不同的环境去加载不同配置文件中的配置如dev、testing、prod。GenericTypeResolver主要作用是在运行时获取和处理泛型类型信息以便进行类型推断、类型转换或其他类型相关的操作。它可以帮助开发者在运行时动态地获取泛型参数的实际类型而不仅仅是在编译时使用泛型类型擦除的信息。模板引擎Template Engine模板引擎允许开发人员编写带有占位符的模板代码并通过填充占位符来生成最终的代码。模板引擎通常具有逻辑控制结构和变量替换功能可以用于生成重复性的代码或动态生成代码。
举个例子
/*** Author: liu_pc* Date: 2023/8/21* Description: 元注解* Version: 1.0*/
Retention(RetentionPolicy.RUNTIME)
Target(ElementType.TYPE)
interface MyAnnotation {String value();
}/*** Author: liu_pc* Date: 2023/8/21* Description: 测试元注解* Version: 1.0*/
MyAnnotation(Hello, AnnotationUtils!)
public class MyClass {public static void main(String[] args) {MyAnnotation annotation AnnotationUtils.findAnnotation(MyClass.class, MyAnnotation.class);if (annotation ! null) {String value annotation.value();System.out.println(value);}}
}函数驱动 模块驱动