Spring(四)Bean注入方试
一、构造方法注入
定义:通过构造函数来完成依赖关系的设定
优缺点:
在构造对象的同时,完成依赖关系的建立
如果关联的对象很多,那和不得不在构造方法上加入过多的参数
基中有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>
自动装配使得配置文件可以非常简洁,但同时也造成组件之间的依赖关系不明确,容易引发一些潜在的错误,谨慎使用
Spring(四)Bean注入方试的更多相关文章
- spring的bean注入扫瞄方法和mybatis的dao bean注入扫描方法
spring的bean注入扫面方法:@ComponentScan(basePackages = "com.pingan.property.icore.pap.*")mybatis的 ...
- 在Spring的Bean注入中,即使你私有化构造函数,默认他还是会去调用你的私有构造函数去实例化
在Spring的Bean注入中,即使你私有化构造函数,默认他还是会去调用你的私有构造函数去实例化. 如果我们想保证实例的单一性,就要在定义<bean>时加上factory-method=” ...
- spring框架bean注入
今天学习了spring框架,刚刚入门简单的了解了spring并学习了bean的注入IOC:IOC(Inversion of Control,控制反转)不是什么技术,而是一种设计思想.它的目的是指导我们 ...
- 学习 Spring (四) Bean 的生命周期
Spring入门篇 学习笔记 定义 --> 初始化 --> 使用 --> 销毁 初始化 实现 org.springframework.beans.factory.Initializi ...
- spring+cxf 开发webService(主要是记录遇到spring bean注入不进来的解决方法)
这里不介绍原理,只是记录自己spring+cxf的开发过程和遇到的问题 场景:第三方公司需要调用我们的业务系统,以xml报文的形式传递数据,之后我们解析报文存储到我们数据库生成业务单据: WebSer ...
- Spring中bean的四种注入方式
一.前言 最近在复习Spring的相关内容,这篇博客就来记录一下Spring为bean的属性注入值的四种方式.这篇博客主要讲解在xml文件中,如何为bean的属性注入值,最后也会简单提一下使用注解 ...
- spring的依赖注入的四种方式,数组与集合注入;引用注入;内部bean注入
三种注入方式 第一种: 基于构造函数 hi.java (bean) package test_one; public class hi { private String name; public hi ...
- Spring之Bean的注入
Bean的配置中介绍的是Bean声明问题,在哪声明怎么声明的问题.Bean的注入是怎么实例化,怎么注入的问题.Bean注入的方式有两种,一种是在XML中配置,另一种则是使用注解的方式注入. 一.XML ...
- spring中bean配置和bean注入
1 bean与spring容器的关系 Bean配置信息定义了Bean的实现及依赖关系,Spring容器根据各种形式的Bean配置信息在容器内部建立Bean定义注册表,然后根据注册表加载.实例化Bean ...
随机推荐
- Js调用Java方法并互相传参
Js通过PhoneGap调用Java方法并互相传参的. 一.JAVA代码 写一个类,该类继承自Plugin并重写execute方法. import org.json.JSONArray; import ...
- 解决debian中脚本无法使用source的问题
#!/bin/sh source scripts/common.sh 现象: shell脚本中source aaa.sh时提示 source: not found 原因: ls -l `which s ...
- iOS- 微信支付 (服务器调起支付 )以及回调不成功的原因 不看后悔
写的不错,给留个言哈... 一. 支付准备工作 1. 微信相关准备工作 (1) 向微信官方开通支付功能. 这个不是前端的工作. (2) 导入官方下载的微信支付SDK包. 我用的是微信开放平台下载的SD ...
- iOS-沙盒路径总结、文件管理NSFileManager总结
// // ViewController.m // 沙盒操作 // // Created by mncong on 15/11/26. // Copyright © 2015年 mancong ...
- 自增长的聚集键值不会扩展(scale)
如何选择聚集键值的最佳实践是什么?一个好的聚集键值应该有下列属性: 范围小的(Narrow) 静态的(Static) 自增长的(Ever Increasing) 我们来具体看下所有这3个属性,还有在S ...
- [转]AutoResetEvent 与 ManualResetEvent区别
在C#多线程编程中,这两个类几乎是不可或缺的,他们的用法/声明都很类似,那么区别在哪里了? Set方法将信号置为发送状态 Reset方法将信号置为不发送状态 WaitOne等待信号的发送 其实,从名字 ...
- Week4 结对编程
1.照片 1.1 结对编程参与者:李文涛.黎柏文 1.2 展示照片 2.结对编程的优点&缺点 2.1 优点 2.1.1.两人分工合作,减少了工作量 2.1.2.结对编程的伙伴往往能提供不同 ...
- 数论 - 算数基本定理的运用 --- nefu 118 : n!后面有多少个0
题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemshow.php Mean: 略. analyse: 刚开始想了半天都没想出来,数据这么大,难道是有什么 ...
- linq之join子句
前面我们总结Linq查询子句总共有8个,join子句是我们讲解的最后一个子句.join子句也是相对比较复杂的,所以最后来讲.join子句可以处理两个数据源之间的联系,当然这两个数据源之间必须存在相关联 ...
- 用C#编程的建议
1.如果可能尽量使用接口来编程 .NET框架包括类和接口,在编写程序的时候,你可能知道正在用.NET的哪个类.然而,在这种情况下如果你用.NET支持的接口而不是它的类来编程时,代码会变得更 ...