String 常量池与 Spring容器的关联随想

我们都知道String是不可变的,它的实例数据通常是存在常量池

我试着用白话阐述下string与spring的相似点:

String test = "A";

声明一个String对象,它的名称是test,它的值是?

系统判断是String对象,会先去常量池中找是否有A这个字符串,有则将这个值的地址赋给test名称,没有则在常量池创建一个A值并将地址给test

@Autowired

private Bclass bc;

声明一个Bclass对象,它的名称是bc,它的值是?

根据@Autowired注解,系统判断是Spring容器管理的对象,会去spring容器中找是否有Bclass的对象实例,有则将这个实例地址赋给bc名称,没有则报错系统运行不了

两者都是先去容器找是否有实例存在,有就直接用上,string能够即使没也创建一个,spring则是没有就报错不能运行了。

这样看来String无疑是更强大的,毕竟是相对底层一点

那么Spring有没有可能像String那样,没有找到就自动创建一个实例到Spring容器中纳入Spring管理?

假定可以,如何去实现呢?

原本是先约定哪些是bean,放到bean容器中,@Autowired在容器中找,找到的其实就是已经被约定好的bean(比如@component与及它对应 淤生注解的类实例、xml的bean类实例、@configruation内的@bean实例等等)

现在我要打破这些约定,我没约定的bean,我也再尝试再构建一下,可能是定义一套规则,比如参考@Autowired找实例的做法,先根据类型,

去非spring容器找(感觉这点就好耗性能,要考虑是所有的类,还是只是应用类,且非spring管理的)

找不到的再根据名称按照一些约定转成类名去非spring容器找(都是性能损耗)

将找到的类纳入spring 容器管理,返回给变量指定实际地址

好像有点得不偿失,如果不是约定的Bean,依赖的那些jar包都去找的话,兴许要做个限定,只能应用内找且不从jar包找,如果找不到呢?这就是大问题了,应用报错不应该运行。

或者考虑这个找的过程在编译的时候就触发没找到直接就编译不通过?可以吗?要做的事太多了。

所以我个人还是学习Spring直接在内存(spring 容器)拿 ,拿不到就是没有,系统启动报错,先去配置(约定)好bean。再启动应用。看以后是否能力够去实现类似String没有就创建的强健壮

站在上层看String无疑是更佳的创建模式,Spring由于涉及引用对象,有复杂的生命周期过程,只能是遵循一定要有约定才能依赖注入的模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值