spring框架
1.注解的原理?
注解本质是一个继承了Annotation的特殊接口,其具体实现类是Java运行时生成的动态代理类。我们通过反射获取注解时,返回的是Java运行时生成的动态代理对象。通过代理对象调用自定义注解的方法,会最终调用AnnotationInvocationHandler的invoke方法。该方法会从memberValues这个Map中索引出对应的值。而memberValues的来源是Java常量池。
2.Bean的生命周期?
下面是Spring3的Bean生命周期。
- Spring对Bean 进行实例化.
- Spring 将值和Bean的引用注入进Bean对应的属性中。
- 如果Bean 实现了BeanNameAware 接口, Spring 将bean 的ID 传递给setBeanName() 接口方法.
- 如果Bean实现了BeanFactoryAware 接口, Spring 将调用setBeanFactory()接口方法,将BeanFactory容器实例传入.
- 如果Bean 实现了ApplicationcontextAware 接口 Spring 将调用setApplicationContext() 接口方法,将应用上下文的引用传入。
- 如果Bean实现了BeanPostProcessor 接口Spring 将调用它们的postProcessBeforeInitialization 接口方法。
- 如果Bean 实现了InitializingBean 接口,Spring 将调用它们的afterPropertiesSet()接口方法. 类似地,如果Bean 使用init-method 声明了初始化方法,该方法也会被调用。
- 如果Bean 实现了BeanPostProcessor 接口, Spring 将调用它们的postPoressAfterInitilization方法.
- 此时此刻Bean 已经准备就绪.可以被应用程序使用了. 它们将一直驻留在应用上下文中.直到该应用上下文补销毁。
- 如果Bean实现了DisposableBean 接口,Spring 将调用它的destroy()接口方法。同样,如果Bean 使用destroy-method 声明了销毁方法,方法也会被调用。
3.spring如何减少XML的配置数量?
自动装配(autowiring)有助于减少甚至消除<property>
元素和<constructor-arg>
元素,让Spring自动识别如何装配Bean的依赖关系。
自动检测(autudiscovery)比自动装配更进一步,让Spring能够自动识哪些类需要被配置成Spring Bean,从而减少对Bean元素的使用。
4.四种类型的自动装配?
byName——把与Bean的属性具有相同名字(或者ID)的其它Bean自动装配到对应属性中。如果没有跟属性的名字相匹配的Bean,则该属性不进行装配。
byType——把与Bean的属性具有相同类型的其它Bean自动装配到对应属性中。如果没有跟属性的类型相匹配的Bean,则该属性不进行装配。
constructor——把与Bean构造器参数具有相同类型的其他Bean自动装配到Bean构造器的对应参数中。
autodetect——首先尝试使用constructor进行自动装配,如果失败,再尝试使用byType进行自动装配。
5.什么是反射,反射可以干什么?
反射是:指程序可以访问、检测和修改它本身状态或行为的一种能力
平时用反射主要做:
获取类型的相关信息
动态调用方法
动态构造对象
从程序集中获得类型