装逼

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

image

 2、BeanDefinition里面beanClass为什么Object,而不是Class类型,因为一开始通过资源加载的,得到的是文件流,然后通过ASM字节码技术得到class的类名,

此时class还没有加载到jvm,后面用到的时候,才加载到jvm,才放的是class信息。

 

image

 

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

 

 

image

 

image

 

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

image

 

image

 

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

 

 

image

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

 

image

 

image

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

 

image

 

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

image

 

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

image

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

则注解不会生效。

image

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

image

 

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

 

 

 

 

image

 12、不支持静态类型属性的自动注入,因为static修饰的成员变量是跟类绑定,而不是跟类实例绑定,假如AB都是多例,A里有属性B,

A  a1=ac.getBean("a");A  a2=ac.getBean("a"); a1里的b会被a2里的b属性覆盖。

image

 

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

image

 

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

 

 

image

 

 

image

 15、factoryBean实现方法除了getObjec为什么还需要重写getType,因为依赖注入的时候实现根据type去获取的

16、autw0ire自动注入如果根据类型找到多个bean,如果是自己注入自己的,优先考虑其他外部定义的bean。

image

自己注入自己:

image

存在其他定义的bean

image

 

posted @ 2025-12-12 23:59  傲云萧雨  阅读(11)  评论(0)    收藏  举报