springioc和aop原理_描述spring框架的工作原理

springioc和aop原理_描述spring框架的工作原理Spring的Ioc底层是怎么实现的?一、SpringIoc是什么IOC:控制反转,就是把对象的创建交给Spring来做二、SpringIoc所使用的技术1、xml配置文件2、dom4j解析XML文件3、工厂设计模式4、反射三、SpringIoc的具体实现第一步:配置xml文件 <bean id="dic" class="com.zhy.springIoc.model.Dic">&lt…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

SpringIoc底层是怎么实现的?

一、SpringIoc是什么

IOC:控制反转,就是把对象的创建交给Spring来做

二、SpringIoc所使用的技术

1、xml配置文件

2、dom4j解析XML文件

3、工厂设计模式

4、反射

三、SpringIoc的具体实现

第一步:配置xml文件

 <bean id=“dic” class=“com.zhy.springIoc.model.Dic”></bean>

第二步:创建工厂类 使用 dom4j解析配置+反射

springioc和aop原理_描述spring框架的工作原理

    首先要知道xml文件的用处,主要用到的有2个,一是配置信息,二是存储信息 这些信息都是非计算机专业人士能看懂的,这也是为什么要有xml的原因!
那么既然配置了信息,服务器就要得到这些信息,怎么样得到,就要通过解析工具,那么dom4j就是这样的一个解析框架,它不但能够解析,而且可以修改其中的文件,他是通过树形结构,通过节点来进行解析,具体的解析方法参考相关书籍!


SpringAOP底层是怎么实现的?

Spring中的AOP底层实现原理:动态代理;

/* spring的AOP底层是由 JDK提供的动态代理技术 和 CGLIB(动态字节码增强技术)实现。

**JDK动态代理:**Jdk动态代理只针对于接口操作。

CGLIB:可以针对没有接口的java类和有接口的java类。*/

动态代理,照我的理解就是,在不修改原有类对象方法的源代码基础上,通过代理对象实现原有类对象方法的增强,也就是拓展原有类对象的功能。

JDK动态代理中包含一个类和一个接口:
InvocationHandler接口: 
public interface InvocationHandler { 
public Object invoke(Object proxy,Method method,Object[] args)

throws Throwable; 

参数说明: 
Object proxy:指最终生成的代理实例,一般不会用到。 
Method method:要调用的方法 
Object[] args:方法调用时所需要的参数 

可以将InvocationHandler接口的子类想象成一个代理的最终操作类

Proxy类:
Proxy类是专门完成代理的操作类,可以通过此类为一个或多个接口动态地生成实现类,此类提供了如下的操作方法:
public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) throws IllegalArgumentException 
参数说明: 
ClassLoader loader:类加载器 
Class<?>[] interfaces:得到全部的接口 
InvocationHandler h:得到InvocationHandler接口的子类实例 

 

Ps:类加载器 

Proxy类中的newProxyInstance()方法中需要一个ClassLoader类的实例,ClassLoader实际上对应的是类加载器,在Java中主要有一下三种类加载器; Booststrap ClassLoader:此加载器采用C++编写,一般开发中是看不到的; Extendsion ClassLoader:用来进行扩展类的加载,一般对应的是jre\lib\ext目录中的类; AppClassLoader(默认)加载classpath指定的类,是最常使用的是一种加载器。

动态代理类的字节码在程序运行时由Java反射机制动态生成,无需程序员手工编写它的源代码。动态代理类不仅简化了编程工作,而且提高了软件系统的可扩展性,因为Java 反射机制可以生成任意类型的动态代理类。

java.lang.reflect 包中的Proxy类和InvocationHandler 接口提供了生成动态代理类的能力。

例子代码:

1. 先创建一个接口:

 springioc和aop原理_描述spring框架的工作原理

2. 再创建一个接口实现类:

 springioc和aop原理_描述spring框架的工作原理

3. 实现InvocationHandler 接口

 springioc和aop原理_描述spring框架的工作原理

4. 测试代码:

springioc和aop原理_描述spring框架的工作原理

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/192367.html原文链接:https://javaforall.net

(0)
上一篇 2025年12月22日 下午11:22
下一篇 2026年1月14日 上午7:22


相关推荐

  • undefined pthread_create_pthread_key_create

    undefined pthread_create_pthread_key_create#include#includeusingnamespacestd;HANDLEhMutex;DWORDWINAPIthreadFun(LPVOIDlpParamter){char*p=(char*)lpParamter; while(1){ WaitForSingleObject(hMutex,INFINITE)

    2022年10月4日
    8
  • goland激活码永久(破解版激活)

    goland激活码永久(破解版激活),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
    145
  • Redis的雪崩,击穿,穿透详解「建议收藏」

    Redis的雪崩,击穿,穿透详解「建议收藏」在今天的互联网里,高并发、大数据量、大流量已经成为了代言词,那么我们的系统也承受着巨大的压力,首当其冲的解决方案就是redis。那么redis使用不当就会产生雪崩、穿透、击穿等问题,这也是考验一个程序员技术能力的时刻。当然面试的时候,这也是高频面试题,几乎大厂都会问到。下面跟着贴心老哥一起来看看这些技术吧。缓存雪崩举例双十一期间,所有用户一打开淘宝就是进入首页,首页的压力非常大,为了提高并发,将网站首页数据都缓存到redis里,所有的rediskey失效时间都是3小时。双十一当天大量

    2025年11月14日
    5
  • 使用jquery判断是否为数字

    使用jquery判断是否为数字

    2021年7月18日
    70
  • springboot整合mybatis @MapperScan可以不加在启动器上

    springboot整合mybatis @MapperScan可以不加在启动器上配置mybatis包扫描,默认将@MapperScan加载boot启动类上的但是也可以写个配置类,加在上面也行

    2022年5月7日
    51
  • 决策树模型(R语言)

    决策树模型(R语言)R 语言中最常用于实现决策树的有两个包 分别是 rpart 包和 party 包 其区别如下 rpart 包的处理方式 首先对所有自变量和所有分割点进行评估 最佳的选择是使分割后组内的数据更为 一致 pure 这里的 一致 是指组内数据的因变量取值变异较小 rpart 包对这种 一致 性的默认度量是 Gini 值 确定停止划分的参数有很多 参见 rpart control 确定这些参数是非常重要而微妙的 因

    2026年3月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号