装逼
1、抽象类在内部有被lookup注解修饰的方式时,他可以成为一个bean,顶级类或者静态匿名内部类可以,接口普通匿名内部类不可以。

2、BeanDefinition里面beanClass为什么Object,而不是Class类型,因为一开始通过资源加载的,得到的是文件流,然后通过ASM字节码技术得到class的类名,
此时class还没有加载到jvm,后面用到的时候,才加载到jvm,才放的是class信息。

3、spirng加快bean扫描的方式,就不用遍历包下来的路径,根据定义好的bean信息,而不是扫包路径了。


4、beanDefinition有继承关系,子类会继承或者重写跟父类相同的属性(比如scope、lazy),扫描的时候是递归进行的,生成一个全新的mergeBeanDefintion。


5、beanFactory也是有父子关系的,根据beanname判断是不是factorybean,自己factory容器找不到,也会找父factory容器查看

6、根据别名找bean,为什么是个do while,为了防止别名map有嵌套。别名service1对应别名service2,别名service2对应真正的service名字


7、有种dependon注解产生的循环依赖是直接抛异常的

8、除了使用autowira注解和resource注解,还可以在@bean注解加autowire

9、bean自动注入byname是根据set方法名字来匹配的,而不是参数名。

9、@autowire,@Resource都是通过不同的BeanProcessor来实现的,如果xml方式,这里没有开启,说明没有把对应Processor加进去
则注解不会生效。

10、写了个destroy方法,是spring容器关闭的时候调用,不是jvm关闭的时候调用的。钩子函数本质也是调用close。

11、销毁bean的时候先销毁他依赖的bean,再销毁自己。是一个递归的过程。

12、不支持静态类型属性的自动注入,因为static修饰的成员变量是跟类绑定,而不是跟类实例绑定,假如AB都是多例,A里有属性B,
A a1=ac.getBean("a");A a2=ac.getBean("a"); a1里的b会被a2里的b属性覆盖。

13、被lazy修饰的属性,注入的是代理对象。

14、@order只是控制bean扫描顺序,跟依赖注入无关,可以在属性上加@primary表示优先级最高,多个属性加会报错,多个的话得使用过@priority(优先级数越小越大)在类上标明。


15、factoryBean实现方法除了getObjec为什么还需要重写getType,因为依赖注入的时候实现根据type去获取的
16、autw0ire自动注入如果根据类型找到多个bean,如果是自己注入自己的,优先考虑其他外部定义的bean。

自己注入自己:

存在其他定义的bean


浙公网安备 33010602011771号