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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java学习路线总结,搬砖工逆袭Java架构师[通俗易懂]

    前情提要无意间听到领导们的谈话,现在公司的现状是码农太多,但能独立带队的人太少,简而言之,不缺干活的,缺PM。也许这也是这个行业的现状,也是传说中的“35岁危机”的最好解释,如果你马上35岁了,但是你能干的,毕业生也能干,老板还要你作甚?所以,从今天开始(2021年9月4日),开启《100天进阶高级工程师》系列。Java学习路线我觉得一个Java程序员的学习路线应该是:javase; javaweb; 数据库; ssm; springboot; 数据结构与算法; JVM;

    2022年4月9日
    48
  • Qt中的QFile读写文件操作

    Qt中的QFile读写文件操作1.首先记录一下QString,QByteArray,char*之间的转换(1)QString-&amp;gt;QByteArrayQStringbuf=&quot;123&quot;;QByteArraya=buf.toUtf8();//中文a=buf.toLocal8Bit();//本地编码(2)QByteArray-&amp;gt;char*char*b=a.data…

    2022年6月13日
    28
  • openCV中cvSnakeImage()函数代码分析

    openCV中cvSnakeImage()函数代码分析/*M///////////////////////////////////////////////////////////////////////////////////////////IMPOR

    2022年7月3日
    21
  • es6数组的flat()方法

    es6数组的flat()方法Array.prototype.flat()flat()方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。Array.prototype.flat()用于将嵌套的数组“扁平化”,将二维数组变成一维数组。该方法返回一个新数组,对原数据没有影响。语法:varnewArray=arr.flat([depth])参数:depth可选,指定要提取嵌套数组的结构深度,默认值为1。返回值:一个包含数组与子数组中所有元素的新数组。示例:var

    2022年5月3日
    119
  • ORACLE 存储过程死锁[通俗易懂]

    ORACLE 存储过程死锁[通俗易懂]/**问题描述:在编译某个存储过程时,由于没提交或断网或者TEST没停止又重新编译,导致编译存过一直卡死问题分析:存储过程或某张表被锁例如:存储过程p_BonusMID死锁,表现的现象是在编译时无响应。**/–首先使用下面语句查询存过(存储过程)p_BonusMID的进程SELECT*FROMV$DB_OBJECT_CACHEWHEREname=UPPER(‘

    2022年7月17日
    14
  • Spring基于接口的动态代理和统一事务处理

    Spring基于接口的动态代理和统一事务处理Spring基于接口的动态代理和统一事务处理

    2022年4月22日
    39

发表回复

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

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