spring启动,bean工厂准备工作
refresh()中的prepareBeanFactory(beanFactory)方法,beanFactory的准备工作,对各种属性进行填充
prepareBeanFactory()
1,设置beanFactory的classloader为当前context的classloader
2,设置beanfactory的表达式语言处理器
3,为beanFactory增加一个默认的propertyEditor,这个主要是对bean的属性等设置管理的一个工具类
4,添加beanPostProcessor,ApplicationContextAwareProcessor此类用来完成某些Aware对象的注入
5,设置要忽略自动装配的接口,这些接口的实现是由容器通过set方法进行注入的,在new ApplicationContextAwareProcessor(this)的invokeAwareInterfaces已经注入,所以在使用autowire进行注入的时候需要将这些接口进行忽略
6.设置几个自动装配的特殊规则,当在进行ioc初始化的如果有多个实现,那么就使用指定的对象进行注入
7.注册beanPostProcessor
8.增加对AspectJ的支持,在java中织入分为三种方式,分为编译器织入,类加载器织入,运行期织入,编译器织入是指在java编译器,采用特殊的编译器,将切面织入到java类中,而类加载期织入则指通过特殊的类加载器,在类字节码加载到JVM时,织入切面,运行期织入则是采用cglib和jdk进行切面的织入。aspectj提供了两种织入方式,第一种是通过特殊编译器,在编译器,将aspectj语言编写的切面类织入到java类中,第二种是类加载期织入,就是下面的load time weaving
9.注册默认的系统环境bean到一级缓存中
prepareBeanFactory()中的属性编辑拓展:
new ResourceEditorRegistrar() 属性编辑注册器用来填充具体的属性,在bean创建的时候
beanFactory.addPropertyEditorRegistrar(),为beanFactory增加一个默认的propertyEditor属性编辑器
自定义属性编辑器,自定义属性的解析器来完成对应的属性解析工作
需求:将省-市-镇的地址解析成address类
1.Address.java
2.Customer.java
3.AddressPropertyEditor.java
4.MyPropertyEditorRegistrar.java
5.propertyEditor.xml
6.Test.java