一、基础

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. [T.3] 团队项目:团队基础设施及 DevOps 准备

    项目 内容 这个作业属于哪个课程 首页 - 2025年春季软件工程(罗杰.任健) - 北京航空航天大学 - 班级博客 - 博客园 这个作业的要求在哪里 T.3 团队项目:团队基础设施及 DevOps ...

  2. python获取指定文件夹内文件名称

    比如下图,文件夹内有若干文件,且文件夹路径:C:\Users\Administrator\Desktop\2147\1024 4行代码,解决问题 import os path = "C:\\ ...

  3. web自动化的元素定位

    一.基础元素定位 1.id定位:根据元素的id定位 By.id("id") webDriver.findElement(By.id("tab-account") ...

  4. json导出csv

    let data = [] let keys = ['name', 'town', 'village', 'address', 'update_time_label', 'manager'] let ...

  5. 原型设计工具Axure墨刀哪个好用?

    一.工具基础特性对比 Axure为本地化安装软件,支持离线操作且数据存储本地,安全性较高,但多端协作需通过云端同步,存在更新延迟:墨刀则为云端在线工具,通过浏览器即可使用,无需安装,便于多端协作与实时 ...

  6. 基于Blazor实现的运输信息管理系统

    运输信息管理系统(TIMS)是一个集手机端和PC端协同工作的小型运输服务公司的信息化系统,采用Blazor框架的Auto模式进行开发. 1. 项目背景 目前司机运输任务完成后,在微信工作群中上报运输任 ...

  7. 魔方求解器桌面版(层先法,基于Tauri实现)

    开发了一个桌面版的三阶魔方求解器,代码地址:https://github.com/davelet/rubik-cube-restore/pull/2 .欢迎使用. 一.层先法求解 代码逻辑是从前面的j ...

  8. bat文件简短

    bat文件 @echo off F: cd\pictures\projectStreet\FloatingShinyKnot-main node server.js cd\ bat静默运行(但会闪一下 ...

  9. Agent安装与使用

    Agent安装与使用 前置条件 安装jdk17 下载 https://dlcdn.apache.org/skywalking/java-agent/9.1.0/apache-skywalking-ja ...

  10. pyspark - 逻辑回归

    是在整理文件时, 翻到的, 感觉是好久以前的代码了, 不过看了, 还是可以的. 起码注释还是蛮清晰的. 那时候我真的是妥妥的调包man.... # 逻辑回归-标准化套路 from pyspark.ml ...