原文出自:http://www.cnblogs.com/liunanjava/p/4401236.html

一、构造方法注入

定义:通过构造函数来完成依赖关系的设定

优缺点:

在构造对象的同时,完成依赖关系的建立

如果关联的对象很多,那就不得不在构造方法上加入过多的参数

基中有index:如果指定索引从0开始,type用来指定类型

实体类:

package com.pb.entity;
/*** 班级类* @author Administrator**/
public class Grade {private int id;            //班级编号private String name; //班级名称public Grade() {super();// TODO Auto-generated constructor stub}public Grade(int id, String name) {super();this.id = id;this.name = name;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

package com.pb.entity;
/*** 学生类* @author Administrator**/
public class Student {private String name;    //学生名称private Integer age;   //学生年龄private Grade grade;  //所属班级public Student() {super();}public Student(String name, Integer age, Grade grade) {super();this.name = name;this.age = age;this.grade = grade;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Grade getGrade() {return grade;}public void setGrade(Grade grade) {this.grade = grade;}
}

使用构造方法注入

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
<!--班级类  -->
<bean id="grade" class="com.pb.entity.Grade">
<!-- 使用构造方法注入 -->
<constructor-arg>
<value>1001</value>
</constructor-arg>
<constructor-arg>
<value>计算应用一班</value>
</constructor-arg></bean>
<!--学生类  -->
<bean id="student" class="com.pb.entity.Student">
<!-- 使用构造方法注入 -->
<constructor-arg>
<value>张三</value>
</constructor-arg>
<constructor-arg>
<value>23</value>
</constructor-arg>
<!-- 使用ref注入班级bean -->
<constructor-arg ref="grade">
</constructor-arg>
</bean>
</beans>

测试类:

package com.pb.demo;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.pb.entity.Student; public class Demo1 { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext( "applicationContext.xml"); Student stu = context.getBean("student", Student.class); System.out.println("学生姓名:" + stu.getName() + "学生年龄:" + stu.getAge() + "学生班级编号: " + stu.getGrade().getId() + "学生班级名称: " + stu.getGrade().getName()); } }

二、属性注入

其它不变只更改配置文件

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"> <!--班级类 --> <bean id="grade" class="com.pb.entity.Grade"> <property name="id"> <value>1001</value> </property> <property name="name" value="计算机应用一班"></property> </bean> <!-- 学生类 --> <bean id="student" class="com.pb.entity.Student"> <property name="name" value="张三" /> <property name="age" value="18"/> <property name="grade" ref="grade"/> </bean> </beans>

三、注入NULL和空字符串值

<value></value>表示空字符串

<null></null>表示为null值

<bean id="student" class="com.pb.entity.Student">
<!-- 姓名注入空字符串 <value></value>表示空字符串 -->
<property name="name"><value></value></property>
<!--年龄注入为NULL值  -->
<property name="age"><null></null></property>
<property name="grade" ref="grade"/>
</bean>

四、使用p 命名空间注入bean

官方推荐的注入方式

需要在XML上加入

xmlns:p="http://www.springframework.org/schema/p"

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"> <!--班级类 使用p命名空间注入 --> <bean id="grade" class="com.pb.entity.Grade" p:id="1001" p:name="外语一班"> </bean> <!-- 学生类 使用p命名空间注入 --> <bean id="student" class="com.pb.entity.Student" p:name="张三" p:age="23" p:grade-ref="grade"> </bean> </beans>

效果一目了然

五、自动装配

需要使用autowire属性来配置

可以在每个bean中使用autowire来配置

也可以在<beans>中使用autowire全局配置表示这个beans下的都使用自动装配,

缺点:不清晰,有问题比较难以查找

autowire:

no(默认值):不进行自动装配,必须显示指定依赖对象。

byName: 根据属性名自动装配。自动查找与属性名相同的id,如果找到,则自动注入,否则什么都不做。

byType:根据属性的类型自动装配,Spring自动查找与属性类型相同的Bean,如果刚好找到唯一的那个,则自动注入,如果找到多个与属性类型相同的Bean,则抛出异常,如果没有找到就什么都不做。

constructor:和byType类似,不过它针对构造方法,如果找到一个Bean和构造方法的参数类型相匹配,则通过构造注入该依赖对象,如果找不到,就抛出异常。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"> <!--班级类 使用p命名空间注入 --> <bean id="grade" class="com.pb.entity.Grade" p:id="1001" p:name="外语一班" > </bean> <!-- 学生类 使用p命名空间注入 --> <bean id="student" class="com.pb.entity.Student" p:name="张三" p:age="23" autowire="byName"> </bean> </beans>

自动装配使得配置文件可以非常简洁,但同时也造成组件之间的依赖关系不明确,容易引发一些潜在的错误,谨慎使用。

转载于:https://www.cnblogs.com/vincent-blog/p/4414738.html

Spring(四)Bean注入方试相关推荐

  1. Java注入bean的方式_多种方式实现Spring的Bean注入

    Spring的核心是控制反转(IoC)和面向切面(AOP). Spring就是一个大工厂(容器),可以将所有对象创建和依赖关系维护,交给Spring管理 . Spring工厂是用于生成Bean,对Be ...

  2. spring+cxf 开发webService(主要是记录遇到spring bean注入不进来的解决方法)

    这里不介绍原理,只是记录自己spring+cxf的开发过程和遇到的问题 场景:第三方公司需要调用我们的业务系统,以xml报文的形式传递数据,之后我们解析报文存储到我们数据库生成业务单据: WebSer ...

  3. spring学习笔记四(注入Bean属性)

      注入Bean属性 初始化bean的时候我们可能要对生成的Bean对象进行一些初始属性的设置,那么在spring中是如何设置的呢? 我们以下面图中实例来为Bean注入属性 一.通过构造方法来注入属性 ...

  4. Spring Bean、XML方式Bean配置、Bean实例化配置、Bean注入

    文章目录 Bean管理 一.SpringBoot Bean 初了解 1.1 了解 1.2 Bean的作用域 1.2.1 注意事项 1.3 第三方Bean 二. 基于XML方式Bean的配置 2.1 S ...

  5. Spring的依赖注入和管理Bean

    采用Spring管理Bean和依赖注入 1.实例化spring容器 和 从容器获取Bean对象 实例化Spring容器常用的两种方式: 方法一: 在类路径下寻找配置文件来实例化容器 [推荐使用] Ap ...

  6. Spring——Filter过滤器注入Bean时注入失败[NULL]

    问题描述 Spring中Filter注入Bean时注入失败,Bean一直为空. @Slf4j @Component public class RestAuthFilter extends FormAu ...

  7. Spring的Bean实例化、属性注入、对象注入、复杂注入(基于xml配置方式)

    一.Bean实例化的三种方式: (1)使用类的无参构造创建 (2)使用静态工厂创建 (3)使用实例工厂创建 代码实例: (1)项目结构: (2)在pom.xml中导入spring的核心jar包依赖: ...

  8. spring四种依赖注入方式

    平常的java开发中,程序员在某个类中需要依赖其它类的方法,通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理. spring提出了依赖注入的思想,即依赖不由程序 ...

  9. 将Spring Bean注入非托管对象

    依赖注入带来的好处可能会上瘾. 使用注入配置应用程序结构比手动完成所有解析要容易得多. 当我们有一些在容器外部实例化的非托管类时,例如在Vaadin UI组件或JPA实体等其他框架中,它们是很难被退出 ...

最新文章

  1. 零售业如何用Hadoop开启大数据之门?
  2. 将多个文件的属性添加到数据库
  3. php防止重复结算问题_PHP 编写关系到财务这样重要的系统,设计应该每次变动都算账,还是月底统一算账?...
  4. oracle io lost,磁盘IO故障
  5. 使用Dozer框架进行Bean操作
  6. javascript表单处理相关的知识总结(一)
  7. 使用idea创建项目的步骤
  8. Linux发展历史图
  9. MyBatis6:MyBatis集成Spring事物管理(下篇)
  10. 恶心的下载站点:52z.com
  11. 【HarmonyOS】【Json解析】ZSON 与 HiJson 使用
  12. 【算法01】—动态规划
  13. 创业成功第一步:写好商业计划书 第一章习题答案
  14. Collecting package metadata (current_repodata.json): failed
  15. 文档服务器拓扑图,服务器网络结构拓扑图
  16. win7网络适配器_win7网络重置
  17. Pyspark特征工程--RFormula
  18. Deep Graph Kernels
  19. Android专业获取设备信息如:AndroidID、唯一设备ID、制造商、型号、版本号、版本码等
  20. ajax 传递对象 返回状态500

热门文章

  1. Rotate List
  2. 【Kaggle-MNIST之路】自定义程序结构(七)
  3. 简析并查集[C/C++]
  4. Python剑指offer:和为s的连续整数序列
  5. Bear and Finding Criminals (模拟)
  6. android_home is not set mac,mac解决appium-doctor报ANDROID_HOME is NOT set
  7. linux mysql运维_Linux运维常用的 MySQL基础命令
  8. @resource 与 @autowired
  9. 让字体图标代替雪碧图,减少请求带宽
  10. gvim配置及相关插件安装(过程详细,附图)