其实我们知道,不管是基于 注解,还是基于XML,他们的不同在于生成BeanDefinition,只要得到他之后呢?后面的其实就是通用的了。...bean存放的地方,也就是在Java中其实也就是map,所以大致的初始化流程,就是先扫描注解,和xml 生成我们Beandefinition,然后再生成Bean,然后再提供给外面使用,整体的流程就是这么简单...在DefaultApplicationContext中,我们先完成第一步,定位和解析配置文件。...,流程分为三步走: 将我们传入的配置文件路径解析为文件流 将文件流保存为Properties,方便我们通过Key-Value的形式来读取配置文件信息 根据配置文件中配置好的扫描路径,开始扫描该路径下的所有...public BeanDefinitionReader(String... locations) { try( //1.定位,通过URL定位找到配置文件,然后转换为文件流
lambda.getClass().isSynthetic()) { throw ExceptionUtils.mpe("该方法仅能传入 lambda 表达式产生的合成类");...非 lambda 传入时 getModifiers()取到的值为 0,检验将无法通过,抛出异常。...这里会将 PoemsAuthor::getName 识别成 KFunction 类型,KFunction 是 kotlin 中的高阶函数,与 kotlin 中的 lambda 表达式有着极其密切的关系,...(Input) -> Result 在 kotlin 中 Lambdas 表达式是花括号括起来的代码块。...} 但是这种方式在 myibatis-plus 中又会识别出不是原生的 java lambda 表达式,从而解析出错。
一般我们都使用new关键字来进行实例,还可以在构造器中进行相应的初始化操作。 在一个Java类中必须存在一个构造器,如果没有添加系统在编译时会默认创建一个无参构造。...所以在Object中两个对象的引用相同,那么一定就是相同的。在我们自定义对象的时候一定要重写equals方法。...4.getClass 方法 我们首先看一下getClass在Object中的实现。 ? 我们看到getClass被native标识,这代表这是调用本地方法实现 关于native更多请百度。...native是由操作系统帮我们实现 文档说明的是调用getClass返回一个运行时的类。什么意思呢 我们看下面的代码实现。 ? 打印结果: ? 可以看出getClass是返回一个运行时的对象。...所以在添加数据的时候使用了哈希表,哈希算法也称之为散列算法,当添加一个值的时候先算出它的哈希值根据算出的哈希值将数据插入指定位置。这样的话就避免了一直调用equals造成的效率隐患。
那什么是方位信息呢? 方位信息就是相对于方法的位置信息,如:方法前、方法后、方法环绕 为什么要方位信息呢?切点不是确定了需要增强的位置了吗? ...切点定位的是“在什么类的什么方法上”,也就是说,切点只是定位到了方法本身(也叫执行点,特殊的连接点),但是我们增强的内容是放在该方法的前面呢、后面呢?还是前后都要呢?...这些切点却没有告诉我们,那么我们该如何确定具体位置呢? 所以,我们才需要用到方位信息,进一步的定位到具体的增强代码放置的位置。 咦?...恩,确实如此,因为通过方位信息,虽然只是简单的描述了【功能】需要放在方法前、后、还是前后都要等信息,但是我们还是可以通过方位定位到位置。只不过,是匹配到所有类的所有方法!...所以,我们才需要用切点来进一步确认位置。
知道知道,代理就是通过代理对象去访问实际的目标对象,比如我们在生活中租房,可以直接找房东,也可以通过某些租房平台去租房,通过租房平台的这种方式就是代理。...面试官:没想到你还能通过生活中的现象去理解代码,不错不错,我看你提到了静态代理和动态代理,那你给我说说什么是静态代理吧 (果然问了,还好我做了准备)静态代理就是在代码运行之前,这个代理类就已经存在了。...面试官:如果我记的没错,通过这种方式只能代理接口吧,我看你上面的例子也都是代理接口,那我如果想代理类该怎么办呢?...平常我的业务代码中虽然几乎没有使用过动态代理,但是我工作中使用的Spring系列框架中的AOP,以及RPC框架中都用到了动态代理,以AOP为例,AOP通过动态代理对目标对象进行了增强,比如我们最常用的前置通知...面试官:那你知道如何自己去定义注解吗?
一、我们为什么需要重写hashCode()方法和equals()方法?(Why) 有时在我们的业务系统中判断对象时有时候需要的不是一种严格意义上的相等,而是一种业务上的对象相等。...我们所知道的JavaBean的超类(父类)是Object类,JavaBean中的equals方法是继承自Object中的方法.Object类中定义的equals()方法是用来比较两个引用所指向的对象的内存地址是否一致...equals方法的时候需要重写hashCode方法呢?...以HashSet来说明为什么要这么约定:HashSet存放元素时,根据元素的hashCode值快速找到要存储的位置,如果这个位置有元素,两个对象通过equals()比较,如果返回值为true,则不放入;...如果返回值为false,则这个时候会以链表的形式在同一个位置上存放两个元素,这会使得HashSet的性能降低,因为不能快速定位了。
但是我们在使用Object类,String 类,Integer类等不需要手动导入,而能直接使用,这是为什么呢? ...5、getClass 方法 上面我们在介绍 equals 方法时,介绍如果 equals 的语义在每个子类中有所改变,那么使用 getClass 检测,为什么这样说呢? ...也就是Java中的反射,各种通用的框架都是利用反射来实现的,这里我们不做详细的描述。 这里详细的介绍 getClass 方法返回的是一个对象的运行时类对象,这该怎么理解呢?...Java中还有一种这样的用法,通过 类名.class 获取这个类的类对象 ,这两种用法有什么区别呢? ...= 0x001,发生了哈希冲突,这时候由于最先是插入了 A,在插入的B的时候,我们发现 B 是要插入到 A 所在的位置,而 A 已经插入了,这时候就通过调用 equals 方法判断 A 和 B 是否相同
实现相同的接口和额外功能我们都提供了,那么为什么还要提供一个类加载器呢?...而我们这里没有创建出代理类,所以就没有源文件,就没有 .class 文件,也就不会分配 ClassLoader,这里采用的是动态字节码技术: 动态字节码技术:创建字节码。...在动态代理创建的过程中,需要 classloader 创建代理类的 Class 对象; 可是因为动态代理没有对应的 .class 文件,JVM也就不会为其分配 ClassLoader,但是又需要,所以借用一个...InvocationHandler 是一个接口,我们可以写个匿名内部类,也可以直接使用 Lambda 表达式实现,这里用 Lambda 演示: (proxy, method, arguments) ->...我们可以通过返回值将代理过的对象返回。
提出问题的时间到了,当我们super.getBean的时候是通过bean的id从IOC容器中获取的,那么这个id是什么呢?...提出问题的时间到了,当我们super.getBean的时候是通过bean的id从IOC容器中获取的,那么这个id是什么呢?...BeanImplOne类和BeanImplTwo类是实现了BeanInterface接口的,在BeanInvoker类里面我们定义了list和map,我们通过@Autowired注解把BeanImplOne...那么怎么证实是@Autowired注解把这两个类注入到list或者map中的呢?...这里的@ImportResource注解就是指明一个资源文件,在这个资源文件里面获取到对应的数据。那么@Configuration注解是用来干嘛的呢?为什么不用@Component注解呢?
pathname.isDirectory() && pathname.getName().endsWith(".apk"); } 好了,我们在 loadPlugin() 的代码中会注意到,无论是加载单个插件还是多个插件都会调用...加载插件 apk 中的资源文件 再回到 buildPlugInfo() 的代码中去,接下来就是第三步,加载插件中的资源文件了。...这样就实现了访问插件中的资源文件了。那么到底 addAssetPath 这个方法有什么魔力呢?...所以我们只能通过反射的方式来执行了。这样就解决了加载插件中的资源文件的问题了。...为插件 apk 设置 ClassLoader 终于到了最后一个步骤了,如何为插件设置 ClassLoader 呢?其实解决的方案就是通过 DexClassLoader 。
在实际项目开发中,用的最多的是框架,填的最多的是类,反射这一概念就是将框架和类揉在一起的调和剂。所以,反射才是接触项目开发的敲门砖! 一、Class类 什么是Class类?...;//这种表达方式同时也告诉了我们任何一个类都有一个隐含的静态成员变量class //第二种表达方式 Class c2=f.getClass();//这种表达方式在已知了该类的对象的情况下通过getClass...既然它封装了成员变量,我们又该如何获取这些成员变量呢?...)+","); } System.out.println(")"); } } 五、Class类的动态加载类 如何动态加载一个类呢?...所以这并不是我们想要的。 我们想要的就是我用那个类就加载那个类,也就是常说的运行时刻加载,动态加载类。如何实现动态加载类呢?
B:如何去掉默认注释? window -- Preferences -- Java -- Code Style -- Code Templates 选择你不想要的内容,通过右边Edit编辑。...Variables:查看程序的变量变化 ForDemo:被查看的源文件 Console:控制台 如何去断点: a:再次双击即可 b:找到Debug视图,Variables界面,找到Breakpoints...如何重写呢?过程我也讲解过了,基本上就是要求信息简单明了。 但是最终还是自动生成。...比较地址值一般来说意义不大,所以我们要重写该方法。 * 怎么重写呢? * 一般都是用来比较对象的成员变量值是否相同。 * 重写的代码优化:提高效率,提高程序的健壮性。...B:getClass() 返回对象的字节码文件对象,反射中我们会详细讲解 C:finalize() 用于垃圾回收,在不确定的时间 D:clone() 可以实现对象的克隆,包括成员变量的数据复制,但是它和两个引用指向同一个对象是有区别的
想要使用反射机制,就必须要先获取到该类的字节码文件对象(.class),通过字节码文件对象,就能够通过该类中的方法获取到我们想要的所有信息(方法,属性,类名,父类名,实现的所有接口等等),每一个类对应着一个字节码文件也就对应着一个...1、Class class1 = Class.forName("全限定类名"); //通过Class类中的静态方法forName,直接获取到一个类的字节码文件对象,此时该类还是源文件阶段,并没有变为字节码文件...类中的静态方法forName) 19 * public static Class forName(String className) 20 * 21 * 一般我们到底使用谁呢...这样我们就可以把这样的字符串配置到配置文件中。...在JDK中JRE的lib目录下rt.jar文件中(JDK8以前版本中的位置,JDK9/10位置变化了)。
一:注意事项 1:android6.0使用蓝牙时,需要开启gps定位权限,不然无法搜索其它蓝牙设备。 二:权限 1:权限配置 <!...-- 在SDCard中创建与删除文件的权限 -- <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS...)); Toast.makeText(mContext, "isLo:" + isLocat, Toast.LENGTH_LONG).show(); //开启位置服务,支持获取ble蓝牙扫描结果.../*确保蓝牙被发现,在荣耀8手机上,设置了还是默认的2分钟,所以以下几句代码程序中没有,*/ Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE...1 当我们搜索到目标手机的蓝牙后,android设备主动发起连接请求,代码如下 if (device.getName().equals(TEST_DEVICE_NAME)) { boolean bondStatus
如何使用Maven构建JavaFX程序呢?下面给出一个简单的示例! 本工程包含一个main入口函数类,一个controller类,资源文件包括一个fxml文件,一个css样式文件。...Simple JavaFX"); primaryStage.setScene(scene); primaryStage.show(); } } 这里注意FXML和CSS资源文件的位置...如果资源文件放置在resources目录下面的和源码文件带包的目录类似的目录下面,即如果放置在resources/cn/tzy/目录下面的话,则获取资源的方式应该是:getClass().getResource...大家可以通过观察编译以后的目录中文件的位置进行测试和实践。 Main.fxml 这个文件中只有一个Button按钮 <?...fx:controller="cn.tzy.MainController" Controller指定了如何处理用户事件,在Button的onAction属性中通过“#处理函数名”的方式将Controller
首先我们先来认识一下对象 学生----->抽象----->Student 表示学生 Student = ....... 那我们的反射中的Class呢?...即:在"运行时",通过反射机制可以动态获得到和该类型相关的各种信息。 java通常是先有类后有对象,有对象就可以调用方法或属性。反射其实是通过Class对象来调用类里面的方法。 ...,就能够通过该类中的方法获取到 我们想要的所有信息(方法,属性,类名,父类名,实现的所有接口等等),每一个类对应着一个字节码文件也就对应着一个Class类型的对象,也就是字节码文件对象。 ...,此时该类还是源文件阶段,并没有变为字节码文件。 ...3.2、获取指定构造器方法 constructor 如果没有无参构造,只有有参构造如何创建实例呢?看下面 ?
Object类 API:Application Programming Interface 应用程序编程接口,Java API就是Java提供给我们使用的类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的...int indexOf(int ch,int fromIndex):返回指定字符在此字符串中从指定位置后第一次出现处的索引。...int indexOf(String str,int fromIndex):返回指定字符串在此字符串中从指定位置后第一次出现处的索引。...int lastIndexOf(int ch,int fromIndex):返回指定字符在此字符串中从指定位置往前数第一次出现处的索引。...int lastIndexOf(String str,int fromIndex):返回指定字符串在此字符串中从指定位置往前数第一次出现处的索引。
war包需要部署到web服务器中(Tomcat、Apache、IIS) 1.2 jar包 jar包是类的归档文件,主要用于存储Java类文件和相关资源文件。...二、SpringBoot使用war包启动 war包启动:需要先启动外部的Web服务器,实现Servlet3.0规范中引导应用启动类,然后将war包放入Web服务器下,Web服务器通过回调引导应用启动类方法启动应用...2.1 Servlet3.0规范中引导应用启动的说明 在Servlet容器(Tomcat、Jetty等)启动应用时,会扫描应用jar包中 ServletContainerInitializer 的实现类...而我们项目的启动类SpringBootDemoApplication定义在Start-Class属性中, JarLauncher会将BOOT-INF/classes下的类文件和BOOT-INF/lib下依赖的...// 我们通过尝试设置null URLStreamHandlerFactory来重置处理程序,除了清除处理程序缓存之外,它应该没有任何效果。
静态代理 程序运行前代理类的字节码文件依然存在,需要程序员编写源文件。 缺点:要针对于每一个类撰写代理类;对于单个被代理的类,如果需要被代理的方法很多,又加大了工作量。 优点:直观,可读性较强。...至于如何生成一个class文件,在既定规则下你当然可以先生产java文件,再编译成class文件。...通过代理层这一中间层,有效的控制对于真实委托类对象的直接访问,同时可以实现自定义的控制策略(Spring的AOP机制),设计上获得更大的灵活性。...JDK的动态代理实现 jdk的动态代理,依赖的是反射包下的InvocationHandler接口,我们的代理类实现InvocationHandler,重写invoke()方法,每当我们的代理类调用方法时...().getClassLoader(), userService.getClass().getInterfaces(), invocationHandler
Java 5之后可以在源代码中嵌入一些补充信息,这种补充信息称为注解(Annotation),例如在方法覆盖中使用过的@Override注解,注解都是@符号开头的。...().getName() + ":" + arg); } } } 在可变参数display前添加@SafeVarargs注解。...这一节先介绍一下这几种元注解含义,下一节在自定义注解中详细介绍它们的使用的。...@Repeatable @Repeatable注解是Java 8新增加的,它允许在相同的程序元素中重复注释,可重复的注释必须使用@Repeatable进行注释。...:Java源文件(.java文件) ---> .class文件 ---> 内存中的字节码。
领取专属 10元无门槛券
手把手带您无忧上云