向Spring容器中注入bean有哪几种方式?

文章前言:

写这篇文章的时候,我正在手机上看腾讯课堂的公开课,有讲到 Spring IOC 创建bean有哪几种方式,视频中有提到过 set注入、构造器注入、注解方式注入等等;于是,就想到了写一篇《Spring注入bean有几种》文章。一方面,自己巩固下知识;另一方面;学习下别人是怎样的学习方式与理解方式。
在翻阅很多博客、和论坛帖子,再结合自己工作中用到的、常见到的。
总结下:

一、 Set方式注入bean

我认为 set注入bean 又可以看作 属性注入

通过在 spring.xml 文件中书写 bean 标签、 property标签 ,来完成对bean的配置的。
先通过无参构造器生成对象, 再给每一个实例对象的属性赋值,本质上我认为它还是 构造器注入bean

code 部分:


<!--  1、Set注入bean  -->
    <bean id="scoreBean1" class="com.akun.pojo.Score" >
        <!-- 需要Score类中 有无参构造器public Score(){}, 生成Score对象后, 然后Set每个属性值-->
        <property name="math" value="90"></property>
        <property name="history" value="99"></property>
    </bean>

<!-- 2、参数复杂些的 Set注入bean -->
    <bean id="StudentBean1" class="com.akun.pojo.Student" >
        <!-- 1、总结: 先有无参的构造器public Student(){},生成Student对象后,再Set值给到每个属性。不然,就会报错。-->
        <property name="name" value="高启强"></property>
        <property name="studentScore" ref="scoreBean1"></property>
    </bean>
<!-- 3、参数复杂些的  Set注入bean -->
    <bean id="StudentBean2" class="com.akun.pojo.Student" >
    <!-- 1、这个constructor-arg标签对应Student类中 有参构造器public Student(Score studentScore){},
            使用了该构造器,创建了Student 对象,再然后Set值name属性。
            所以要看做是一个“<priperty> 标签”。
         2、总结:  1-Student类的每个属性名映射"name"属性, 不分前后顺序。
                   2-这个算是Set属性注入。
                   3-从我调试的经验上看,Set注入bean, 算是构造器注入,
                     理由是: Set注入bean, 最先还是运用无参构造器,得到了对象,再然后赋值给它的每个属性。
    -->
        <constructor-arg name="studentScore" ref="scoreBean1"></constructor-arg>
        <property name="name" value="高启盛"></property>
    </bean>

在需要依赖注入的地方利用 ApplicationContext类 的对象来调用Spring ioc 容器(bean容器)中的依赖对象,完成属性注入。

创建对象的过程由 程序员本身 转移到了 框架 中,此为“控制反转”。

java code部分:


 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
 Score scoreBean1 = applicationContext.getBean("scoreBean1", score.class);
 System.out.println(scoreBean1.toString());
 

二、构造器方式注入bean

配置 spring.xml 文件,绑定实体类,使用 、标签 来完成 构造方法注入bean。

在spring.xml 中 code部分:


<!-- 4、构造器注入bean -->
    <bean id="scoreBean2" class="com.akun.pojo.Score">
        <!--    -->
        <constructor-arg name="math" value="60"></constructor-arg>
        <constructor-arg name="history" value="66"></constructor-arg>
    </bean>

利用 ApplicationContext类 的实例对象调用Bean容器(IOC容器)中的用有参构造器创建的对象注入。
创建对象的过程由 程序员本身 转移到了 Spring框架 中,此为控制反转。

三、p命名空间注入bean

Spring提供了p、c命名空间注入,实际上p就是property的意思、c就是constructor-arg的意思。算是对构造器注入和set注入的简化吧!

1、使用p、c命名空间注入bean需要 引入两个标签在文件头的配置中。
2、p命名空间依赖 xmlns:p=“http://www.springframework.org/schema/p”
3、实体类中必须要有 有参构造方法。

在spring.xml文件中 code部分:


<bean id="scoreBean3" class="com.akun.pojo.Score" p:math="40" p:history="44"></bean>

四、c命名空间注入bean

1、使用p、c命名空间注入bean需要 引入两个标签在文件头的配置中。
2、c命名空间依赖 xmlns:c=“http://www.springframework.org/schema/c”
3、实体类中必须要有 有参构造方法。


	<bean id="scoreBean4" class="com.akun.pojo.Score" c:math="30" c:history="33"></bean>

在理解 这几种 bean注入时, 可以温顾以往的知识。→→→Spring框架中核心IOC容器
→→请点击查看更多详细…

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

向前与寻找

谢谢你,看我的自学知识总结

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值