创建对象的几种方式
new、反射、反序列化、clone
反射
反射概念:
提供一个 Class对象 ,可以获得这个类对象的所有属性和方法
反射优劣势:
增加程序灵活,代码简洁,增强可读性,提高代码复用
量大时性能下降(安全权限检查 newInstance、class.forName JNI)、内部暴露和安全隐患
Class包含:
包(Package)
构造方法(Constructor)
字段(Filed)
函数(Method)
注解(Annotation)
接口
父类
修饰符 ...
clazz.getFields(); //获取类中所有的公有字段,包括集成
clazz.getDeclaredFields(); //获取类中定义的字段
clazz.getModifiers(); //获取类中所有的公有方法,包括集成
clazz.getDeclaredModifiers(); //获取类中定义的方法
getModifiers() //获取修饰符
invoke()
clazz.getDeclaredConstructors() //获取所有构造方法
…
IOC,DI
IOC:控制反转,对象实例创建的控制权交给程序(IOC 容器:K-V HashMap)
DI:依赖注入,对象构建的过程当中,IOC 动态的提供对象需要的其他对象
Spring IOC 容器中对象的创建方式:
构造器、静态工厂方法、实例工厂方法
Spring DI 的几种方式:
有参的构造器、setter函数
Bean 规范
类 -> 是公有修饰 public
类 -> 具有 public 默认构造函数
类 -> 属性访问修饰是 private,需要有public(setter,getter)
spring 配置元数据
- 基于XML的配置文件
- 基于注解的配置
- 基于JAVA的配置
class
name
scope
constructor-arg
properties
autowiring mode
lazy-initialization mode
initialization
destruction
作用域
singleton、prototype、request、session、global-session
WebApplicationContext可用(request、session、global-session)
生命周期
init-method:InitializingBean 不建议使用
destroy-method:DisposableBean 不建议使用
1 | AbstractApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml"); |
XML -> beans 配置默认的初始化和销毁方法
default-init-method="init"
default-destroy-method="destroy"
后置处理器
BeanPostProcessor
调用初始化方法前后
对 Bean 进行额外的处理
通过设置 BeanPostProcessor 实现的 Ordered 接口提供的 order 属性来控制这些 BeanPostProcessor 接口的执行顺序
定义继承
1 | <bean id="beanTeamplate" abstract="true"> |