文章前言:
写这篇文章的时候,我正在手机上看腾讯课堂的公开课,有讲到 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容器
→→请点击查看更多详细…