02Spring基于xml的IOC配置--实例化Bean的三种方式
maven依赖
<dependencies>
<!--IOC相关依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.6.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"> </beans>
1、使用默认无参构造函数实例化bean
1.1 创建Student实体类
public class Student {
private String name;
private Integer age;
public void say() {
System.out.println("I'm a Student");
}
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;
}
}
1.2 在applicationContext.xml文件中装配Student对象
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 装配Studnt对象到IOC容器中 -->
<bean id="student" class="com.demo.domain.Student"/> </beans>
1.3 测试
private ApplicationContext ac;
@Before
public void init() {
//加载配置文件
ac = new ClassPathXmlApplicationContext("applicationContext.xml");
}
@Test
public void getStudentObjectFromSrpingIoc() {
//1. 根据bean的id去IOC容器中获取Student对象
Student student = (Student) ac.getBean("student");
//2. say
student.say();
}

2. 使用静态工厂方法实例化bean
2.1 创建Teacher实体类
public class Teacher {
public void say() {
System.out.println("I'm a teacher");
}
}
2.2 创建静态工厂类
public class StaticFactory {
/**
* 用于创建Teacher对象
* @return
*/
public static Teacher createTeacher() {
return new Teacher();
}
}
2.3 使用静态工厂方法装配Teacher对象
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 装配Studnt对象到IOC容器中 -->
<bean id="student" class="com.demo.domain.Student"/> <!-- 使用静态工厂方法将Teacher对象装配到IOC容器中 -->
<bean id="teacher" class="com.demo.factory.StaticFactory" factory-method="createTeacher"/> </beans>
2.4 测试
@Test
public void getTeaccherObjectFromSrpingIoc() {
//1. 根据bean的id去IOC容器中获取Teacher对象
Teacher teacher = (Teacher) ac.getBean("teacher");
//2. say
teacher.say();
}

3、使用实例工厂方法实例化bean
3.1 创建Cat实体类
public class Cat {
public void say() {
System.out.println("I'm a cat");
}
}
3.2 创建实例工厂类
public class InstanceFactory {
/**
* 用于创建cat对象
* @return
*/
public Cat createCat() {
return new Cat();
}
}
3.3 使用实例工厂创建Cat对象
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 装配Studnt对象到IOC容器中 -->
<bean id="student" class="com.demo.domain.Student"/> <!-- 使用静态工厂方法将Teacher对象装配到IOC容器中 -->
<bean id="teacher" class="com.demo.factory.StaticFactory" factory-method="createTeacher"/> <!-- 使用实例工厂方法实例化bean -->
<!-- 1. 装配实例工厂-->
<bean id="instanceFactory" class="com.demo.factory.InstanceFactory"/>
<!-- 2. 使用实例工厂创建cat对象-->
<bean id="cat" factory-bean="instanceFactory" factory-method="createCat"/> </beans>
3.4 测试
@Test
public void getCatObjectFromSrpingIoc() {
//1. 根据bean的id去IOC容器中获取Cat对象
Cat cat = (Cat) ac.getBean("cat");
//2. say
cat.say();
}

4、小结
4.1 默认无参构造实例化bean
Spring的IOC在使用bean标签中的class属性配置的类的全限定类名通过反射创建对象,反射时默认调用的是类无参构造方法来实例化该对象的。
4.2 静态工厂方法实例化bean
应用场景:静态工厂方法实例化bean的目的是为了将一个由静态方法获取的对象装配到IOC容器中。
在Spring的配置文件中配置bean标签,通过factory-method来引用获取静态方法返回的对象并装配到Spring的IOC容器中.
4.3 实例工厂方法实例化bean
应用场景:是为了将一个由非静态方法返回的对象装配到IOC容器中。
1、 通过将实例工厂作为一个bean装配到IOC容器中
2、 通过配置一个新的bean,使用factory-bean引用实例工厂这个bean,使用factory-method引用其中的非静态方法获取其返回的对象并将其装配到IOC容器中。
02Spring基于xml的IOC配置--实例化Bean的三种方式的更多相关文章
- Spring学习之实例化bean的三种方式
实例化bean的三种方式 构造器实例化bean Person.java public class Person { private String name; private Integer age; ...
- Spring 实例化bean的三种方式
第一种方法:直接配置Bean <bena id="所需要实例化的一个实例名称" class="包名.类名"/> 例如: 配置文件中的bean.XML ...
- Spring 实例化bean的三种方式:
方法一:使用构造器实例化bean java代码: package com.model; public class User { private String username; public User ...
- Spring实例化Bean的三种方式及Bean的类型
1.使用类构造器实例化 [默认的类构造器] <bean id=“orderService" class="cn.itcast.OrderServiceBean"/ ...
- spring实例化bean的三种方式
公共使用的实体
- 实例化bean的三种方式
简单的说 当获取bean时: 1.直接创建对象 2.不创建对象,直接调用factory-method指定的静态方法 3.先创建对象,再调用factory-method指点的非静态方法
- Spring 框架的概述以及Spring中基于XML的IOC配置
Spring 框架的概述以及Spring中基于XML的IOC配置 一.简介 Spring的两大核心:IOC(DI)与AOP,IOC是反转控制,DI依赖注入 特点:轻量级.依赖注入.面向切面编程.容器. ...
- 01Spring基于xml的IOC配置--入门
01Spring基于xml的IOC配置 1.创建一个普通的maven工程 1.1 选择maven,不用骨架,点击下一步. 1.2 填写GroupId.ArtifactId.Version.填完点击下一 ...
- spring创建bean的三种方式
spring创建bean的三种方式: 1通过构造方法创建bean(最常用) 1.1 spring默认会通过无参构造方法来创建bean,如果xml文件是这样配置,则实体类中必须要有无参构造方法,无参构造 ...
随机推荐
- @configuration和@component之间的区别
@configuration和@component之间的区别是:@Component注解的范围最广,所有类都可以注解,但是@Configuration注解一般注解在这样的类上:这个类里面有@Value ...
- TCP路径MTU发现
路径MTU 当在同一个网络上的两台主机互相通信时,该网络的MTU是非常重要的.当时如果两台主机之间的通信要通过多个网络,那么每个网络的链路层就可能有不同的MTU.重要的不是两台主机所在网络的MTU,而 ...
- FScapture录屏后导致麦克风无声问题
- 前端开发中的Error以及异常捕获
本文首发于公众号:符合预期的CoyPan 写在前面 在前端项目中,由于JavaScript本身是一个弱类型语言,加上浏览器环境的复杂性,网络问题等等,很容易发生错误.做好网页错误监控,不断优化代码,提 ...
- TensorFlow 学习(6)———TensorFlow运作方式
本部分主要涉及到TensorFlow的运作方式和主要操作 所需的代码在https://github.com/tensorflow/tensorflow/tree/master/tensorflow/e ...
- Steps 步骤条
引导用户按照流程完成任务的分步导航条,可根据实际应用场景设定步骤,步骤不得少于 2 步. 基础用法 简单的步骤条. 设置active属性,接受一个Number,表明步骤的 index,从 0 开始.需 ...
- Nova 实现的 Fit Instance NUMA to Host NUMA 算法
目录 文章目录 目录 前文列表 numa_fit_instance_to_host _numa_fit_instance_cell _numa_fit_instance_cell_with_pinni ...
- python 学习笔记(三)根据字典中值的大小对字典中的项排序
字典的元素是成键值对出现的,直接对字典使用sorted() 排序,它是根据字典的键的ASCII编码顺序进行排序,要想让字典根据值的大小来排序,可以有两种方法来实现: 一.利用zip函数将字典数据转化为 ...
- Spring学习之==>AOP
一.概述 AOP(Aspect Oriented Programming)称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等等,Struts2的拦截器设计就是基于A ...
- Rxjava2实战--第四章 Rxjava的线程操作
Rxjava2实战--第四章 Rxjava的线程操作 1 调度器(Scheduler)种类 1.1 RxJava线程介绍 默认情况下, 1.2 Scheduler Sheduler 作用 single ...