ioc

spring总结--spring IOC

夙愿已清 提交于 2020-01-19 04:44:08
所谓 IOC ,就是由 Spring IOC 容器来负责对象的生命周期和对象之间的关系 IoC Inversion of Control,控制反转。是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(DependencyInjection,简称 DI),这也是 Spring 的实现方式。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。 IoC原理 IoC 内部核心原理就是反射技术,当然这里面还涉及到 Bean 对象的初始化构建等步骤,这个在后面的生命周期中讲,这里我们需要了解 Java 中反射是如何做的就好。这里主要说明下主要的相关类和可能面试问题转向,具体的 API 实现需要自己去看: 类 说明 InvocationHandler 通过这个接口定义横切的逻辑,然后通过反射机制调用目标类的方法,这样就能动态的把非业务逻辑和业务逻辑动态的拼接在一起 proxy 提供创建动态代理类实例的静态方法,通常利用InvocationHandler创建代理实例,来间接调用代理的方法 都在 java.lang.reflect 包下。说到这个模块的时候,那么面试官可能会考察相关的知识,主要是考察你是否真的有去了解过反射的使用。**举两个例子: **

阅读spirng官方文档

余生颓废 提交于 2020-01-18 19:14:41
1. IoC容器 1.1. 本章介绍了Spring的Inversion of Control(IoC)容器。 本章介绍了控制反转(IoC)原理的Spring框架实现。 IoC也称为依赖注入(DI)。在此过程中,对象仅通过 构造函数参数 , 工厂方法的参数 或在 构造或从工厂方法返回后在对象 实例上设置的属性来定义其依赖项(即,与它们一起使用的其他对象)。然后,容器在创建bean时注入那些依赖项。此过程从根本上讲是通过使用类的直接构造或诸如服务定位器模式之类的方法来控制其依赖项的实例化或位置的bean本身的逆过程(因此称为Control Inversion)。 org.springframework.beans和org.springframework.context包是Spring Framework的IoC容器的基础。 BeanFactory接口提供了一种能够管理任何类型对象的高级配置机制。 ApplicationContext是BeanFactory的一个子接口。 它增加了: 与Spring的AOP功能轻松集成 消息资源处理(用于国际化); 活动发布 应用层特定的上下文,例如Web应用程序中使用的WebApplicationContext。 简而言之,BeanFactory提供了配置框架和基本功能,而ApplicationContext添加了更多的企业特定功能。

spring ioc源码分析

♀尐吖头ヾ 提交于 2020-01-18 08:19:15
1.创建ApplicationContext 在上面spring boot启动中的分析中,发现在SpringApplication.run中创建了ApplicationContext 并且在context = this.createApplicationContext();中创建上下文 public ConfigurableApplicationContext run(String... args) { StopWatch stopWatch = new StopWatch(); stopWatch.start(); ConfigurableApplicationContext context = null; Collection<SpringBootExceptionReporter> exceptionReporters = new ArrayList(); this.configureHeadlessProperty(); SpringApplicationRunListeners listeners = this.getRunListeners(args); listeners.starting(); Collection exceptionReporters; try { ApplicationArguments applicationArguments = new

Spring:IoC和DI原理

佐手、 提交于 2020-01-18 06:51:06
一、IOC架构 Spring通过一个配置文件描述Bean及Bean之间的依赖关系,利用Java语言的反射功能实例化Bean并建立Bean之间的依赖关系。 Spring的IoC容器在完成这些底层工作的基础上,还提供了Bean实例缓存、生命周期管理、 Bean实例代理、事件发布、资源装载等高级服务。 Spring启动时读取应用程序提供的Bean配置信息,并在Spring容器中生成一份相应的Bean配置注册表,然后根据这张注册表实例化Bean,装配好Bean之间的依赖关系,为上层应用提供准备就绪的运行环境。 二、核心容器 1、BeanFactory BeanFactory是Spring框架的基础设施,面向Spring本身。Spring中Bean的创建是典型的工厂模式,BeanFactory及其子接口和子接口的实现类构成了一系列的Bean工厂,即IoC容器。 BeanFactory的继承关系: 子接口和实现类详解: 1.1 BeanFactory BeanFactory是所有接口的父接口,定义了IoC容器的基本功能规范。 主要方法: getBean:用于根据名称、类型等信息,从容器中返回Bean; getBeanProvider:根据类型获取Bean的ObjectProvider; isSingleton:判断Bean是否是单例; isPrototype:是否是原型;

简单模拟IOC容器:为添加了@Autowired的属性赋值(初始值)

帅比萌擦擦* 提交于 2020-01-17 23:53:01
创建@Autowired注解 package com.zzj.test; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; //设置范围和生存周期 @Target({ElementType.TYPE,ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface Autowired { } 创建UserInfo并且为添加了@Autowired的成员变量赋值 package com.zzj.test; import java.lang.reflect.Field; import java.util.Date; //UserInfo类含有两个成员变量 class UserInfo{ @Autowired private Date birth; @Autowired private String name; public Date getBirth() { return birth; } public void setBirth(Date

学习Spring IoC

荒凉一梦 提交于 2020-01-17 13:34:09
1:Spring IoC: Spring IoC是实现Object依赖关系之间松散耦合的机制。要在运行时实现对象的松散耦合和动态绑定,对象依赖项将由其他汇编器对象注入。Spring IoC容器是将依赖项注入对象并使其可供我们使用的程序。我们已经了解了如何使用Spring Dependency Injection在我们的应用程序中实现IoC。 Spring IoC容器类的一部分org.springframework.beans和org.springframework.context包。Spring IoC容器为我们提供了解耦对象依赖关系的不同方法。 BeanFactory是Spring IoC容器的根接口。ApplicationContext是接口的子接口BeanFactory,提供Spring AOP功能,i18n等。 一些有用的子接口ApplicationContext是ConfigurableApplicationContext和WebApplicationContext。Spring Framework提供了许多有用的ApplicationContext实现类,我们可以使用它们来获取spring上下文,然后是Spring Bean。 2:我们使用的一些有用的ApplicationContext实现是; AnnotationConfigApplicationContext

Spring IOC——依赖注入

為{幸葍}努か 提交于 2020-01-16 08:43:48
spring中的依赖注入 IOC作用:降低程序间的耦合(依赖关系) 依赖关系的管理:交给spring来维护(在当前类需要用到其他类的对象,由spring为我们提供,我们只需要在配置文件中说明) 依赖关系的维护:依赖注入 依赖注入: 能注入的数据: 基本类型和String 其他bean类型(在配置文件中或者注解配置过的bean) 复杂类型/集合类型 bean对象 注入的方式: 使用构造函数 使用set函数 使用注解 使用构造函数 构造函数往入: | 使用的标签:constructor- arg 标签出现的位置: bean标签的内部 标签中的属性 type:用于指定要注入的数据的数据类型,该数据类型也是构造函数中某个或某些参数的类型 index:用于指定要注入的数据给构造函数中指定索引位置的参数赋值。索引的位置是从e开始 name:用于指定给构造函数中指定名称的参数赋值常用的 ========= 以上三个用于指定给构造函数中哪个参效赋值 value: 用于提供基本类型和String类型的数据 ref:用于指定其他的bean类型数据。它指的就是在spring的Ioc核心容器中出现过的 < ? xml version = "1.0" encoding = "UTF-8" ? > < beans xmlns = "http://www.springframework.org/schema

Spring IOC 简单理解

℡╲_俬逩灬. 提交于 2020-01-15 16:50:58
为什么要 IOC? 开饭店的例子 如果我要开一家饭店,需要一个川菜厨师,男服务员,桌子。 public class Restraunt { private SichuanCook cook; private MaleWaiter waiter; private List<Table> tables } 但不久我们发现,川菜在当地并不受欢迎,我要改成粤菜餐厅。 于是我们把川菜厨师辞了,改请粤菜厨师。 public class Restraunt { private GuangdongCook cook; private MaleWaiter waiter; private List<Table> tables } ----但不就我们发现,粤菜也不能完全满足当地需求,我们需要一个能同时做粤菜和东北菜的全能厨师 AllRoundCook。 ----更不幸的是,我们的男服务员因为态度问题屡次被投诉,必须撤换重新招聘态度好的女服务员 FemaleWaiter。 这一切,都需要我们亲自去完成,从辞退到招聘。 中介机构 IOC 这时,我们就想到了中介机构。中介机构能为我做什么呢? ----按照我的指示,替我完成厨师和服务员的招聘,解雇。 我需要做什么呢? ----给中介机构一张单子,告诉它我需要什么样的厨师和服务员。 是不是顿时减轻了负担? 依赖反转 IOC: Inversion of

IOC创建对象的方法

倾然丶 夕夏残阳落幕 提交于 2020-01-14 12:35:05
IOC创建对象的方法 默认使用无参构造创建对象 如需要使用有参构造创建对象 <bean name="user" class="cn.pinked.pojo.User"> <!--无参构造 <property name="name" value="大头儿子"/>--> <!--有参下标赋值 <constructor-arg index="0" value="大头儿子"/>--> <!--有参类型赋值 <constructor-arg type="java.lang.String" value="大头儿子"/>--> <!--有参通过参数名赋值 <constructor-arg name="name" value="大头儿子"/>--> </bean> 总结:在配置文件加载的时候,容器中管理的对象就已经被初始化了 来源: https://www.cnblogs.com/pinked/p/12191340.html

Spring面试,IoC和AOP的理解

删除回忆录丶 提交于 2020-01-14 11:14:05
spring 的优点? 1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能 5.容器提供了众多的辅助类,能加快应用的开发 6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等 7.spring属于低侵入式设计,代码的污染极低 8.独立于各种应用服务器 9.spring的DI机制降低了业务对象替换的复杂性 10.Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选择spring的部分或全部 什么是DI机制? 依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念,具体的讲:当某个角色需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在spring中创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然后注入调用者 因此也称为依赖注入。 spring以动态灵活的方式来管理对象 , 注入的两种方式,设置注入和构造注入。 设置注入的优点:直观,自然 构造注入的优点:可以在构造器中决定依赖关系的顺序。 什么是AOP?