02 mavenSetting
Maven的settings.xml配置详解1 基本介绍maven的两大配置文件:settings.xml和pom.xml。其中settings.xml是maven的全局配置文件,pom.xml则是文件所在项目的局部配置。 1.1 settings.xml文件位置①全局配置文件:${M2_HOME}/conf/settings.xml,对操作系统所有者生效 ②用户配置:user.home/.m2/settings.xml,只对当前操作系统的使用者生效 1.2 配置文件优先级局部配置优先于全局配置。 配置优先级从高到低:pom.xml> user settings > global settings 如果这些文件同时存在,在应用配置时,会合并它们的内容,如果有重复的配置,优先级高的配置会覆盖优先级低的。如果全局配置和用户配置都存在,它们的内容将被合并,并且用户范围的settings.xml会覆盖全局的settings.xml。 1.3 注意事项note1: Maven安装后,用户目录下不会自动生成settings.xml,只有全局...
maven继承关系
https://blog.csdn.net/xiaoheihai666/article/details/125936493 今天想的是做一个springcloud项目,再导入父依赖的时候,发现有的 包爆红,显示不能找到包,我以为是maven问题,结果去setting.xml文件中看配置,确实都配置完了,也添加了阿里云镜像。又因为是maven与idea本版不相容的问题,结果发现不是。于是我新建一个项目在中加了一个本地仓库没有的包,结果发现可以进行自动导入包。 因此,问题就很明显了,在我新建的项目springcloud项目中pom文件的问题然后,想到这是一个父工程,找到原因是中只是声明依赖,而不实现引入。所以在声明前,应该确保对应版本的依赖已经下载到了本地仓库。 dependencyManagement中只是声明包,如果包没有使用到,且没有下载到本地,则包会飘红。也就是说dependencyMangement中声明的GAV不会触发下载。 不经dependency是树状关系,dependencymanagement出了继承的线性关系,也可以引入其他的pom构建成树状关系。所以继承关...
06 协变返回类型
Java 协变返回类型是指在子类中重写一个方法时,该方法的返回类型可以是父类中该方法返回类型的子类。这意味着子类可以返回更具体的类型,而无需强制转换为父类类型。 例如,假设有一个父类 Animal 和一个子类 Dog,它们都有一个返回类型为 Animal 的方法 getAnimal。在 Dog 类中重写该方法时,可以将返回类型更改为 Dog,因为 Dog 是 Animal 的子类。这样一来,当调用 Dog 的 getAnimal 方法时,会返回一个 Dog 对象而不是 Animal 对象。 导出类(子类)覆盖(即重写)基类(父类)方法时,返回的类型可以是基类方法返回类型的子类。 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960package com.evada.de;/** * @Author 云析学院 * Created by Ay on 2016/12/4. */public class Ay {...
07 内省
在计算机科学中,内省是指计算机程序在运行时(Run time)检查对象(Object)类型的一种能力,通常也可以称作运行时类型检查。不应该将内省和反射混淆。相对于内省,反射更进一步,是指计算机程序在运行时(Run time)可以访问、检测和修改它本身状态或行为的一种能力。 内省(Introspector)是Java语言对Bean类属性、事件的一种缺省处理方法。例如A类中有属性name,那么我们可以通过getName和setName来得到当前值或设置新的值。通过getName/setName来访问name属性,这就是默认规则。 https://blog.csdn.net/weixin_43726137/article/details/122924821
生命周期回调方法
对于spring的bean来讲,我们默认可以指定两个生命周期回调方法。一个是在ApplicationContext将bean初始化完全完成后,包括注入对应的依赖(例如属性注入)后的回调方法;另一个是在ApplicationContext准备销毁之前的回调方法。 要实现这种回调主要有三种方式: 实现特定的接口。在XML配置文件中指定回调方法。使用JSR-250标准的注解。 为什么要调用生命周期回调函数 因为如果在构造方法中执行一些操作,实际上spring并没有完成依赖注入,调用过程中会报错。因为在spring bean的实例化过程中,是先单独实例化PersonService和EvanService的。然后再完成对EvanService的注入。如果不这么做的话,而选择在PersonService的构造方法里用EvanService做一些事的话,此时的EvanService是还没有完成注入的。 调用构造函数初始化一个对象–> 进行依赖注入 –> 调用生命周期回调函数init方法 1 实现特定的接口针对bean初始化后的回调和ApplicationContext销毁前的回调,...
05 静态方法和单例模式
静态方法和非静态方法 静态方法和非静态方法,他们都是在第一次加载后就常驻内存,所以方法本身在内存里,没有什么区别 在内存中的区别是,非静态方法在创建实例对象时,因为属性的值对于每个对象都各不相同,因此在new一个实例时,会把这个实例属性在GC Heap里拷贝一份,同时这个new出来的对象放在堆栈上,堆栈指针指向了刚才拷贝的那一份实例的内存地址上。而静态方法则不需要,因为静态方法里面的静态 为什么要有非静态方法? 早期的结构化编程,几乎所有的方法都是“静态方法”,引入实例化方法概念是面向对象概念出现以后的事情了,区分静态方法和实例化方法不能单单从性能上去理解,创建c++,java,c#这样面向对象语言的大师引入实例化方法一定不是要解决什么性能、内存的问题,而是为了让开发更加模式化、面向对象化。这样说的话,静态方法和实例化方式的区分是为了解决模式的问题。 接下来继续思考,如果我们全部用静态方法,不用非静态方法,不是一样能实现功能吗?是的,没错,但是你的代码是基于对象,而不是面向对象的,因为面向对象的继承和多态,都是非静态方法。 第二个原因是为什么不建议都用静态方法,我们如果多线程的...
23 native方法
https://blog.csdn.net/weixin_43653599/article/details/111592025 https://www.jianshu.com/p/21f7ebb9e63f
11 Unsafe类
我们在阅读JAVA并发编程中JUC包下的类源码的时候,经常看见Unsafe类,但是有一个疑惑,为什么处理并发安全的类,要起名为“不安全”呢?后来对于Unsafe深入理解之后,才知道作者的原意,这里说的不安全并不是针对于并发操作,而是指:该类对于普通程序员来说是“危险”的,一般开发者不应该也不会用到此类。因为Unsafe类功能过于强大,提供了一些可以绕开JVM的更底层的功能。它让JAVA拥有了想C语言的指针一样操作内存空间的能力,能够提升效率,但是也带来了指针的复杂性等问题,所以官方并不建议使用,并且没提供文档支持,甚至计划在高版本去除该类。 1 Unsafe构造及获取 Unsafe类使用final修饰,不允许继承,且构造函数是private,使用了饿汉式单例,通过一个静态方法getUnsafe()来获取实例。 2 Unsage功能概述 内存管理 Unsafe的内存管理功能主要包括:普通读写、volatile读写、有序写入、直接操作内存等分配内存与释放内存的功能。 3.1.1、普通读写 Unsafe可以读写一个类的属性,即便这个属性是私有的,也可以对这个属性...
11 Java只执行一次
问题说明有时我们希望java程序能在高并发操作下,某个函数只执行一次。 一般情况下,设置一个门控值,每次执行前检查是否执行过,如果没有执行过,则设置为false,并执行。如果为true则不执行。如果是单线程,该方法能够发挥作用。 多线程情况下,如果多个线程同时判断门控值,都得到true,就会同时进入执行结果。 1 高并发下的原子操作使用一个原子Boolean值作为门控值。同一时间进入判断的值只有一个,能保证多线程情况下,该函数仍然只执行一次。 123456789101112private AtomicBoolean inited = new AtomicBoolean(false);/** * @see ServerManager#getServerList() */@Overridepublic List<ServerNode> getServerList() { if (inited.compareAndSet(false, true)) { initServerList(); }...














