Volatile的可见性由MESI一致性协议保证,还有总线嗅探机制。
Spring是轻量级的,开源的javaee的框架。
IOC:控制反转,把创建对象的过程交给Spring进行管理。
AOP:面向切面编程,再不修改源码的情况下进行功能增强。
动态语言:可在程序运行的时候改变程序结构活变量类型。java不是动态语言,但是有一定的动态性。
反射:程序在运行状态,可以动态加载一个只有名称的类,对于任意一个已加载的类,都能够知道类的属性和方法,对于任意一个对象,都能知道他的任意一个方法和属性。
利用反射获取类的属性或者方法:
Class cls=Class.forName(“com.jr.User”);
若要获取所有的public属性:
cls.getFields(返回一个pulbic属性数组)
若要获取所有的属性:
cls.getDeclareFields(返回属性数组)
若要获得指定的属性:
cls.getField(“字段”,只能获取非pravite的);
cls.getDeclaredField(“字段”),需要设置setAccessible(true)
获取方法:
cls.getMethods:返回public方法数组;
cls.getDelareMethods:返回所有方法数组;
cls.getMethod(“方法名”):获得指定的方法(只能是public方法);
cls.getDeclareMethod(“方法名”):获得指定方法,如果是私有,需要设置setAccessible(true);
获取构造器:
cls.getConstructors:获取构造器数组;
cls.getConstructor(指定参数类型可以获得指定的构造器,例如int.class就是一个int参数的构造器)
通过反射获得对象的方式:
cls.newInstance:通过无参构造获得对象;
通过有参数的构造获取对象
Constructor c=cls.getConstructor(int.class)
User user=c.newInstance(1);因为上面是一个int类型的参数;
IOC底层实现原理:xml解析,工厂模式,反射。过程:创建工厂类,在工厂里通过xml解析获取class中的字段,在通过反射创建对象。
IOC的两大核心接口:
BeanFatory:IOC容器的基本实现,是Spring内部的使用接口,不提供给开发人员使用,加载文件时不会创建对象,只有在获取对象时才会创建对象。需要手动注册。
ApplicationContext:BeanFatory的子接口,提供更多强大的功能,一般是开发人员使用的,加载文件的时候就将对象创建了。自动注册。
DI依赖注入:就是将组件之间的依赖关系由容器在应用系统运行期来决定。
依赖注入:set方式注入(由无参创建对象);有参构造注入(由有参创建对象)