IOC概念
- IOC控制反转
是对象控制权的转移,从代码本身转移到外部容器,由spring容器来操作对象的创建、初始化、销毁工作。由spring控制对象的生命周期。
- DI依赖注入
依赖注入是指程序运行过程中,遇到需要调用另一个对象协助时,无需在代码中闯将被调用者,而是依赖外部容器创建后传递给程序(依赖注入是最优秀的解耦方式),他是让spring的bean之间以配置文件方式组织咋一起。
- 两者之间的关系
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>
- 创建一个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();
}
- 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();
}
相关推荐
Spring IOC,全称为Inversion of Control,中文常被称为“控制反转”,是Spring框架的核心特性之一。这个概念在软件设计中引入了一种新的依赖管理方式,它将对象的创建和管理权交给了容器,使得开发者可以更专注于...
Spring IoC通过XML配置文件实现了对象的实例化和依赖注入,有效地降低了对象间的耦合,提高了代码的可读性和可维护性。理解并熟练运用Spring的IoC机制是成为一名优秀的Java开发者的关键步骤之一。在实际项目中,结合...
下面,我们将深入探讨Spring-IOC的实现,包括注解的使用和注解解析。 1. **控制反转(IOC)概念** - 控制反转是设计模式中的一个概念,它改变了传统的对象获取方式。在没有IOC的情况下,对象通常自行创建依赖。而...
Spring框架是Java开发中不可或缺的一部分,它以IoC(Inversion of Control,控制反转)为核心,极大地简化了软件组件的管理。在这个名为“Spring---IOC实现”的项目中,我们将深入探讨Spring如何通过IoC实现对应用...
Spring框架是Java开发中不可或缺的一部分,尤其在企业级应用中,其Inversion of Control(IoC)容器是其核心特性之一。IoC,也被称为依赖注入(Dependency Injection,DI),是一种设计模式,它将对象的创建和管理权...
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 ...
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 ...
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 ...
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框架的三个核心模块:Spring MVC、Spring IOC(Inversion of Control,控制反转)以及Spring JDBC Template。...
在本文中,我们将深入探讨如何使用Spring的Inversion of Control(IoC)容器来实现一个具体的案例:控制打印机(Printer)类与不同类型的纸张(Paper)类的交互。Spring的IoC允许我们解耦组件,使代码更加灵活且易于...
在这个"Spring-IOC丐版"的源码中,我们可以看到一个简化的IOC容器的实现,可能包括以下几个部分: 1. **Bean定义**: 表示Bean的基本信息,包括类名、属性、依赖等。这些信息通常会从XML或注解中解析得到。 2. **...
依赖注入是Spring实现IoC的核心机制。它允许我们在不修改代码的情况下,动态地改变对象之间的依赖关系。在Spring中,我们可以通过XML配置、注解或者Java配置的方式来声明依赖。例如,我们可以在XML配置文件中定义...
总结来说,Spring 的 IoC 容器通过 XML、注解或 Java 配置类来管理 Bean 的生命周期和依赖关系,提供了一种松耦合、易于测试和扩展的开发方式。理解并熟练应用这些知识点对于任何 Spring 开发者都是至关重要的。通过...
Spring IoC容器通过XML配置或注解实现了对象的创建、管理和依赖注入,极大地简化了Java应用的复杂性。理解并熟练运用Spring IoC,能够帮助开发者构建更灵活、易于测试和维护的系统。在实际开发中,还可以结合@...
**Spring Ioc 实现原理详解** Spring Ioc(Inversion of Control,控制反转)是Spring框架的核心特性之一,它改变了传统应用程序中对象的创建和管理方式。在传统的软件设计中,对象的创建和依赖关系的维护通常由...
使用XML配置Spring IoC容器学生测验编写程序供学生测试。 在resources文件夹中创建包含5个问题和答案选项的csv文件。 该程序应询问用户名,在控制台中输出问题,并计算结果分数。 每个服务必须解决特定的任务。 必须...
本文将深入探讨Spring IOC,以及它如何通过容器来管理和配置应用对象,实现松耦合。 **一、什么是IOC?** 控制反转(IOC)是一种设计模式,它将对象的创建和组装过程从应用代码中分离出来,交给一个外部容器来处理...
例如,我们可以声明一个接口,然后通过配置文件指定其实现类,当需要使用时,Spring会自动将实现类的对象注入到使用它的类中。 在这个"spring-demo02-IOC-DI案例"中,你可能会看到以下组件: 1. 配置文件:可能是...
- Spring Boot简化了Spring的配置,通过自动配置机制,使得Spring IoC容器能够自动识别并配置bean。 7. **实战应用** - **配置数据库连接**:Spring IoC容器可以管理数据库连接池,如Druid、HikariCP,通过依赖...