ioc

5. Spring - IOC - 组件的生命周期

两盒软妹~` 提交于 2020-01-28 10:41:34
系列篇幅 1. Spring - IOC - 注册组件 2. spring - IOC - 依赖注入 3. Spring - IOC - 组件扫描规则 4. Spring - IOC - 组件的作用域、懒加载、条件判断 5. Spring - IOC - 组件的生命周期 6. Spring - AOP - 基本使用 前言 整理一下Spring使用过程中的一些笔记 提示: JSR是由JDK提供的一组规范 介绍 指定初始化和消费方法 通过让Bean实现接口 InitializingBean(定义初始化逻辑) DisposableBean(定义销毁逻辑) 使用JSR250注解 @PostConstruct(在Bean创建完成,且属于赋值完成后进行初始化,属于JDK规范的注解) @PreDestroy( 在bean将被移除之前进行通知, 在容器销毁之前进行清理工作 ) BeanPostProcessor相关接口,Bean的后置处理器 postProcessBeforeInitialization(在初始化之前工作) postProcessAfterInitialization(在初始化之后工作) 注意事项 只有 单例 情况下,才会调用destory方法 在 prototype(原型) 模式下,只有获取bean的时候才初始化,而且 不会 调用destroy 1. 指定初始化和消费方法

初探Spring框架之———IOC

旧城冷巷雨未停 提交于 2020-01-28 04:37:46
一、 首先解释一下什么是Spring框架,以及Spring框架的作用 1、Spring框架:Spring是一个full-stack(一站式)的轻量级 开源 框架,以 IOC (Inverse Of Control: 控制反转)和 AOP (Aspect Oriented Programming:面向切面编程)为内核。简单来说, Spring是一个分层的JavaSE/EE full-stack 轻量级开源框架。 2、作用:解决企业应用开发的复杂性 二、什么是IOC? 1、IOC(Inversion of Control) :就是控制反转。 控制反转指的就是将对象的创建权交给了Spring来管理,其作用是实现了程序的解耦合(解耦)或者理解为降低了程序间的依赖关系,从而提高程序间的独立性,满足开闭原则,提高了可复用性和可修改性。 可以解释为:原始的创建对象的方法都是使用new一个对象,这样就使得程序间的依赖关系很强,不方便修改和复用,所以我们常常采用 工厂方法模式+反射+配置文件 来改进,而 IOC的底层原理就是使用工厂方法设计模式+反射+XML配置文件或注解来创建对象 ,只不过原始的创建对象的任务是交给程序员来编写,而现在使用Spring框架后,创建对象的任务就交给了Spring来管理。 2、关于IOC的一些细节 BeanFactory是Spring的IOC核心容器中的顶层接口

在spring中简单使用Mockito解决Bean依赖树问题

与世无争的帅哥 提交于 2020-01-28 00:48:37
前提 本文 不是针对Mockito的入门教学 ,主要叙述如何简单的使用Mockito解决Bean依赖树问题,对于Mockito的学习请找其他的文章或者查阅官方文档 基本概念 Junit初始化及存在的问题 spring应用在unit test时,test是 独立运行 的,所以需要自行 init ApplicationContext,启动 Ioc容器。 Junit要求: Test类中涉及的所有Spring bean 注入成功才能完成applicationContext初始化,并启动IOC容器,否则无法执行unit test。 ApplicationContext初始化的两种方式 手动注入(使用 @Bean或者 @Component 注入所需的类) 编写@Configuration 类(使用@ComponentScan 指定扫描beans) 两种初始化方式存在的问题 方式一: 所需的beans中,一个bean少注入了就会导致无法初始化上下文 需要注入的bean太多时,需要花费大量的时间和精力,排查缺漏难度大 方式二: 颗粒度难以把控,随着项目规模变大之后,可能导致bean导入过多,单元测试跑很久才能通过 当项目规模大了之后,bean之间的依赖往往是复杂的,扫描bean的方式可能出现一些不属于自己模块的未知问题或者某些中间件在unitTest环境无法正常启动,导致无法初始化上下文

依赖注入(IOC)二

我们两清 提交于 2020-01-27 20:41:59
上一章我们讲了构造注入与设值注入,这一篇我们主要讲接口注入与特性注入。 接口注入 接口注入是将抽象类型的入口以方法定义在一个接口中,如果客户类型需要获得这个方法,就需要以实现这个接口的方式完成注入。实际上接口注入有很强的侵入性,除了要求客户类型增加前面两种方式所需要的代码外,还必须显示地定义一个新的接口并要求客户类型实现它。 //定义需要注入ITimeProvider的类型 interface IobjectWithTimeProvider { ITimeProvider TimeProvider { get; set; } } //通过接口方式实现注入 public class Client:IobjectWithTimeProvider { public ITimeProvider TimeProvider { get; set; } } */ /*--> */ Unit Test [TestClass] public class TestClent { [TestMethod] public void TestMethod1() { ITimeProvider timeProvider = (new Assembler()).Create<ITimeProvider>(); Assert.IsNotNull(timeProvider);//确认可以正常获得抽象类型实例

Day3——IOC和DI简介

房东的猫 提交于 2020-01-27 16:46:34
一. 回顾 前面讲到了 Day1——Spring简介 和 Day2——搭建Spring环境 ,今天讲一下IOC和DI到底是什么?大家了解即可,后面会详细讲述结构和原理 二. IOC简介 Inversion Of Control,简称IOC。中文名叫 反转控制,或者控制反转 。 传统编程思想: 我想要什么,就要主动去做什么。比如生活中我想吃饭,我得自己买菜煮饭 反转控制思想: 我想要什么,只需要等着接受就可以了。比如生活中我想吃饭,等着妈妈做好饭菜给你端过来即可。饭来张口。 IOC处于spring中的什么位置呢? 答:处于spring的最底层,所有spring操作都需要基于IOC进行。详情可看 Day1——Spring简介 。如下图: 三. DI简介 Dependency Injection,简称DI。 中文名依赖注入。 依赖注入更加能贴合IOC的意思,可以说是IOC的一种具体的实现。DI是组件以一些预定义好的方式(例如setter方法)接受来自于容器的资源注入。相对于IOC而言,这种表述更直接。 以上内容粗略了解即可,后面会详细讲述 来源: CSDN 作者: Android_la 链接: https://blog.csdn.net/qq_40634846/article/details/104092827

spring ioc和aop的含义

霸气de小男生 提交于 2020-01-27 12:03:50
自己整理的一些笔记,如有错误欢迎提出指正,谢谢 1.IOC的定义? IOC:另外一种说法叫DI(Dependency Injection),即依赖注入,是一种设计思想。 我们通过IOC将相互依赖对象的创建、协调工作交给Spring容器去处理,每个对象只需要关注其自身的业务逻辑关系就可以了。 作用是为了解耦,降低类之间的耦合度,其设计思想就是设计模式的工厂模式, 我们并不需要知道其生产的具体过程,我们只要其产出的对象即可。 其工作流程就是:在Spring容器启动的时候,Spring会把你在application.xml中配置好的bean都初始化, 在你需要调用的时候,把已经初始化的bean分配给你要调用这些bean的类,而不用去创建一个对象的实例。 2.IOC的传值方式有哪些? 一般的是设值传入和构造方法传入。 3.IOC的容器有哪些? 常见的一般是ApplicationContext和BeanFactory,这两个容器的区别请看这里: http://blog.csdn.net/hi_kevin/article/details/7325554 4.依赖注入的实现方式 就是Java的反射,通俗的来讲就是根据给出的类名来动态地生成对象,用set方法将事先保存在hashmap中的类属性注入到类中。 AOP: 面向切面编程,被定义为促使软件系统实现关注点的分离的技术。

spring的依赖注入

五迷三道 提交于 2020-01-26 23:46:14
  在使用Spring对项目进行管理时,核心功能便是IOC(控制反转)和DI(依赖注入)。使用IOC来控制JavaBean的实例化,而属性的赋值则是通过DI来实现的。在Spring中依赖注入主要有三种,分别是:构造器注入、setter注入和接口注入。除了这三种注入方式还有工厂方法注入。    一、构造器注入:JavaBean包含有参构造器      在xml文件中配置如下:          二、setter函数注入:属性必须有setter函数,getter方法不是必须属性       三、静态工厂方法注入:需要有一个工厂类,类里有一个静态方法获取JavaBean对象。      在xml中配置如下,class属性指向工厂类,factory-method指向返回JavaBean的静态方法。如果静态方法有参数,则可以通过<constructor-arg>子标签设置参数,<property>子标签设置的是静态方法返回的对象的属性。在这个示例中使用的是Food对象的属性       四、实例工厂方法注入:需要初始化工厂方法      xml文件如下:facotry-bean属性指向工厂类的实例,<property name="taste">子标签的值会覆盖出入的参数值。       来源: https://www.cnblogs.com/yaqee/p/12235052.html

AOP与IOC区别

你。 提交于 2020-01-26 23:34:08
Spring核心知识 Spring是一个开源框架,Spring是于2003年兴起的一个轻量级的Java开发框架,由Rod Johnson在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring的核心是控制反转(IoC)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式)轻量级开源框架。 为什么说Spring是一个一站式的轻量级开源框架呢?EE开发可分成三层架构,针对JavaEE的三层结构,每一层Spring都提供了不同的解决技术。 • WEB层:SpringMVC • 业务层:Spring的IoC • 持久层:Spring的JDBCTemplate(Spring的JDBC模板,ORM模板用于整合其他的持久层框架) 从上面的简要介绍中,我们要知道Spring的核心有两部分: • IoC:控制反转

C#依赖注入实例

我们两清 提交于 2020-01-26 09:16:19
http://qing.weibo.com/tj/400082fa33001h7x.html 1.5 实现依赖注入1.5.1 背景介绍 设计模式中,尤其是结构型模式很多时候解决的就是对象间的依赖关系,变依赖具体为依赖抽象。平时开发中如果发现客户程序依赖某个(或某类)对象,我们常常会对它们进行一次抽象,形成抽象的抽象类、接口,这样客户程序就可以摆脱所依赖的具体类型。 这个过程中有个环节被忽略了——谁来选择客户程序需要的满足抽象类型的具体类型呢?通过后面的介绍你会发现很多时候创建型模式可以比较优雅地解决这个问题。但另一问题出现了,如果您设计的不是具体业务逻辑,而是公共库或框架程序,这时候您是一个“服务方”,不是您调用那些构造类型,而是它们把抽象类型传给您,怎么松散地把加工好的抽象类型传递给客户程序就是另一回事了。 这个情形也就是常说的“控制反转”,IOC:Inverse of Control;框架程序与抽象类型的调用关系就像常说的好莱坞规则:Don’t call me, I’ll call you. 参考Martin Fowler在《Inversion of Control Containers and the Dependency Injection pattern》一文,我们可以采用“依赖注入”的方式将加工好的抽象类型实例“注入”到客户程序中

Spring学习记录--IOC(2)

怎甘沉沦 提交于 2020-01-26 03:58:05
希望年后可以找到工作(= ——=) IOC–Bean 配置管理Bean的时候需要注意: < bean name = "dateFactory" class = "Factory.MySimpleFactory" > < / bean > 以上格式默认采用默认无参构造方法生成Bean,若配置有其他构造方法,且没有写无参构造方法,则创建Bean失败,运行时加载xml配置阶段报错。 如:需要用自定义构造函数,写法如下 public class Person { String name ; int age ; List < String > hobby ; Map < String , List < String > > map ; // public Entity.Person(){ // // } public Person ( ) { } public Person ( String _name , int _age ) { name = _name ; age = _age ; } public Person ( String _name , int _age , Map < String , String [ ] > _map ) { name = _name ; age = _age ; } public Person ( String _name , int _age ,