SpringIOC使用扩展

时间:2023-02-23 18:37:00

在上篇博客中,我们使用Spring通过setter访问器实现了对属性的赋值,这种做法被称为设值注入。除此之外Spring还提供了通过构造方法赋值的能力,成为构造注入。下面我们通过一个小demo来了解如何通过构造方法来注入值(因一个类中可能包含其他自定义类型的对象,所以我们采用Student类中包含Car类的实例来演示如何通过构造来给Student类属性注入值)

Student类:

public class Student {
private String name;//学生姓名
private Integer age; //学生年龄
private Car car;//学生的汽车
@Override
//重写toString()方法方便进行测试
public String toString() {
return "Student [name=" + name + ", age=" + age + ", car=" + car + "]";
}
//构造函数
public Student(String name, Integer age, Car car) {
System.out.println("我是带参构造");
this.name = name;
this.age = age;
this.car = car;
} public Student() {
System.out.println("我是无参构造");
}
//属性访问器
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 Car getCar() {
return car;
}
public void setCar(Car car) {
this.car = car;
} }

Car类:

public class Car {
//汽车颜色
private String color;
//属性访问器
public String getColor() {
return color;
} public void setColor(String color) {
this.color = color;
}
//重写toString()方法方便测试
@Override
public String toString() {
return "Car [color=" + color + "]";
} }

applicationContext.xml配置:

<bean id="car" class="cn.wz.entity.Car">
<property name="color" value="白色"/>
</bean> <bean id="stu" class="cn.wz.entity.Student">
<!--通过constructor-arg元素向构造方法传入参数-->
<constructor-arg index="0" value="王哲"/>
<constructor-arg index="1" value="18"/>
<constructor-arg index="2" ref="car"/>
</bean>

测试代码:

public class Test {
public static void main(String[] args) { hasArgumentConstructor();
}
public static void hasArgumentConstructor(){
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
Student student = context.getBean("stu",Student.class);
System.out.println(student); }
}

最终运行结果:

SpringIOC使用扩展

使用p命名空间实现属性注入

Spring配置文件采用schema形式,使用不同的名命空间管理不同类型的配置,是的配置文件更具扩展性。而p命名空间的配置则不再使用property子元素来为对象的属性注入值,而是以Bean元素属性的方式来注入值如我们将上面demo的配置代码更改如下:

<bean id="car" class="cn.wz.entity.Car">
<property name="color" value="白色"/>
</bean>
<bean id="stu" class="cn.wz.entity.Student" p:name="王哲" p:age="18" p:car-ref="car" />

其测试用例运行效果是一样的,但需要注意的是在使用这种方式给属性注入值时一定要先导入P命名空间如图所示:SpringIOC使用扩展

从上图中我们可以发现我们再xml配置文件的头文件中不但配置了P命名空间还有c命名空间,c命名空间是在使用构造注入值时使用其用法和P命名空间一样,这里不再进行演示了。

为集合属性注入值

对于存在属性类型为集合的对象Spring提供了list、set、map等元素对其进行配置。具体配置如下:

<!-- List集合 -->
<bean id="list" class="cn.wz.entity.Student">
<property name="list">
<list>
<value>王哲</value>
<value>张一铭</value>
</list>
</property>
</bean>
<!-- Set集合 -->
<bean id="set" class="cn.wz.entity.Student">
<property name="set">
<set>
<value>王哲</value>
<value>张一铭</value>
</set>
</property>
</bean>
<!-- map集合 -->
<bean id="map" class="cn.wz.entity.Student">
<property name="map">
<map>
<entry key="wz"><value>王哲</value></entry>
<entry key="zym"> <value>张一铭</value></entry>
</map>
</property>
</bean>
<!-- 数组 -->
<bean id="array" class="cn.wz.entity.Student">
<property name="array">
<list>
<value>王哲</value>
<value>张一铭</value>
</list>
</property>
</bean>

SpringIOC使用扩展的更多相关文章

  1. 【sping揭秘】10、SpringIOC容器扩展

    关于component-scan操作(去除,失效) 这个spring中的配置项,可以扫描我们对应的包下面的类,自动把带上@component,@service,@controller, @reposi ...

  2. Log4j扩展使用--自定义输出

    写在前面的话 log4j支持自定义的输出.所有的输出都实现了自Appender接口.一般来说,自定义输出值需要继承AppenderSkeleton类,并实现几个方法就可以了. 写这篇博客,我主要也是想 ...

  3. java~spring-ioc的使用

    spring-ioc的使用 IOC容器在很多框架里都在使用,而在spring里它被应用的最大广泛,在框架层面 上,很多功能都使用了ioc技术,下面我们看一下ioc的使用方法. 把服务注册到ioc容器 ...

  4. 数据交换格式与SpringIOC底层实现

    1.数据交换格式 1.1 有哪些数据交换格式 客户端与服务器常用数据交换格式xml.json.html 1.2 数据交换格式应用场景 1.2.1 移动端(安卓.iOS)通讯方式采用http协议+JSO ...

  5. 【转】Spring学习---SpringIOC容器的初始化过程

    [原文]https://www.toutiao.com/i6594400249429623304/ SpringIOC容器的初始化过程 简单来说,IoC容器的初始化是由refresh()方法来启动的, ...

  6. Spring-IOC源码解读1-整体设计

    1. SpringIOC提供了一个基本的javabean容器,通过IOC模式管理依赖关系,并通过依赖注入和AOP增强了为javabean这样的pojo对象赋予事务管理,生命周期管理等基本功能.2. S ...

  7. SpringIOC 二—— 容器 和 Bean的深入理解

    上文:Spring IOC 一--容器装配Bean的简单使用 上篇文章介绍了 Spring IOC 中最重要的两个概念--容器和Bean,以及如何使用 Spring 容器装配Bean.本文接着记录 S ...

  8. SpringIoC和SpringMVC的快速入门

    更多内容,欢迎关注微信公众号:全菜工程师小辉~ Spring的优势? 降低了组件之间的耦合性 ,实现了软件各层之间的解耦 可以使用容易提供的众多服务,如事务管理,消息服务等 容器提供单例模式支持 容器 ...

  9. springIOC及设计模式

    一.IOC的概念: 控制反转(inversion of control)和依赖注入(dependency injection)其实是同一个概念.当某个方法需要另外一个对象协助的时候,传统的方法就是有调 ...

随机推荐

  1. Javascript高级程序设计——面向对象之实现继承

    原型链: 构造函数中都有一个prototype属性指针,这个指针指向原型对象,而创建的实例也有指向这个原型对象的指针__proto__.当实例查找方法时先在实例上找,找不到再通过__proto__到原 ...

  2. Moogoose操作之Schema实现增删查改

    Schema不仅定义了文档结构和使用性能,可以为后面的Model和Entity提供公共的属性和方法. Schema.Model.Entity的关系: Schema : 可以定义字段类型,不具备数据库的 ...

  3. django中添加用户

    在django中添加用户,直接在auth_user表中添加会有问题,因为这里密码是加密的,可以通过manage.py shell加入 创建User: 1 >>> from djang ...

  4. ionic&plus;cordova&plus;angularJs

    ionic+cordova+angularJs 这里详细介绍下如何用ionic+cordova+angularjs搭建自己的移动端app,包括环境搭建,框架使用等,具体项目已放置在github上,可下 ...

  5. 丢掉 WinPE,使用 DISKPART 来分区吧

    自 Windows Vista 之后的操作系统,如果在安装系统的时候使用 Windows 自带的分区功能,则会多出一个 100M 的系统保留分区.这会让一个物理硬盘,原先最多可以分 4 个主分区的,现 ...

  6. 如何打造一款五星级的 APP ?

    移动互联网大潮来袭!据统计,2015 年平均每天有 1000 个新的应用上架,而这些应用的现状可以说是鱼龙混杂,同是每个人的眼光.品味.意识和利益都不同,因此每人眼中的应用也是不同的.在巨大的市场竞争 ...

  7. IOS开发之----协议与委托(Protocol and Delegate&rpar; 实例解析

    1 协议: 协议,类似于Java或C#语言中的接口,它限制了实现类必须拥有哪些方法. 它是对对象行为的定义,也是对功能的规范. 在写示例之前我给大家说下@required和@optional这两个关键 ...

  8. css中滚动条样式的设置

    参数说明: 1.overflow-y : 设置当对象的内容超过其指定高度时如何管理内容:overflow-x : 设置当对象的内容超过其指定宽度时如何管理内容. 参数: visible:扩大面积以显示 ...

  9. Caused by&colon; com&period;mysql&period;jdbc&period;exceptions&period;jdbc4&period;MySQLSyntaxErrorException&colon; Table 'zhongfucheng&period;user' does

    编写第一个Hibernate程序的时候,就发现出现了错误 Exception in thread "main" org.hibernate.exception.SQLGrammar ...

  10. iOS Runtime的消息转发机制

    前面我们已经讲解Runtime的基本概念和基本使用,如果大家对Runtime机制不是很了解,可以先看一下以前的博客,会对理解这篇博客有所帮助!!! Runtime基本概念:https://www.cn ...