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框架的工作原理

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 老鸟的Python新手教程

    老鸟的Python新手教程

    2021年11月15日
  • 程序世界,平凡的我

    做一个积极的人编码、改bug、提升自己我有一个乐园,面向编程,春暖花开!昨天是2019年4月23日,这是一个什么日子呢? 如果我没有看日历的提醒,我其实也不忘记了这是什么日子。每一年的4月23日是世界读书日,世界读书日你读书了吗?昨天我是没有真正读书的,昨天下班比较晚,回到家吃饭洗漱完快十二点了,想着第二天还要上班,就睡觉了。今天刷CSDN看到征文活动: “征文|@程序员 你读过的书,…

  • executorservice实例_java controller

    executorservice实例_java controllerExecutorService是Javajava.util.concurrent包的重要组成部分,是JavaJDK提供的框架,用于简化异步模式下任务的执行。一般来说,ExecutorService会自动提供一个线程池和相关API,用于为其分配任务。实例化ExecutorService实例化ExecutorService的方式有两种:一种是工厂方法,另一种是直接创建。Exec…

  • android在eclipse环境下开发需要什么支持_eclipse配置android开发环境

    android在eclipse环境下开发需要什么支持_eclipse配置android开发环境手把手教程,安装配置环境

  • Kettle Spoon入门教程「建议收藏」

    Kettle Spoon入门教程「建议收藏」Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,数据抽取高效稳定。其中,Spoon是Kettle中的一个组件,其他组件有PAN,CHEF,Encr和KITCHEN等。Spoon通过图形化的页面,方便直观的让你完成数据转换的操作。1、安装配置点我下载最新版本是7.1,小编这里使用的是6.1。下载完毕后,解压即可。因为是Java编写的,需要jdk环

  • 使用电脑模拟微信内置浏览器

    使用电脑模拟微信内置浏览器

    2021年10月23日

发表回复

您的电子邮箱地址不会被公开。

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