IOC控制反转

IOC

控制反转(IoC,Inversion of Control),是一个概念,是一种思想。指将传统上由程序代 码直接操控的对象调用权交给容器,通过容器来实现对象的装配和管理。控制反转就是对对 象控制权的转移,从程序代码本身反转到了外部容器。通过容器实现对象的创建,属性赋值, 依赖的管理。

IoC 是一个概念,是一种思想,其实现方式多种多样。当前比较流行的实现方式是依赖 注入。应用广泛。

依赖注入

依赖:classA 类中含有 classB 的实例,在 classA 中调用 classB 的方法完成功能,即 classA 对 classB 有依赖。

Ioc 的实现:

➢ 依赖注入:DI(Dependency Injection),程序代码不做定位查询,这些工作由容器自行 完成。

依赖注入 DI 是指程序运行过程中,若需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部容器,由外部容器创建后传递给程序

Spring 的依赖注入对调用者与被调用者几乎没有任何要求,完全支持对象之间依赖关 的管理。

Spring 容器是一个超级大工厂,负责创建、管理所有的 Java 对象,这些 Java 对象被称为 Bean。Spring 容器管理着容器中 Bean 之间的依赖关系,Spring 使用“依赖注入”的方式 来管理 Bean 之间的依赖关系。使用 IoC 实现对象之间的解耦和。

开发工具准备

开发工具:idea2017 以上 依赖管理:maven3 以上 jdk:1.8 以上

需要设置maven本机仓库

在这里插入图片描述

Spring的第一个程序

创建Maven项目 在这里插入图片描述
引入maven依赖pom.xml
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-context</artifactId>
	<version>5.2.5.RELEASE</version>
</dependency>
 
<build>
	<plugins>
 		<plugin>
 			<artifactId>maven-compiler-plugin</artifactId>
 			<version>3.1</version>
 			<configuration>
 				<source>1.8</source>
 				<target>1.8</target>
			 </configuration>
		 </plugin>
	</plugins>
</build>
定义接口与实体类
public interface SomeService {
	void doSome();
}
public class SomeServiceImpl implements SomeService {
	public SomeServiceImpl() {
		super();
		System.out.println("SomeServiceImpl无参数构造方法");
}
@Override
public void doSome() {
	System.out.println("====业务方法doSome()===");
	}
}
创建spring配置文件

在 src/main/resources/目录现创建一个 xml 文件,文件名可以随意,但 Spring 建议的名称为applicationContext.xml。

spring 配置中需要加入约束文件才能正常使用,约束文件是 xsd 扩展名。

在这里插入图片描述
在这里插入图片描述

:用于定义一个实例对象。一个实例对应一个 bean 元素

id:该属性是 Bean 实例的唯一标识,程序通过 id 属性访问 Bean,Bean 与 Bean 间的依 赖关系也是通过 id 属性关联的。

class:指定该 Bean 所属的类,注意这里只能是类,不能是接口。

定义测试类
   @Test
    public void test2(){

    //spring创建对象默认调用的是类的无参数构造方法
    //使用spring创建好的对象
    //指定spring配置文件的名称
        String config = "beans.xml";
    //创建表示spring容器的对象,ApplicationContext,表示spring容器,通过容器加载对象
        //ClassPathXmlApplicationContext:表示从类路径中加载spring的配置文件
        ApplicationContext ac = new ClassPathXmlApplicationContext(config);  //Spring创建对象时机:在创建spring容器时,创建spring配置文件中的所有对象

        //从容器中获取对象,需要调用对象的方法
        //getbean("配置文件中的bean的id值"),返回的是object类型,需要强转一下
        SomeService service = (SomeService) ac.getBean("someService");

        service.dosome();
    }

使用spring创建非自定义类对象

spring 配置文件加入 java.util.Date 定义:

<bean id="myDate" class="java.util.Date" />

MyTest 测试类中: 调用 getBean(“myDate”); 获取日期类对象。

容器接口和实现类

ApplicationContext接口(容器)

ApplicationContext 用于加载 Spring 的配置文件,在程序中充当“容器”的角色。其实现类有两个。

在这里插入图片描述

  • 配置文件在类路径下

    若 Spring 配置文件存放在项目的类路径下,则使用 ClassPathXmlApplicationContext 实现 类进行加载。

    @Test
    public void test02(){
        //spring配置文件在类路径下(classpath)
        String resource = "applicationContext.xml";
        ApplicationContext ac = ClassPathXmlApplicationContext(resource);
        SomeService service = (SomeService) ac.getbean("someService");
        service.dosome();
    }
    
  • ApplicationContext容器中对象的装配时机

    ApplicationContext 容器,会在容器对象初始化时,将其中的所有对象一次性全部装配好。 以后代码中若要使用到这些对象,只需从内存中直接获取即可。执行效率较高。但占用内存。

  • 使用spring容器创建的Java对象

在这里插入图片描述

  • 使用spring提供的方法获取对象信息

    //获取Spring容器中Java对象的信息
        @Test
        public void test3(){
            String config = "beans.xml";
            ApplicationContext ac = new ClassPathXmlApplicationContext(config); //这里的参数传入不能加双引号
            //使用spring提供的方法,获取容器中定义的对象的数量与名称
            int nums = ac.getBeanDefinitionCount();
            System.out.println("容器中定义的对象数量"+nums);
    
            String[] beanDefinitionNames = ac.getBeanDefinitionNames();
            for(String name:beanDefinitionNames){
                System.out.println(name);
            }
        }
    

想要了解更多内容,欢迎来访问我的博客呀!!!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值