Spring_Spring与IoC_基于XML的DI
一、注入分类
bean实例在调用无参构造器创建空值对象后,就要对Bean对象的属性进行初始化。初始化时由容器自动完成的,称为注入。根据注入方式的不同,常用的有2类:设值注入、构造注入。(还有一种,实现特定接口注入,采用侵入式编程,污染了代码,几乎不用)。
二、设值注入
public class Student {
private String name;
private int age;
private School school;
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setSchool(School school) {
this.school = school;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", school=" + school + "]";
}
}
Student
public class School {
private String name;
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "School [name=" + name + "]";
}
}
School
public class MyTest {
@Test
public void test01() {
//创建容器对象
String resource = "com/jmu/di01/applicationContext.xml";
ApplicationContext ac=new ClassPathXmlApplicationContext(resource);
Student student = (Student) ac.getBean("myStudent");
System.out.println(student);
}
}
MyTest
<bean id="mySchool" class="com.jmu.di01.School">
<property name="name" value="清华大学"></property>
</bean>
<bean id="myStudent" class="com.jmu.di01.Student">
<property name="name" value="张三"></property>
<property name="age" value="20"></property>
<property name="school" ref="mySchool"></property>
</bean>
applicationContext.xml
三、构造注入
public class Student {
private String name;
private int age;
private School school;
public Student() {
super();
}
public Student(String name, int age, School school) {
super();
this.name = name;
this.age = age;
this.school = school;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", school=" + school + "]";
}
}
Student
public class School {
private String name;
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "School [name=" + name + "]";
}
}
School
<bean id="mySchool" class="com.jmu.di02.School">
<property name="name" value="清华大学"></property>
</bean>
<bean id="myStudent" class="com.jmu.di02.Student">
<constructor-arg name="name" value="李四"/>
<constructor-arg name="age" value="24"/>
<constructor-arg name="school" ref="mySchool"/>
</bean>
applicationContext.xml
四、P命名空间设值注入

五、C命名空间构造注入

六、数组、集合属性注入
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set; public class Some {
private School[] schools;
private String[] myStrs;
private List<String> myList;
private Set<String> mySet;
private Map<String, Object> myMap;
private Properties myPros;//key、value均为字符串
public void setSchools(School[] schools) {
this.schools = schools;
}
public void setMyStrs(String[] myStrs) {
this.myStrs = myStrs;
}
public void setMyList(List<String> myList) {
this.myList = myList;
}
public void setMySet(Set<String> mySet) {
this.mySet = mySet;
}
public void setMyMap(Map<String, Object> myMap) {
this.myMap = myMap;
}
public void setMyPros(Properties myPros) {
this.myPros = myPros;
}
@Override
public String toString() {
return "Some [schools=" + Arrays.toString(schools) + ", myStrs=" + Arrays.toString(myStrs) + ", myList="
+ myList + ", mySet=" + mySet + ", myMap=" + myMap + ", myPros=" + myPros + "]";
} }
Some
public class School {
private String name;
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "School [name=" + name + "]";
}
}
School
<bean id="mySchool" class="com.jmu.di03.School">
<property name="name" value="清华大学"></property>
</bean>
<bean id="mySchool2" class="com.jmu.di03.School">
<property name="name" value="北京大学"></property>
</bean>
<bean id="mySome" class="com.jmu.di03.Some">
<property name="schools">
<array>
<ref bean="mySchool"/>
<ref bean="mySchool2"/> </array>
</property> <property name="myStrs">
<array>
<value>中国</value>
<value>福建</value>
</array>
</property> <property name="myList">
<list>
<value>厦门</value>
<value>泉州</value>
</list>
</property> <property name="mySet">
<set>
<value>唐朝</value>
<value>宋朝</value>
</set>
</property> <property name="myMap">
<map>
<entry key="mobile" value="2132124"></entry>
<entry key="QQ" value="12424532"></entry>
</map>
</property> <property name="myPros">
<props>
<prop key="education">大学</prop>
<prop key="gender">男</prop>
</props>
</property>
</bean>
applicationContext.xml
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class MyTest { @Test
public void test01() {
//创建容器对象
String resource = "com/jmu/di03/applicationContext.xml";
ApplicationContext ac=new ClassPathXmlApplicationContext(resource);
Some some=(Some) ac.getBean("mySome");
System.out.println(some);
} }
MyTest
输出:
Some [schools=[School [name=清华大学], School [name=北京大学]], myStrs=[中国, 福建], myList=[厦门, 泉州], mySet=[唐朝, 宋朝], myMap={mobile=2132124, QQ=12424532}, myPros={gender=男, education=大学}]
output
简写:
<property name="myStrs" value="中国,福建" />
<property name="myList" value="厦门,泉州" />
<property name="mySet" value="唐朝,宋朝" />
applicationContext.xml
七、对于域属性的自动注入
1、autowire="byName"会从容器中查找与实体类的域属性同名的Bean的id,并将该Bean对象自动注入给该域属性

2、autowire="byType"会从容器中查找与实体类的域属性类型具有is-a关系的Bean,并将该Bean对象自动注入给该域属性
<!-- <bean id="mySchool" class="com.jmu.di06.School">
<property name="name" value="集美大学"></property>
</bean> -->
<bean id="myPrimarySchool" class="com.jmu.di06.PrimarySchool">
<property name="address" value="集美区"></property>
</bean>
<bean id="myStudent" class="com.jmu.di06.Student" autowire="byType">
<property name="name" value="张三"></property>
<property name="age" value="20"></property>
</bean>
applicationContext.xml
public class PrimarySchool extends School {
private String address;
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "PrimarySchool [address=" + address + "]";
}
}
PrimarySchool
输出:
Student [name=张三, age=20, school=PrimarySchool [address=集美区]]
output
八、使用SPEL注入
SPEL,Spring Expression Language,即Spring EL表达式语言。在Spring配置文件中为Bean的属性注入时,可直接使用SPEL表达式计算的结果。
<bean id="myPerson" class="com.jmu.di07.Person">
<property name="pname" value="宫本武藏"></property>
<property name="page" value="#{T(java.lang.Math).random()*50}"></property>
</bean>
<bean id="myStudent" class="com.jmu.di07.Student" autowire="byType">
<property name="name" value="#{myPerson.pname}"></property>
<property name="age" value="#{myPerson.page>25?25:myPerson.page}"></property>
</bean>
applicationContext.xml
Person person=(Person) ac.getBean("myPerson");
System.out.println(person);
Student student = (Student) ac.getBean("myStudent");
System.out.println(student);
MyTest
输出:
Person [pname=宫本武藏, page=15]
Student [name=宫本武藏, age=15]
output

九、内部Bean

十、同类抽象Bean

十一、异步抽象Bean

十二、为应用指定多个Spring配置文件
1、平等关系
方式一:




方式二:

二、包含关系

Spring_Spring与IoC_基于XML的DI的更多相关文章
- Spring_Spring与IoC_基于注解的DI
一.基本注解的使用 (1)导入AOP的Jar包 (2) 与set()无关 二.组件扫描器的base-package 三.@Component相关注解 四.@Scope 五.域属性的注入 (1)byTy ...
- Spring框架第三篇之基于XML的DI注入
一.注入分类 Bean实例在调用无参构造器创建空值对象后,就要对Bean对象的属性进行初始化.初始化是由容器自动完成的,称为注入.根据注入方式的不同,常用的有两类:设值注入.构造注入.实现特定接口注入 ...
- 基于XML的DI
三.集合属性注入(包含:为数组注入值.为List注入值.为Set注入值.为Map注入值.为Properties注入值) 集合类定义如下: xml定义如下:仔细看 下面是执行代码: 四.对于 ...
- Spring_Spring与AOP_AspectJ基于XML的实现
一.前置通知 import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.as ...
- Spring4笔记4--基于XML的DI(依赖注入)
基于XML的DI(依赖注入): Bean 实例在调用无参构造器创建了空值对象后,就要对 Bean 对象的属性进行初始化.初始化是由容器自动完成的,称为注入.根据注入方式的不同,常用的有两类:设值注入. ...
- spring3——IOC之基于XML的依赖注入(DI )
我们知道spring容器的作用是负责对象的创建和对象间关系的维护,在上一篇博客中我们讲到spring容器会先调用对象的无参构造方法创建一个空值对象,那么接下来容器就会对对象的属性进行初始化,这个初始化 ...
- SSM-Spring-07:Spring基于注解的di注入
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 注解: 说起注解,哇哦,每个人都或多或少的用到过 像什么@Overried,@Test,@Param等等之前就 ...
- Spring 框架的概述以及Spring中基于XML的IOC配置
Spring 框架的概述以及Spring中基于XML的IOC配置 一.简介 Spring的两大核心:IOC(DI)与AOP,IOC是反转控制,DI依赖注入 特点:轻量级.依赖注入.面向切面编程.容器. ...
- Spring-注入方式(基于xml方式)
1.基于xml方式创建对象 <!--配置User类对象的创建 --> <bean id="user" class="com.at.spring5.Use ...
随机推荐
- 【后缀数组之height数组】
模板奉上 int rank[maxn],height[maxn]; void calheight(int *r,int *sa,int n) { ; ;i<=n;i++) rank[sa[i]] ...
- POJ-2387-Til the Cows Come Home(最短路)
Til the Cows Come Home Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 72844 Accepted ...
- DEM反应添加顺序注意问题
在含有DEM反应的dat中,均相反应的block要在DEM反应之前,例如: @(RXNS) (some reaction equations) @(END) @(DES_RXNS) (some rea ...
- L1-1 天梯赛座位分配
天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情.为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i 所学校有 M[i] 支队伍,每队 10 位 ...
- Codeforces - 914C 数位DP
题意有点难以描述,简略的就是给定一个二进制\(n\),每一步操作能使\(n\)的位为1的数的和转化为一个十进制,然后转化为该数的二进制再进行相同的操作 查询\([0,n]\)中操作数恰好为\(k\)的 ...
- nginx(四)-负载均衡
负载均衡,我认为是nginx最重要的功能了.那什么是负载均衡呢. 比如有一个服务,它访问量很大,一台机器吃不消了,怎么办,我们准备两台.分一部分的请求出来.现在有两台服务器提供这个服务.我们访问其中一 ...
- 浏览器在初始化JS 环境时都发生了些什么
原文:https://segmentfault.com/a/1190000005754797 1.用 C/C++ 构造内部数据结构创建一个 OP 即(Object.prototype)以及初始化其内部 ...
- vue过渡效果
vue过渡效果. <transition name='slide-fade'> <div class="top" @click='gotoTop' v-if='s ...
- Orcale 之 SQL 数据定义
SQL 的数据定义功能主要是针对数据对象进行定义的,这些数据对象主要包括:表,视图以及索引. 注意:由于视图是基于表的虚表,而索引是依附在基表上的,所以视图和索引均不提供修改视图和索引定义的操作.如果 ...
- Unity热更方案汇总
http://www.manew.com/thread-114496-1-1.html 谈到目前的代码热更方案:没什么特别的要求 <ignore_js_op> toLua(效 ...