`
wx1568908808
  • 浏览: 31403 次
文章分类
社区版块
存档分类
最新评论

Spring-IOC实现(xml配置一)

 
阅读更多

IOC概念

  1. IOC控制反转  是对象控制权的转移,从代码本身转移到外部容器,由spring容器来操作对象的创建、初始化、销毁工作。由spring控制对象的生命周期。
  2. DI依赖注入  依赖注入是指程序运行过程中,遇到需要调用另一个对象协助时,无需在代码中闯将被调用者,而是依赖外部容器创建后传递给程序(依赖注入是最优秀的解耦方式),他是让spring的bean之间以配置文件方式组织咋一起。
  3. 两者之间的关系  loc是概念,DI是他的实现方式

XML配置方式

一、普通构造注入

1. 创建spring工程 2. 创建 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>

3. 创建一个User类,写一个普通方法或者无参构造用来测试,并在配置文件中声明user (声明就是将自己的信息告诉Spring容器,通过反射就能创建一个对象在这里插入图片描述

<?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"> 
    <!-- 注册user -->
	<bean class="com.sxt.proj.User" id="user" />
</beans>

  1. 创建一个Jutil测试类,初始化容器 通过ID去查找获取user对象
/**
	 * 通过ID属性获取user对象
	 */
	@Test
	public void test() {
		//加载Spring
		ApplicationContext ap=new ClassPathXmlApplicationContext("applicationContext.xml");
		User user=(User)ap.getBean("user");
		user.run();
	}

测试结果

通过这种方式获取必须要有无参构造 否则会报错

通过name属性获取user对象

/**
	 * 通过name属性获取user对象
	 */
	@Test
	public void test2() {
		//加载Spring
		ApplicationContext ap=new ClassPathXmlApplicationContext("applicationContext.xml");
		User user=(User)ap.getBean("userName");
		user.run();
	}
  1. id和name属性的区别
/**
	 * 连续的name属性user1,user2,user3
	 */
	@Test
	public void test3() {
		//加载Spring
		ApplicationContext ap=new ClassPathXmlApplicationContext("applicationContext.xml");
		User user=(User)ap.getBean("user1");
		user.run();
	}

/**
	 * 连续的name属性user1,user2,user3
	 */
	@Test
	public void test3() {
		//加载Spring
		ApplicationContext ap=new ClassPathXmlApplicationContext("applicationContext.xml");
		User user=(User)ap.getBean("user2");
		user.run();
	}

两次测试结果通过连续ID获取

/**
	 * 连续的id属性userid1,userid2,userid3
	 */
	@Test
	public void test4() {
		//加载Spring
		ApplicationContext ap=new ClassPathXmlApplicationContext("applicationContext.xml");
		User user=(User)ap.getBean("userid1");
		user.run();
	}

测试结果会出现异常

/**
	 * 连续的id属性userid1,userid2,userid3
	 */
	@Test
	public void test4() {
		//加载Spring
		ApplicationContext ap=new ClassPathXmlApplicationContext("applicationContext.xml");
		User user=(User)ap.getBean("userid1,userid2,userid3");
		user.run();
	}

在这里插入图片描述 通过测试我们发现表示 bean有多个名字,多个名字分别是user1、user2以及user3 ,而id只有一个那就是userid1,userid2,userid3,而不能单独拆开算一个,这表示同一个配置文件id值只有一个 6. 通过类对象获取

/**
	 * 通过类对象获取
	 */
	@Test
	public void test5() {
		//加载Spring
		ApplicationContext ap=new ClassPathXmlApplicationContext("applicationContext.xml");
		User user=ap.getBean("user1",User.class);
		user.run();
	}

在这里插入图片描述 8. 仅仅通过类对象获取

/**
	 * 仅仅通过类对象获取
	 */
	@Test
	public void test5() {
		//加载Spring
		ApplicationContext ap=new ClassPathXmlApplicationContext("applicationContext.xml");
		User user=ap.getBean(User.class);
		user.run();
	}

在这里插入图片描述

二、静态工厂注入

创建静态工厂类

在这里插入代码片public class UserFactory {
	/**
	 * 必须是static方法
	 * @return
	 */
	public static User getInstance(){
		return new User();
	}
}

配置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"> 
   
	<!-- 注册静态工厂 -->
	<bean class="com.sxt.proj.UserFactory" factory-method="getInstance" id="user"/>

</beans>
@Test
	public void test() {
		//加载Spring
		ApplicationContext ap=new ClassPathXmlApplicationContext("applicationContext.xml");
		User user=(User)ap.getBean("user");
		user.run();
	}
	

测试结果

应用场景

在一些第三方框架使用过程 中,可能不得不使用静态工厂注入或者实例工厂注入。

三、动态工厂注入

动态工厂类

public class UserFactory {
	/**
	 * 
	 * @return
	 */
	public  User getInstance(){
		return new User();
	}
}
<!-- 注册动态工厂 -->
	<bean class="com.sxt.proj.UserFactory"  id="userFactory"/>
	<!-- 从工厂中获取UserBean对象 -->
	<bean id="user" factory-bean="userFactory" factory-method="getInstance"/>
@Test
	public void test() {
		//加载Spring
		ApplicationContext ap=new ClassPathXmlApplicationContext("applicationContext.xml");
		User user=(User)ap.getBean("user");
		user.run();
	}

在这里插入图片描述

转载于:https://my.oschina.net/u/4116634/blog/3037784

分享到:
评论

相关推荐

    Spring-ioc-jar

    Spring IOC,全称为Inversion of Control,中文常被称为“控制反转”,是Spring框架的核心特性之一。这个概念在软件设计中引入了一种新的依赖管理方式,它将对象的创建和管理权交给了容器,使得开发者可以更专注于...

    maven-spring-ioc

    Spring IoC通过XML配置文件实现了对象的实例化和依赖注入,有效地降低了对象间的耦合,提高了代码的可读性和可维护性。理解并熟练运用Spring的IoC机制是成为一名优秀的Java开发者的关键步骤之一。在实际项目中,结合...

    Spring-IOC实现

    下面,我们将深入探讨Spring-IOC的实现,包括注解的使用和注解解析。 1. **控制反转(IOC)概念** - 控制反转是设计模式中的一个概念,它改变了传统的对象获取方式。在没有IOC的情况下,对象通常自行创建依赖。而...

    Spring----IOC实现

    Spring框架是Java开发中不可或缺的一部分,它以IoC(Inversion of Control,控制反转)为核心,极大地简化了软件组件的管理。在这个名为“Spring---IOC实现”的项目中,我们将深入探讨Spring如何通过IoC实现对应用...

    Spring-IOC实例

    Spring框架是Java开发中不可或缺的一部分,尤其在企业级应用中,其Inversion of Control(IoC)容器是其核心特性之一。IoC,也被称为依赖注入(Dependency Injection,DI),是一种设计模式,它将对象的创建和管理权...

    2023版全新SSM框架实战精讲 视频教程 下载下载 因为太大存百度云盘3.zip

    020-spring-ioc0基于xml的ioc的配置.mp4 021-spring-ioc-基于xml的di配置.mp4 022-spring-ioc-基于xml的ioc容器的创建.mp4 023-spring-ioc-ioc容器的bean获取三种方式.mp4 024-spring-ioc-扩展组件周期方法.mp4 ...

    2023版全新SSM框架实战精讲 视频教程 下载下载 因为太大存百度云盘4.zip

    020-spring-ioc0基于xml的ioc的配置.mp4 021-spring-ioc-基于xml的di配置.mp4 022-spring-ioc-基于xml的ioc容器的创建.mp4 023-spring-ioc-ioc容器的bean获取三种方式.mp4 024-spring-ioc-扩展组件周期方法.mp4 ...

    2023版全新SSM框架实战精讲 视频教程 下载下载 因为太大存百度云盘2.zip

    020-spring-ioc0基于xml的ioc的配置.mp4 021-spring-ioc-基于xml的di配置.mp4 022-spring-ioc-基于xml的ioc容器的创建.mp4 023-spring-ioc-ioc容器的bean获取三种方式.mp4 024-spring-ioc-扩展组件周期方法.mp4 ...

    2023版全新SSM框架实战精讲 视频教程 下载下载 因为太大存百度云盘1.zip

    020-spring-ioc0基于xml的ioc的配置.mp4 021-spring-ioc-基于xml的di配置.mp4 022-spring-ioc-基于xml的ioc容器的创建.mp4 023-spring-ioc-ioc容器的bean获取三种方式.mp4 024-spring-ioc-扩展组件周期方法.mp4 ...

    Spring-MVC+Spring-IOC+Spring-JdbcTemple

    标题“Spring-MVC+Spring-IOC+Spring-JdbcTemple”揭示了这个项目或教程是关于如何集成并使用Spring框架的三个核心模块:Spring MVC、Spring IOC(Inversion of Control,控制反转)以及Spring JDBC Template。...

    Spring的IoC实现案例

    在本文中,我们将深入探讨如何使用Spring的Inversion of Control(IoC)容器来实现一个具体的案例:控制打印机(Printer)类与不同类型的纸张(Paper)类的交互。Spring的IoC允许我们解耦组件,使代码更加灵活且易于...

    Spring-IOC丐版

    在这个"Spring-IOC丐版"的源码中,我们可以看到一个简化的IOC容器的实现,可能包括以下几个部分: 1. **Bean定义**: 表示Bean的基本信息,包括类名、属性、依赖等。这些信息通常会从XML或注解中解析得到。 2. **...

    Spring--IOC

    依赖注入是Spring实现IoC的核心机制。它允许我们在不修改代码的情况下,动态地改变对象之间的依赖关系。在Spring中,我们可以通过XML配置、注解或者Java配置的方式来声明依赖。例如,我们可以在XML配置文件中定义...

    Spring-IoC 复习笔记.rar

    总结来说,Spring 的 IoC 容器通过 XML、注解或 Java 配置类来管理 Bean 的生命周期和依赖关系,提供了一种松耦合、易于测试和扩展的开发方式。理解并熟练应用这些知识点对于任何 Spring 开发者都是至关重要的。通过...

    Java-Spring-SpringIoC容器-SpringIoC的学习

    Spring IoC容器通过XML配置或注解实现了对象的创建、管理和依赖注入,极大地简化了Java应用的复杂性。理解并熟练运用Spring IoC,能够帮助开发者构建更灵活、易于测试和维护的系统。在实际开发中,还可以结合@...

    springIoc实现原理

    **Spring Ioc 实现原理详解** Spring Ioc(Inversion of Control,控制反转)是Spring框架的核心特性之一,它改变了传统应用程序中对象的创建和管理方式。在传统的软件设计中,对象的创建和依赖关系的维护通常由...

    otus-spring-hw-01-ioc-xml:Otus Spring框架开发人员

    使用XML配置Spring IoC容器学生测验编写程序供学生测试。 在resources文件夹中创建包含5个问题和答案选项的csv文件。 该程序应询问用户名,在控制台中输出问题,并计算结果分数。 每个服务必须解决特定的任务。 必须...

    spring-IOC代码

    本文将深入探讨Spring IOC,以及它如何通过容器来管理和配置应用对象,实现松耦合。 **一、什么是IOC?** 控制反转(IOC)是一种设计模式,它将对象的创建和组装过程从应用代码中分离出来,交给一个外部容器来处理...

    spring-demo02-IOC-DI案例.zip

    例如,我们可以声明一个接口,然后通过配置文件指定其实现类,当需要使用时,Spring会自动将实现类的对象注入到使用它的类中。 在这个"spring-demo02-IOC-DI案例"中,你可能会看到以下组件: 1. 配置文件:可能是...

    Spring-IoC.rar_容器

    - Spring Boot简化了Spring的配置,通过自动配置机制,使得Spring IoC容器能够自动识别并配置bean。 7. **实战应用** - **配置数据库连接**:Spring IoC容器可以管理数据库连接池,如Druid、HikariCP,通过依赖...

Global site tag (gtag.js) - Google Analytics