一、基础

1、什么是反射
在Java中,反射是指在运行时检查和操作类、接口、字段和方法等程序结构的能力。
通过反射,你可以在运行时动态获取类的信息、实例化对象、访问和修改字段、调用方法,
以及构造新的对象实例,而无需在编译时知道这些类的具体信息。
反射使得Java程序能够以更灵活的方式处理类和对象,但需要谨慎使用,
因为它可能会影响程序的性能和安全性。
2、怎么使用反射创建对象
//通过类的地址全名获取类的类型
Class<?> clazz = Class.forName("com.xr.bean.User");
//通过默认构造方法创建实例,转换类型
User user = (User)clazz.getDeclaredConstructor().newInstance();
//获取对象,调用实例方法
user.get();
3、什么是IoC(控制反转)
IoC是一种底层为Map(key为id,value为创建的对象)的Spring容器,它是用来创建和管理所有对象和实例,并管理实例对象之间的依赖关系

1、读取配置的bean.xml文件,获取类的id和对应的包路径
2、通过Spring的BeanFactory接口的实现类(包路径,ClassPathXMLApplication;文件路径,FileSystemApplication;)去创建bean
4、什么是依赖注入
给实例化对象的属性赋值,就是依赖注入
可以通过setter方法注入
也可以通过构造方法进行注入
还可以通过接口方法进行注入,这种使用的比较少。

二、类的加载机制

类加载器(ClassLoader)是Java虚拟机(JVM)的一部分,负责将类的字节码加载到内存中,并生成对应的Class对象。类加载器实现了Java虚拟机规范中的ClassLoader接口。

Java中的类加载器可以分为以下几种类型:
启动类加载器(Bootstrap ClassLoader): 它是虚拟机的一部分,负责加载Java核心类库,如java.lang包中的类。由于启动类加载器是用C++语言实现的,因此在Java中无法直接访问。
扩展类加载器(Extension ClassLoader): 它是由sun.misc.Launcher$ExtClassLoader类实现的,负责加载JRE扩展目录(jre/lib/ext)中的类库。
应用程序类加载器(Application ClassLoader): 也称为系统类加载器,它是由sun.misc.Launcher$AppClassLoader类实现的,负责加载应用程序类路径(classpath)中的类库。
自定义类加载器(Custom ClassLoader): 除了上述三种内置的类加载器外,Java还提供了一种机制允许开发人员自定义类加载器。自定义类加载器通常用于加载来自非标准位置(如网络、数据库、文件系统等)的类,或实现特定的加载策略。

在Java中,类加载器采用双亲委派模型,即每个类加载器在加载类时会先委托给其父类加载器进行加载,只有在父类加载器无法加载该类时,才由子类加载器自行加载。这种机制保证了类的唯一性和安全性。

三、SpringBean的生命周期:
1、实例化:调用类的无参构造方法进行实例化
2、属性赋值:使用类的setter方法进行对象的属性赋值,或者使用接口注入进行注入
3、调用初始化前置方法:BeanPostProcessor接口的实现方法postProcessBeforeInitialization方法,执行初始化前置方法
4、初始化:可以自定义Bean的xml文件指定初始化方法initMethod,执行配置初始化方法
5、调用初始化后置方法:BeanPostPocessor接口的实现方法postProcessAfterInitialization方法,执行初始化后置方法
6、使用
7、销毁:可以自定义Bean的xml文件指定销毁方法
8、容器关闭

四、Spring注解
1、@Component 标记Spring管理的Bean
2、@Repository 标记持久层,并由Spring进行管理的Bean
3、@Service 标记服务层,并由Spring进行管理的Bean
4、@Controller 标记请求接收层,并由Spring进行管理的Bean
以上注解功能相等,只是区分用于不同地方

5、Lombok
@Data 包含@Getter、@Setter、@EqualsAndHashCode、@ToString等注解
@Getter
@Setter
@EqualsAndHashCode 重写equals和hashCode方法
@ToString
@AllArgsConstructor 所有参数构造方法
@NoArgsConstructor 无参构造方法
@Builder 构造对象及属性值
@NonNull 不可为空,为空抛出异常

五、AOP
代理模式:
通过代理类进行处理具体接口或者业务类的实际行为,统一解耦处理,降低耦合,灵活,动态处理

JDK代理
类是实现接口的方式,代理类也实现对应接口,然后进行处理

CGlib代理
类没有实现接口,通过继承的方式,我们代理类同样去继承去进行代理处理

porxy代理

porxy.newInstance(ClassLoader classLoader,Integrface[] intefaces,IntercepetorHandler interceptionHandler)

@Component /标记Spring IoC管理类对象
@Aspect //标记该类为代理类
//五种切入类型
1、前置 @Before
2、后置 @After
3、返回 @AfterReturning
4、异常 @AfterThrowing
5、环绕 @Around

@Around(excution("pointCut()"))
@pointcut("com.xr.test.service.serviceImpl.*")
public Object aroundPoinCut(JoinPoint joinPoint){
Object returnObj = null;
try{
//前置方法
//TODO

//执行代理类方法
returnObj = joinPoint.proceed();

//后置方法
//TODO

}catch(Exception e){
//异常方法
//TODO
e.print()
}finally{
//返回前方法
//TODO
}
return returnObj;

}

六、事务传播行为:
required 默认,没有就新建,有就加入
required_new 不管有没有事务,新建新的事务执行,原本如果存在事务就挂起事务,不存在嵌套关系
supports 有就加入,没有就不管
mandatory 有就加入,没有就抛出异常
not_supported 不支持事务,存在就挂起
never 不支持事务,存在就抛出异常
nested 不管是否有事务都创建新的事务,使用新事务执行,嵌套事务,嵌套的事务可以独立的提交和回滚,没有事务就和required一样

七、预加载
通常我们使用的HotSpotVM,要使用预加载,需要使用GraalVM,通过镜像直接生成预加载过后的程序
有点:减少启动所消耗时间
缺点:灵活性底

Spring 6的更多相关文章

  1. 基于spring注解AOP的异常处理

    一.前言 项目刚刚开发的时候,并没有做好充足的准备.开发到一定程度的时候才会想到还有一些问题没有解决.就比如今天我要说的一个问题:异常的处理.写程序的时候一般都会通过try...catch...fin ...

  2. 玩转spring boot——快速开始

    开发环境: IED环境:Eclipse JDK版本:1.8 maven版本:3.3.9 一.创建一个spring boot的mcv web应用程序 打开Eclipse,新建Maven项目 选择quic ...

  3. Spring基于AOP的事务管理

                                  Spring基于AOP的事务管理 事务 事务是一系列动作,这一系列动作综合在一起组成一个完整的工作单元,如果有任何一个动作执行失败,那么事务 ...

  4. [Spring]IoC容器之进击的注解

    先啰嗦两句: 第一次在博客园使用markdown编辑,感觉渲染样式差强人意,还是github的样式比较顺眼. 概述 Spring2.5 引入了注解. 于是,一个问题产生了:使用注解方式注入 JavaB ...

  5. 学习AOP之透过Spring的Ioc理解Advisor

    花了几天时间来学习Spring,突然明白一个问题,就是看书不能让人理解Spring,一方面要结合使用场景,另一方面要阅读源代码,这种方式理解起来事半功倍.那看书有什么用呢?主要还是扩展视野,毕竟书是别 ...

  6. 学习AOP之深入一点Spring Aop

    上一篇<学习AOP之认识一下SpringAOP>中大体的了解了代理.动态代理及SpringAop的知识.因为写的篇幅长了点所以还是再写一篇吧.接下来开始深入一点Spring aop的一些实 ...

  7. 学习AOP之认识一下Spring AOP

    心碎之事 要说知道AOP这个词倒是很久很久以前了,但是直到今天我也不敢说非常的理解它,其中的各种概念即抽象又太拗口. 在几次面试中都被问及AOP,但是真的没有答上来,或者都在面上,这给面试官的感觉就是 ...

  8. 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?

    今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑 ...

  9. Spring之旅(2)

    Spring简化Java的下一个理念:基于切面的声明式编程 3.应用切面 依赖注入的目的是让相互协作的组件保持松散耦合:而AOP编程允许你把遍布应用各处的功能分离出来形成可重用的组件. AOP面向切面 ...

  10. Spring之旅

    Java使得以模块化构建复杂应用系统成为可能,它为Applet而来,但为组件化而留. Spring是一个开源的框架,最早由Rod Johnson创建.Spring是为了解决企业级应用开发的复杂性而创建 ...

随机推荐

  1. linux中安装firebird

    本在树莓派上安装sqlite,因为sqlite的多用户需要自己控制读写.最终选择稳定够用的fb2.5. 嵌入式无论哪一种fb都差不多. 1.安装 sudo apt-get install firebi ...

  2. AI数字人Heygem:口播与唇形同步的福音,无需docker,无需配置环境,一键整合包来了

    介绍 短短72小时,硅基智能在GitHub开源的数字人模型Heygem.ai便突破1,300颗Star,迅速成为全球技术社区瞩目的焦点.这一现象级的增长速度不仅彰显了Heygem.ai的技术领先性,更 ...

  3. BI工具革命派vs传统强者:DataFocus.ai与Tableau的终极对决

    1. 摘要 DataFocus.ai 作为新一代商业智能工具,强调基于搜索的分析方式,旨在让业务用户能够轻松进行数据探索.该平台集成了数据仓库,并侧重于赋能非技术人员进行自助式分析.其核心理念是通过自 ...

  4. DPDI(Dispatch PDI)kettle调度管理平台基础版安装部署说明

    DispatchPDI下载 DPDI online部署包下载地址: Windows: http://files.pizzalord.site/api/public/dl/7Tnq6ScE/releas ...

  5. 题解:AT_abc369_d [ABC369D] Bonus EXP

    题目大意: 有 nnn 个怪物,每个怪物有一个战力值 aia_iai​ ,你可以选择击败他或放走他,放走他没有经验值,击败他可以获得 aia_iai​ 的经验值,如果击败的数量是偶数,则还可以获得 a ...

  6. 在AI大爆发的背景下,企业管理软件有什么冲击

    今天与同行开会提到在AI大爆发的背景下,未来企业管理软件究竟有什么冲击? 我和同事对此问题进行了探讨,一些拙见,与大家分享.先直接说观点:在未来的5到10年,制造业的管理软件市场将几乎消失.下面我来聊 ...

  7. Nacos简介—2.Nacos的原理简介

    大纲 1.Nacos集群模式的数据写入存储与读取问题 2.基于Distro协议在启动后的运行规则 3.基于Distro协议在处理服务实例注册时的写路由 4.由于写路由造成的数据分片以及随机读问题 5. ...

  8. 关于网传微信聊天记录提取工具"留痕"盗取个人信息的分析

    今天早上看到一篇文章,是关于一个微信聊天记录提取工具泄露个人信息的内容,于是我就好奇,看了一下作者的 github,然后也是自己小小的分析了一下 1.官方地址 Github: https://gith ...

  9. 【记录】IDA和Ollydbg查看指令地址及地址对应的指令

    文章目录 在IDA中查看指令地址 在Ollydbg中查看指令地址 在Ollydbg中查看地址对应的指令 在IDA中查看指令地址 在Ollydbg中查看指令地址 ollydbg在对应指令处,右键-查看- ...

  10. [随记]-我安装 arch linux 的记录

    一.下载安装包 archlinux-x86_64.iso 下载传送门:Arch Linux BitTorrent Download 是磁链和种子下载,往下拉,找到 HTTP Direct Downlo ...