Spring bean依赖注入spring的bean和普通的bean

2025-10-20 02:20:37

1、bean 分为普通的java bean  和 spring的bean。那么何为普通的java bean ,何为spring的bean呢,如果大家使用的框架是spring3.0注解的形式,那么只要是配置了

<context:component-scan base-package="com.haiyisoft">

</context:component-scan>

并且在bean上加上注解 @Component("name")

配置了这两个之后系统会在启动服务的时候扫描package包下所有带有Component注解的类进行初始化,这种bean最终都放到spring容器中,这就是spring的bean。如下图配置:

Spring bean依赖注入spring的bean和普通的bean

2、那普通的java bean  又是如何?简单了,没加注解的就是啊!!那spring bean 和 普通的java bean  又是如何使用的呢?普通的java bean 使用时直接 new,产生一个实例。spring bean 是在启动服务时候就初始化,如果用spring的bean,那么直接getbean("beanname")即可。

3、然而今天小编也遇到一个奇怪的问题,希望也能帮我分析,我把这个经验也分享下:

今天在使用树的组件调用一个普通的java类时,我按照spring 注解的使用方式进行了如下配置:

Spring bean依赖注入spring的bean和普通的bean

4、上述类就是数组件调用的类,jsp 描写方式 如下:

Spring bean依赖注入spring的bean和普通的bean

5、我框架还有个接口 service 和实现类,当我想把接口注入到QueryFLTree中时,我做了如下配置:

Spring bean依赖注入spring的bean和普通的bean

6、当我写好,准备使用时,却报空指针异常:

TycxsjjflcxService.query(query);

7、然而,我遵循着一个spring 的机制来排查问题,我想,既然,autowired是spring的bean才可以注入,那么意思就是说我的service根本就没有注入到queryftlTREE类中,也就是说 QueryFLTree并不是spring的bean。又查了一下:QueryFLTree 是继承tree组件,类是new出来的,而spring的bean是程序启动是自动实现的。两者不是一个概念。这时候我清楚了,但是还有两个问题我并不清楚:

我是在tree类 加上 @component了呀,加上这个 不就是自己扫描么。这样不就是spring的bean了么?

Object bean1 = BeanLocator.getBean("queryfltree"); 这个bean是能拿到的这有说明了什么呢?

Spring bean依赖注入spring的bean和普通的bean

8、带着这俩问题,我就想,既然service注入不到tree类,那我直接用getBean拿出来用不就行了么,果断这么些:

TycxsjjflcxService beanS =  (TycxsjjflcxService)BeanLocator.getBean("TycxsjjflcxService");

    list =beanS.query(query);

不得不说,果然好用了。

9、总结,综上所述,只要是加了@Autowired和 @Service @Component注解的都可以是spring的bean。使用getbean 都能取出来直接用。

10、配置时,还需要注意的是 如下:

Spring bean依赖注入spring的bean和普通的bean

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢