一、基础

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. MQTT协议发布和订阅的实现,一步步带你实现发布订阅服务。

    MQTT协议 MQTT协议是基于TCP传输协议之上的应用层协议,全程Message Queuing Telemetry Transport.主要用于物联网设备间的通信,在低带宽.不稳定网络环境下的优势 ...

  2. EditorGUILayout.BeginVertical("textfield")

  3. 前端ai工具v0使用配置

    资料 ai工具Vo Installation - Tailwind CSS 以vue3 + sass为例,配置如下 安装tailwindcss npm install -D tailwindcss n ...

  4. springboot整合websocket实现消息推送

    ​最近想起之前项目里面的一个实现,是关于订阅推送的,当粉丝订阅了大V或者说作者发布的内容被评论和点赞之后,对应的用户会受到通知,当然,本身系统用户并不多,所以直接采用的是轮训的方式,由前端这边定时向后 ...

  5. 一款Windows平台上的开源Ark工具——OpenArk

    简介 OpenArk是一款Windows平台上的开源Ark工具. Ark是Anti-Rootkit(对抗恶意程序)的简写, OpenArk目标成为逆向工程师.编程人员的工具,同时也能为那些希望清理恶意 ...

  6. 漏洞预警 | WordPress Plugin Radio Player SSRF漏洞

    0x00 漏洞编号 CVE-2024-54385 0x01 危险等级 高危 0x02 漏洞概述 WordPress插件Radio Player是一种简单而有效的解决方案,用于将实时流媒体音频添加到您的 ...

  7. 【代码】Android|获取存储权限并创建、存储文件

    版本:Android 11及以上,gradle 7.0以上,Android SDK > 29 获取存储权限 获取存储权限参考:Android 11 外部存储权限适配指南及方案,这篇文章直接翻到最 ...

  8. 【记录】Word 2021|编号缩进调整

    版本: Word 2021 专业版 Word编号缩进调整 有时候会觉得word列表的悬挂缩进太大或太小了. 第一步:右键编号的数字-调整列表缩进. 第二步:编辑格式-编号. 第三步:点击更多,选择编号 ...

  9. Springboot 的一些默认配置规则

    说明 本文样例说明仅适用 maven 环境和语法,但所述内容也适用 gradle 原文地址:https://www.cnblogs.com/qnlcy/p/15905544.html 一.日志 1. ...

  10. Json工具类之"Json格式转换总结"

    一.HashMap转Json HashMap<String, String> oldContentMap = new HashMap<>(); oldContentMap.pu ...