今日做东东,遇到一个问题。就是一些bean是通过@Service的方式声明成为bean的。
结果在某些应用里面因为需要序列化的原因,不能直接注入bean,需要在bean加载完之后手动取出需要的bean并且应用。但是声明的bean并没有名字....
疑惑之下,看了一下Spring的源码,理解了一下spring bean的id,name的管理方式,理解如下:
id是唯一标志一个bean的。在一个bean生成的过程中,如果有id,那么自然最好。如果没有设置id,只设置了
name属性(name属性可以设置多个,比如: a,b,c),那么就把name属性中的第一个取出来,作为id;
如果都ID和name都没有设置(例如:@Service),那么系统会有一个默认生成id的方式。就是段类名。
比如:com.abc.T.class的短类名就是t(Spring取出短类名之后会进行转化,转换成java常用的参数命名形式,比 如:AtTen会被转化成atTen.).只是有一点很让我疑惑,那就是采用短类名的方式容易出现id重复的
bean,于是在加载的时候肯定会报错。不明白为什么spring没采取长类名的方式。
渴求高人指点。