- 博客(44)
- 收藏
- 关注
原创 perthis 和 pertarget
在 Spring AOP 中,`perthis` 和 `pertarget` 的区别主要体现在 切面实例的创建方式和 与代理对象或目标对象的绑定关系 上。虽然在某些简单场景下它们表现可能类似,但在更复杂的用例中,差异会非常明显。
2025-02-06 17:37:16
879
原创 代理对象与目标对象
在 Spring AOP 中,代理对象(Proxy Object)和 目标对象(Target Object)是非常重要的概念,但初学者常常会将两者混淆。以下详细解析两者的定义、区别以及在 Spring AOP 中的具体应用,帮助理解它们的作用与区分方式。
2025-02-06 17:25:55
909
原创 @DeclareParents
Spring AOP 中用于 引入(Introduction)的一个注解,它允许通过 AOP 动态地为目标类添加新的接口实现。这种功能也被称为类型引入,是 Spring AOP 中的一种特殊功能
2025-02-06 16:41:40
752
原创 CGLIB介绍
CGLIB(Code Generation Library)是一个高性能、强大的开源代码生成库,主要用于在运行时动态生成类或增强现有类的功能。它是 Java 动态代理机制的一种实现方式,广泛应用于像 Spring 和 Hibernate 这样的框架中,尤其是在 AOP(面向切面编程)和懒加载等场景下。CGLIB 的核心思想是通过生成目标类的子类(动态代理类),并在子类中拦截父类方法的调用,以实现增强功能。CGLIB 动态生成的子类继承了目标类,并重写了目标类中的方法。接口来拦截目标方法的调用。
2025-02-06 11:10:23
720
原创 什么时候使用@Bean或者注解或者都不用
在某些场景中,你可能选择完全跳过 Spring 容器的管理,而是手动创建对象。,而直接使用 Spring 中自动扫描的方式,或者完全不将类交给 Spring 容器管理。)以及组件扫描的机制,可以自动注册 Bean。在以下场景中,你可以不使用。是 Spring 提供的用于显式声明 Bean 的注解,通常用在。与条件注解结合,可以轻松实现环境依赖的 Bean 配置。这种情况下,Bean 的创建逻辑依赖于外部工厂,),代码可读性更高,也符合职责分离的设计原则。的原则,避免不必要的复杂性。提供了更明确的控制。
2025-02-06 09:51:32
775
原创 Java匿名类
匿名类是 Java 中的一种特殊功能,允许你在创建类的同时直接创建该类的实例,而不需要显式地定义类的名字。匿名类是 **局部内部类** 的一种,用于简化代码结构,特别是在实现接口或扩展抽象类时
2025-02-05 16:16:41
689
原创 @Resource与@autowired
@Resource 和 @Autowired 都是用来实现 依赖注入(Dependency Injection)的注解,但它们有一些不同之处
2025-02-05 09:58:28
793
原创 @Configuration 和 @Component
`@Configuration` 和 `@Component` 都是 Spring 框架中常用的注解,但它们的作用和使用场景有本质的区别
2025-02-05 09:25:36
700
原创 自定义注解
自定义注解 `@MovieQualifier`,它是基于 Spring 的 `@Qualifier` 注解之上的一个扩展。通过 **元注解** 和自定义属性(`genre` 和 `format`)来实现精确的依赖注入
2025-01-24 15:24:19
540
原创 @Bean 和 @Component
使用@Component时,更侧重于自动化、简化的开发过程,适合于大多数简单的、常规的组件。@Component更适合用于简单类,自动扫描和注册。配合使用。使用@Bean时,更侧重于精细化控制 Bean 的创建过程,适合于需要复杂初始化或无法通过扫描自动创建的组件。@Bean适合需要复杂初始化逻辑的类,或者无法直接修改的类(如第三方类)。通过方法直接定义 Bean。根据具体的场景需求,选择合适的注解来管理 Spring Bean 可以提高开发效率和代码的可维护性。
2025-01-15 20:26:44
1026
原创 XML配置参数解析
在 Spring 的 XML 配置文件中,像 xmlns、xsi 等字段是 XML 标准的一部分,它们定义了配置文件的结构和约束,确保 XML 文档符合规范
2025-01-15 20:14:08
678
原创 @Scope(“prototype“)
`@Scope("prototype")` 是 Spring 框架中用于定义 Bean 作用域的注解之一,它的主要作用是将一个 Bean 定义成 **原型作用域**(`Prototype Scope`)。在原型作用域下,每次从 Spring 容器中请求这个 Bean 时,都会创建一个新的实例。
2025-01-15 15:26:35
1060
原创 @Lookup
在 Spring Framework 中,@Lookup 是一个注解,用于解决在单例 Bean 中注入原型(prototype)作用域 Bean 的问题。它主要用于动态获取原型作用域的 Bean,确保每次都能获得新的实例,而不是缓存的单例实例。
2025-01-15 14:51:44
667
原创 饿汉式单例与懒汉式单例模式
饿汉式和懒汉式是单例模式(Singleton Pattern)的两种常见实现方式。单例模式确保一个类只有一个实例,并提供该实例的全局访问点。这两种方式主要在实例创建的时机上有所不同。
2025-01-13 15:04:25
592
原创 懒汉式单例模式
懒汉式单例适合于需要延迟加载且实例化成本较高的场景(如日志管理器、配置加载器等)。在并发场景下,最好使用线程安全的实现,例如同步方法版或双重检查锁定版,以确保唯一实例的正确性和性能的平衡。指令重排序:编译器和处理器在执行程序时可能会对指令进行重排序,以优化性能。volatile 关键字会禁止这种重排序,确保变量的初始化和其他操作的执行顺序符合程序的预期。这对于实现线程安全的懒汉式单例模式非常重要,因为它保证了对象在初始化完成后才会被其他线程看到。
2025-01-13 15:00:09
781
原创 IOC 依赖注入 @Autowired 进一步理解
在面向对象编程中,特别是在使用依赖注入框架(如 Spring)时,这种现象是多态性的一种具体表现。在engineimport org} }} }Component;@Component@Override在engineimport org} }} }Component;@Component@OverrideEngineSpring 在查找 Bean 时,会在整个应用上下文中查找,而不是仅限于某个类或文件。
2025-01-10 17:48:45
621
原创 IOC 依赖注入 @Autowired
/ 定义 Engine 接口IOC 是一种设计思想,而是这种思想的实际应用。通过 IOC 和依赖注入,我们可以简化代码、提高模块间的松耦合性,并提升代码的可测试性和可维护性。这种模式在现代企业开发中非常重要,尤其是在大型项目中,IOC 可以显著减少复杂性并提高开发效率。
2025-01-10 17:26:35
714
原创 AOP示例 @Aspect @Around
通过这个简单的示例,你可以看到如何利用 Spring AOP 轻松实现方法级别的日志记录。AOP 可以帮助开发者在不改变原有业务逻辑的情况下,插入横切关注点逻辑,提升代码的可维护性和模块化程度。
2025-01-10 17:18:06
312
原创 win10系统word2016出现错误 “429 ActiveX部件不能创建对象”
找到路径C:\Users\用户\AppData\Roaming\Microsoft\Word\STARTUP将其中的内容删除
2022-04-03 14:26:00
429
原创 Java equals() 与 ==
参考https://zhuanlan.zhihu.com/p/159131263https://blog.youkuaiyun.com/DouyuTY55236/article/details/107596552Java 中的基本数据按类型可以分为四大类:布尔型、整数型、浮点型、字符型;这四大类包含 8 种基本数据类型。布尔型:boolean整数型:byte、short、int、long浮点型:float、double字符型:char除 char 的包装类 Character 和 int 的
2022-03-02 18:49:05
301
原创 微博视频下载到本地
手机端下载点开需要下载的视频,点击下图所示黄色框内的分享符号点击红色框内的“复制链接”这里我用的是谷歌浏览器,打开谷歌浏览器,粘贴复制的链接出现要下载的视频,长按视频出现 Download video 选项(其他浏览器应该也可以,可以自行试试)即可下载到手机本地。...
2021-05-13 19:19:51
3288
原创 Ubuntu16 设置中文输入法
通过VMware安装Ubuntu虚拟机后,发现没有中文输入法,这里提供我的添加方法以供参考命令端输入sudo apt-get install ibus-pinyin使用Ibus拼音下图的键盘输入法系统在桌面上箭头所示
2020-12-01 14:12:43
570
原创 pycharm 安装第三方库时UnicodeDecodeError报错 解决方法
在pycharm的terminal终端使用pip安装第三方库(任何一个库)pip install numpy显示如下报错自己找了无数博客帖子并没有什么卵用,最后还是自己动手丰衣足食,方法其实很简单,根据提示的最后知道 with open(pyvenv_cfg_file) as f: return f.read().splitlines()这句有问题,改成 with open(pyvenv_cfg_file,encoding='utf-8'
2020-11-27 23:03:22
596
1
原创 Anaconda jupyter notebook 自定义起始打开路径
网上有三种方法,可以自行查看。这里我就自己实际情况记录一下,以供参考第一种 通过 Navigator 打来win+R 输入 cmd输入jupyter notebook --generate-config会生成文件jupyter_notebook_config.py并显示文件所在路径比如C:\Users\19854\.jupyter\jupyter_notebook_config.py打开此文件查找c.NotebookApp.notebook_dir找到所在位置,默认显示为#c.Notebo
2020-10-15 10:27:01
359
原创 汉诺塔程序
def hanoi(n,a,b,c): global s s += 1 if n == 1: move(a,c) else: hanoi(n-1,a,c,b) move(a,c) hanoi(n-1,b,a,c)def move(a,b): print(a + '-->' + b)args = ['A','B','C']n = 4 # 盘子个数s = 0hanoi(n,*args)
2020-09-21 15:25:29
627
原创 python中的 * 和 **
1. 运算符* 乘号 **乘方2. 函数定义中的形参python传递参数有两种形式位置参数(positional argument)关键词参数(keyword argument)普通参数 -> 默认参数 -> 收集参数 -> 命名关键字参数 -> 关键字收集参数def func(a,b=2,*z,c,d,**kw)a为普通参数,b是默认参数,z 是收集参数,c、d是命名关键字参数 ,kw是关键字收集参数*args **args 用于函数定义*args
2020-09-09 16:02:08
1091
原创 力扣题目 分治及递归 思路
为运算表达式设计优先级给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果。你需要给出所有可能的组合的结果。有效的运算符号包含 +, - 以及 *。示例 1输入 2-1-1输出 [0, 2]解释((2-1)-1) = 0(2-(1-1)) = 2示例 2输入 2*3-4*5输出 [-34, -14, -10, -10, 10]解释(2*(3-(4*5))) = -34((2*3)-(4*5)) = -14((2*(3-4))*5) = -1.
2020-08-24 16:37:05
343
原创 提升树(Boosting Decision Tree)算法编程实现
已知如下表所示的训练数据,x 的取值范围为区间[0.5,10.5],y 的取值范围为区间[5.0,10.0],学习这个回归问题的提升树模型,考虑只用树桩作为基函数。xi12345678910yi5.565.705.916.406.807.058.908.709.009.05终止条件:模型的平方差损失函数误差小于 0.2import numpy as npclass Tree: def __init__(self, node,
2020-08-09 17:34:57
620
原创 正则表达式 分组 零宽断言
分组import rea = '123.123.123.aaa.aaa.aaa'reg = '(\d{3})(.\\1){2}.(\w{3})(.\\3){2}'res = re.search(reg,a)print(res) # <re.Match object; span=(0, 23), match='123.123.123.aaa.aaa.aaa'>引用分组上例中\\1代表引用第一个分组\d{3};\\3代表引用第三个分组\w{3}import rea = '12
2020-08-01 09:12:26
302
原创 字符串添加、插入、删除特定字符
添加.join()插入首先将字符串转换为列表,然后使用列表的.insert()方法来插入字符,最后再用.join()变回字符串。.insertL.insert(index, object)ss='abde'ss=list(ss)ss.insert(2,'c')print(''.join(ss)) # abcde注意:.insert()方法不返回参数,直接在对L进行修改。删除删除特定索引位置字符.pop() 同插入的方法,先转为列表操作再转回字符串ss='abccde'
2020-07-26 11:10:25
3043
原创 递归求全排列
def permutations(arr, currentPosition, end): if currentPosition == end: print(arr) else: for index in range(currentPosition, end): # 交换元素 arr[index], arr[currentPosition] = arr[currentPosition], arr[index]
2020-07-19 23:49:06
317
原创 文件路径表示
什么是相对路径?相对路径是指该文件所在路径与其它文件(或文件夹)所在路径的关系。相对路径里常使用“…/”来表示上一级目录,如果有多个上一级目录,可以使用多个“…/”表示为上上级;如果链接到当前目录下,只需输入被链接对象的名称即可,如:aaa.jpg;如果链接到下一级目录,只需输入该目录名,或者./文件名,再输入对象名称即可,如:images/aaa.jpg或者./images/aaa.jpg;如引用上上级目录下的css文件夹中的style.css文件,代码为:…/…/css/style.css 。
2020-07-12 15:59:17
2170
原创 enumerate()
在迭代数据对性(即我们可以循环的任何对象)时获取元素的索引枚举字符串word = "Speed"for index, char in enumerate(word): print(index,char,end='|')# 0 S|1 p|2 e|3 e|4 d|枚举列表sports = ['soccer', 'basketball', 't` ennis']for index, value in enumerate(sports): print(index,value,.
2020-07-03 15:36:48
164
原创 解释型语言与编译型语言
我们编写的源代码是人类语言,我们自己能够轻松理解;但是对于计算机硬件(CPU),源代码就是天书,根本无法执行,计算机只能识别某些特定的二进制指令,在程序真正运行之前必须将源代码转换成二进制指令。所谓的二进制指令,也就是机器码,是 CPU 能够识别的硬件层面的“代码”,简陋的硬件(比如古老的单片机)只能使用几十个指令,强大的硬件(PC 和智能手机)能使用成百上千个指令。源码转换成二进制语言的规定有的编程语言要求必须提前将所有源代码一次性转换成二进制指令,也就是生成一个可执行程序(Windows 下的
2020-06-27 12:37:34
290
原创 re.split()总结
单一分隔符,str.split()与 re.split()作用一致import rea = 'a,b,c'print(a.split(',')) # ['a', 'b', 'c']print(re.split(',',a)) # ['a', 'b', 'c']多个单一 分隔符 时 ,"[]"与 "|"的 效果是一样的,但是 请注意 使用 “|”时 某些字符 需要转义 。如:下例中的 ‘?’a = 'a,b;c?da'print(re.split('[,;?]',a)) # ['
2020-06-12 17:45:37
3218
原创 有关查询的方法
查询函数的参数import inspectdef zhao(s,t): return s+tprint(inspect.signature(zhao)) # (s, t)print(inspect.getfullargspec(zhao)) #FullArgSpec(args=['s', 't'], varargs=None, varkw=None, defaults=None, kwonlyargs=[], kwonlydefaults=None, annotati
2020-06-06 10:41:47
165
原创 cmd中常用命令
常用的DOS命令切换到别的盘(例如D盘)— d:切换到C盘— c:查看当前目录文件:— dir(类似于linux下的ls命令)创建文件夹— md 文件夹删除文件夹— rd 文件夹删除文件— del 文件
2020-06-02 11:03:01
317
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人