ioc

什么是IOC?好处是什么?与传统的开发模式有什么区别?

做~自己de王妃 提交于 2020-01-30 23:01:06
一、含义 其实就是依赖注入或者控制反转,主要用于: 1、对象创建 2、依赖管理 二、好处 目的就是为了解耦合,使代码具有更高的扩展性和维护性 1、耦合度和扩展性的关系 耦合性越高,加入新功能就需要大量的修改已有的代码,可扩展性越低 2、耦合度和可维护性的关系 耦合性越高,代码之间关联性依赖性紧密性越高,修改某部分代码对其它的代码影响就越大,可维护性越低 三、软件设计目标 松耦合,低耦合(高可维护性,高扩展性) 举例:比如面向对象之封装,就体现了松耦合的原理 原因:封装反映和事物的相对独立性,封装在编程中的作用就是使对象以外的部分不能随意更改对象的属性,从而有效避免了外部错误操作对此对象的影响 四、举例论证 1、对象创建 通常情况下创建对象的方式:Man man = new Man(); 而通过Spring框架来创建对象,则不需要使用new关键字 2、依赖管理 适应未来的变化,尽量少去修改现有的代码 以前dao 与service 的依赖是 你们自己在用代码控制 例如: Class UserServiceImpl { Private UserDao userDao = new UserDaoImpl();  如果此时需要修改UserDaoImpl2为其实现类,那么就需要手动修改service层的代码 Private UserDao userDao = new UserDaoImpl2

Spring入门(1)IOC容器简介

a 夏天 提交于 2020-01-30 04:40:42
1、IOC简介 学术:IoC就是一个对象定义其依赖关系而不创建它们的过程。 目的:省去new 创建对象的过程。在之前我们使用一个class,需要先 aaa = new bbb()一个对象。用了IOC,直接通过配置或者注释的手段,注册到容器中。无需new创建,即可直接使用 bbb()对象方法。 2、代码说明 (1)导包 核心容器 spring-beans-4.0.0.RELEASE.jar spring-context-4.0.0.RELEASE.jar spring-core-4.0.0.RELEASE.jar spring-expression-4.0.0.RELEASE.jar commons-logging-1.1.3.jar Spring运行的时候依赖一个日志包;没有就报错; (2)代码 package com . atguigu . bean ; public class Person { private String lastName ; private Integer age ; private String gender ; private String email ; public Person ( ) { super ( ) ; // TODO Auto-generated constructor stub System . out . println (

laravel的模块化是如何实现的

微笑、不失礼 提交于 2020-01-30 00:58:30
laravel的模块化是如何实现的 在laravel提供的官方文档上,有一个这样的名词 服务提供者 ,文档中介绍了它在laravel框架中的角色,以及如何使用它,但却没有讲明 服务提供者 的本质--它是为了解决什么问题而存在的? 不解决这一点,对于它的理解,则只会停留在表面. 服务提供者 是laravel实现模块化设计的手法. 为什么要进行模块化设计这里就不说的,可以参考下这些: 模块化设计 , 模块化的意义何在? 为了实现模块化,必然要将一段程序组合起来,完成特定的事,从而形成模块.在 laravel 中, 一个模块都表现为一个 Service .应用程序主体与组件(模块)之间必然要通过某种方式连接起来,才能使组件被主体所调用.在laravel中一个 Service 会被它的 Service Prorider 注入到ioc中,这样组件就与主体联系了起来, 具体的表现形式则是组件被主体所用,主体使用组件完成组件所擅长的事. 源代码是最好的文档,接下来,我们就看看"文档"是怎么说的. laravel的启动过程 我们从启动开始,详细地分析在整个应用程序的生命周期中, Service Provider 到底是什么?通过阅读源码方式来了解 Serivce Provider 在laravel中到底做了什么. laravle的启动过程做了很多事,这里就不一一叙述了,主要说明有关 Sevice

spring核心概念

隐身守侯 提交于 2020-01-29 17:58:27
IOC: Inverse of Control, 控制反转。对象的创建权由程序控制反转为Spring框架控制。 AOP: Aspect Oriented Programming, 面向切面编程。在不修改目标对象的源码情况下,增加IOC容器中Bean的功能。 DI: Dependency Injection, 依赖注入。在Spring框架负责创建Bean对象时,动态的将Bean对象依赖的对象注入到Bean对象中。 Spring容器:IOC容器。 来源: https://www.cnblogs.com/windpoplar/p/12240785.html

Spring Ioc、DI

左心房为你撑大大i 提交于 2020-01-29 17:05:15
Spring Ioc、DI 一、BeanDefinition从xml中诞生 二、获取BeanDefinition体系图 三、xml方式setter注入   TODO 四、xml方式构造器注入   TODO 五、注解获取ScannedGenericBeanDefinition 六、注解方式设置属性值 来源: https://www.cnblogs.com/zomicc/p/12240708.html

Spring IOC

℡╲_俬逩灬. 提交于 2020-01-29 12:59:24
Spring IOC IOC(控制反转:Inversion of Control),是一种设计思想,DI(依赖注入)是实现IOC的一种方法。 没有IOC的程序中,我们使用的是面向对象编程,对象的创建与对象间依赖关系完全硬编码在程序中,对象的创建由程序自己控制, 而 控制反转后,将对象的创建交给了第三方,个人理解,控制反转就是:获取依赖对象的方式反转了。 利用XML方式配置Bean,Bean的定义信息和实现是分离的,而采用注解的方式可以把两者合为一体,Bean的定义信息直接以注解的形式定义在实现类中,从而达到零配置的目的。 控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IoC容器,其实现方式是依赖注入(Dependency Injection,DI) 。 分析 原来的方式写代码: 1.先写一个UserDao接口 public interface UserDao { public void getUser ( ) ; } 2.再去写Dao的实现类 1 public class UserDaoImpl implements UserDao { 2 @Override 3 public void getUser ( ) { 4 System . out . println ( "获取用户数据" ) ; 5 } 6 } 3

Spring入门程序第一节

与世无争的帅哥 提交于 2020-01-29 11:24:54
Spring入门程序第一节 1 spring 是开源的轻量级框架。 2. spring核心两部分: (1) aop: 面向切面编程,扩展功能不是修改源代码实现。 (2)Ioc:控制反转:比如有一个类,在类里面有方法(不是静态的方法),调用类里面的方法,创建类的对象,使用对象 调用方法,创建类对象的过程,需要new 出来对象。 把对象的创建不是通过new 方式实现,而是交给spring配置创建类对象。 3. spring 是一站式框架。 (1)spring在javaee三层结构中,每一层都提供不同的解决技术。 web层 : springMVC service层:spring的ioc dao层: spring的jdbcTemplate 4 spring 版本 (1) hibernate5.x (2) spring4.x Sping 的ioc操作 1 把对象的创建交给spring进行管理 2 ioc 操作两部分 (1)ioc的配置文件方式 (2)ioc的注解方式 ioc底层原理 1 ioc 底层原理使用技术 (1)xml配置文件 (2)dom4j 解决xml (3)工厂设计模式 (4)反射 下面开始第一步 第四步 代码测试 User.java package com.cn.ioc; public class User { public void add(){ System.out

设计模式:控制反转IoC、依赖注入DI

大憨熊 提交于 2020-01-29 08:17:51
基本概念 控制反转 (Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。 其中最常见的方式叫做 依赖注入 (Dependency Injection,简称DI),还有一种方式叫“ 依赖查找 ”(Dependency Lookup)。 技术说明 Class A中用到了Class B的对象b,一般情况下,需要在A的代码中显式的new一个B的对象。 采用依赖注入技术之后,A的代码只需要定义一个私有的B对象,不需要直接new来获得这个对象,而是通过相关的容器控制程序来将B对象在外部new出来并注入到A类里的引用中。而具体获取的方法、对象被获取时的状态由配置文件(如XML)来指定。 举例 下面的代码中有一个 Database的类,它需要一个适配器来与数据库交互。我们在构造函数里实例化了适配器,从而产生了耦合。 <?php namespace Database ; class Database { protected $adapter ; public function __construct ( ) { $this - > adapter = new MySqlAdapter ; } } class MysqlAdapter { } 上面代码产生的问题: 1、如果现在要改变 adapter 生成方式,如需要用new

BeanDefinition在Ioc容器中的注册

喜夏-厌秋 提交于 2020-01-29 01:41:05
前面我们已经知道了BeanDefiniton基本数据结构在完成解析与载入之后就会成为spring中的内部数据结构 ,但是这时的数据并不能直接被调用,还需要往Ioc容器中注册这些数据 就是我们常见的一种容器-DefaultListableBeanFactory容器中,就是在这个容器中有一个HashMap来持有BeanDefinition数据结构,下面是对这个HashMap的定义 //可以看见这map对象是以beanName为key值,BeanDefinition对象为value的一种结构 //同时也是用一种CurrentHashMap也就是线程同步一个Map集合 private final Map < String, BeanDefinition > beanDefinitionMap = new CurrentHashMap < String, BeanDefinition > ( ) ; BeanDefinition中的注册主要的流程就是以下图解 下面这一部分主要的就是将BeanDefintion数据结构注册到ioc容器中的具体代码分析,就是在defaultListableBeanFactory中实现了BeanDefinitionRegistry接口中的registerBeanDefinition方法注册,下面就是对这一方法的源码解析 //注意到抛出异常的类型

Day7——DI依赖注入构造器方法

孤街醉人 提交于 2020-01-28 15:06:33
一. 回顾 前面 Day6——DI依赖注入set方法 讲到了IOC容器通过set方法给bean对象赋值。今天来讲通过构造器给bean对象赋值。 二. 原理 Person.java public Person ( String name , double salary ) { System . out . println ( "调用了形参为String,double类型的构造器" ) ; this . name = name ; this . salary = salary ; } public Person ( String name , int salary ) { System . out . println ( "调用了形参为String,int类型的构造器" ) ; this . name = name ; this . salary = salary ; } applicationContext.xml < bean id = " person2 " class = " com.atguigu.spring.bean.Person " > < constructor-arg value = " 老王 " index = ”0“ > </ constructor-arg > < constructor-arg value = " 10000 " type = " int "