Spring(四)Bean注入方试
原文出自: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注入方试相关推荐
- Java注入bean的方式_多种方式实现Spring的Bean注入
Spring的核心是控制反转(IoC)和面向切面(AOP). Spring就是一个大工厂(容器),可以将所有对象创建和依赖关系维护,交给Spring管理 . Spring工厂是用于生成Bean,对Be ...
- spring+cxf 开发webService(主要是记录遇到spring bean注入不进来的解决方法)
这里不介绍原理,只是记录自己spring+cxf的开发过程和遇到的问题 场景:第三方公司需要调用我们的业务系统,以xml报文的形式传递数据,之后我们解析报文存储到我们数据库生成业务单据: WebSer ...
- spring学习笔记四(注入Bean属性)
注入Bean属性 初始化bean的时候我们可能要对生成的Bean对象进行一些初始属性的设置,那么在spring中是如何设置的呢? 我们以下面图中实例来为Bean注入属性 一.通过构造方法来注入属性 ...
- 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 ...
- Spring的依赖注入和管理Bean
采用Spring管理Bean和依赖注入 1.实例化spring容器 和 从容器获取Bean对象 实例化Spring容器常用的两种方式: 方法一: 在类路径下寻找配置文件来实例化容器 [推荐使用] Ap ...
- Spring——Filter过滤器注入Bean时注入失败[NULL]
问题描述 Spring中Filter注入Bean时注入失败,Bean一直为空. @Slf4j @Component public class RestAuthFilter extends FormAu ...
- Spring的Bean实例化、属性注入、对象注入、复杂注入(基于xml配置方式)
一.Bean实例化的三种方式: (1)使用类的无参构造创建 (2)使用静态工厂创建 (3)使用实例工厂创建 代码实例: (1)项目结构: (2)在pom.xml中导入spring的核心jar包依赖: ...
- spring四种依赖注入方式
平常的java开发中,程序员在某个类中需要依赖其它类的方法,通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理. spring提出了依赖注入的思想,即依赖不由程序 ...
- 将Spring Bean注入非托管对象
依赖注入带来的好处可能会上瘾. 使用注入配置应用程序结构比手动完成所有解析要容易得多. 当我们有一些在容器外部实例化的非托管类时,例如在Vaadin UI组件或JPA实体等其他框架中,它们是很难被退出 ...
最新文章
- 零售业如何用Hadoop开启大数据之门?
- 将多个文件的属性添加到数据库
- php防止重复结算问题_PHP 编写关系到财务这样重要的系统,设计应该每次变动都算账,还是月底统一算账?...
- oracle io lost,磁盘IO故障
- 使用Dozer框架进行Bean操作
- javascript表单处理相关的知识总结(一)
- 使用idea创建项目的步骤
- Linux发展历史图
- MyBatis6:MyBatis集成Spring事物管理(下篇)
- 恶心的下载站点:52z.com
- 【HarmonyOS】【Json解析】ZSON 与 HiJson 使用
- 【算法01】—动态规划
- 创业成功第一步:写好商业计划书 第一章习题答案
- Collecting package metadata (current_repodata.json): failed
- 文档服务器拓扑图,服务器网络结构拓扑图
- win7网络适配器_win7网络重置
- Pyspark特征工程--RFormula
- Deep Graph Kernels
- Android专业获取设备信息如:AndroidID、唯一设备ID、制造商、型号、版本号、版本码等
- ajax 传递对象 返回状态500
热门文章
- Rotate List
- 【Kaggle-MNIST之路】自定义程序结构(七)
- 简析并查集[C/C++]
- Python剑指offer:和为s的连续整数序列
- Bear and Finding Criminals (模拟)
- android_home is not set mac,mac解决appium-doctor报ANDROID_HOME is NOT set
- linux mysql运维_Linux运维常用的 MySQL基础命令
- @resource 与 @autowired
- 让字体图标代替雪碧图,减少请求带宽
- gvim配置及相关插件安装(过程详细,附图)