Spring4学习 IOC (控制反转)创建对象的三种方式

2022-08-28 14:38:25

一.使用IOC来创建对象的三种方式

1.通过无参的构造方法创建出来

public class User {
	public User() {
		System.out.println("user的无参构造方法");
	}
	private String name;
	public void setName(String name) {
		this.name = name;
	}
	public void show(){
		System.out.println("name="+name);
	}
}

2.通过有参的构造方法来创建对象
public class User {
	public User(String name) {
		super();
		this.name = name;
	}

	private String name;
	public void show(){
		System.out.println("name="+name);
	}
}

applicationContext.xml配置

3.通过·工厂方法来创建对象

a)静态工厂

public class UserFactory {
	public static User newInstance(String name){
		return new User(name);
	}
}

applicationContext.xml配置
    <bean id="user" factory-bean="cn.sxt.factory.UserFactory" factory-method="newInstance">
    	<constructor-arg index="0" value="王五"/>
    </bean>

b)动态工厂
public class UserDynamicFactory {
	public User newInstance(String name){
		return new User(name);
	}
}

applicationContext.xml配置
    <bean id="userFacotry" class="cn.sxt.factory.UserDynamicFactory"/>
    <bean id="user" factory-bean="userFacotry" factory-method="newInstance">
    	<constructor-arg index="0" value="王五"/>
    </bean>


二.IOC和DI

1.IOC

IOC(Inversion of Control):其思想是反转资源获取的方向. 传统的资源查找方式要求组件向容器发起请求查找资源. 作为回应, 容器适时的返回资源. 而应用了 IOC 之后, 则是容器主动地将资源推送给它所管理的组件, 组件所要做的仅是选择一种合适的方式来接受资源. 这种行为也被称为查找的被动形式


2.DI

    DI(Dependency Injection) — IOC 的另一种表述方式:即组件以一些预先定义好的方式(例如: setter 方法)接受来自如容器的资源注入. 相对于 IOC 而言,这种表述更直接

3.IOC前生

需求:生成HTML或PDF格式的不同类型的报表

下图表示当我们需要生成时,自动去调用对应的类的方法,生成对应报表


采用工厂设计模式



采用控制反转


三.配置文件详解

1.alias:为bean设置别名,可以设置多个别名

 <!-- 设置别名 -->
    <alias name="user" alias="user1"/>
2.bean的设置
   <!-- bean就是java对象  由spring来创建和管理 -->    
   
   <!-- id是bean的标识符 要唯一  如果没有配置id,name默认标识符 
   		如果配置id,又配置了name 那么name是别名
   		name可以设置多个别名 分隔符可以 是 空格 逗号 分号
   		class是bean的全限定名=包名+类名
   		如果不配置 id,和name 那么可以根据applicationContext.getBean(Class) 获取对象
   -->
   <bean id="h1" name="hello h2,h3;h4" class="cn.sxt.bean.Hello">
   	<property name="name" value="张三"/>
   </bean>

3.为方便团队协作开发,可以通过import来实现
<import resource="config/spring/entity.xml"/>

四.Spring容器

      在 Spring IOC 容器读取 Bean 配置创建 Bean 实例之前, 必须对它进行实例化. 只有在容器实例化后, 才可以从 IOC 容器里获取 Bean 实例并使用.

1.Spring 提供了两种类型的 IOC 容器实现.

      BeanFactory: IOC 容器的基本实现.
ApplicationContext: 提供了更多的高级特性. 是 BeanFactory 的子接口.
      BeanFactory 是 Spring 框架的基础设施,面向 Spring 本身;ApplicationContext 面向使用 Spring 框架的开发者,几乎所有的应用场合都直接使用 ApplicationContext 而非底层的 BeanFactory
      无论使用何种方式, 配置文件时相同的.


2.ApplicationContext

      ApplicationContext 的主要实现类:
ClassPathXmlApplicationContext:从 类路径下加载配置文件
             FileSystemXmlApplicationContext: 从文件系统中加载配置文件

      ConfigurableApplicationContext 扩展于 ApplicationContext,新增加两个主要方法:refresh() 和 close(), 让 ApplicationContext 具有启动、刷新和关闭上下文的能力
  ApplicationContext 在初始化上下文时就实例化所有单例的 Bean
      WebApplicationContext 是专门为 WEB 应用而准备的,它允许从相对于 WEB 根目录的路径中完成初始化工作



  • 作者:菜鸟小贤xwp
  • 原文链接:https://blog.csdn.net/aoaoxiaoxian/article/details/78190623
    更新时间:2022-08-28 14:38:25