关于Spring 注入的几种方式,网上都有一大堆,唯独没有,利用注解,注入自定义的bean。
需求:期望在Spring 容器启动,注入bean(UserService) 的时候,初始化bean时,给bean 内的一个全局变量赋值。 该值是在启动时,调用 userDao ,查询取值。(这里放JVM 内存中,会导致集群模式下,每台机器的数据不一致问题:JVM启动时间不一样,数据会被更新,所以最好存入redis 中,使用时,从redis 拿)
直接上结果:
1.xml 中注入带参(userDao )构造函数bean,不做阐述,网上一堆。
2. 注解方式的实现自定义带参构造函数,预加载bean,如下图:

解释说明:
1.如果不加@Autowired,则Spring会报,找不到无参构造函数 对应的bean。Spring 容器启动失败。
2. 那不加 @Autowired,也加上无参构造函数呢?则会在调用 userDao 这个bean alias的时候,报NullPointException。
因为Spring 默认以无参构造函数,初始化bean。

3. 那如果都加呢,如下图,在Spring 容器中,会存在几个 HelloService 的bean? 隐约记得,Spring 在bean 加载时,做了merge 处理,所以应该只存在一个alias(别名) 为helloService 的 bean, 但不确定,等我再看下源码后,下回再发文记录吧。

文章转载自Java架构师编程,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




