ioc

轻量级IOC框架:Ninject

帅比萌擦擦* 提交于 2020-02-04 01:17:17
Ninject通过NinjectModule来配置依赖注入(不知道有没有文件配置,在官方教程里没找到相关资料),这里自定义自己的Module: internal class MyModule : Ninject.Modules.NinjectModule  {    public override void Load()    {      Bind<ILogger>().To<FlatFileLogger>();      Bind<ILogger>().To<DatabaseLogger>();    }  }   具体调用方法: private static IKernel kernel = new StandardKernel(new MyModule());  static void Main(string[] args)  {    ILogger logger = kernel.Get<ILogger>();    logger.Write("Bruce Say: Hello Ninject!");    Console.WriteLine("continues..");    Console.Read();  }   通过 kernel.Get<ILogger>() 来获取ILogger的实例,之前在MyModule里先后对ILogger

轻量级IOC框架:Ninject (上)

邮差的信 提交于 2020-02-04 01:15:38
前言 前段时间看Mvc最佳实践时,认识了一个轻量级的IOC框架: Ninject 。通过google搜索发现它是一个开源项目,最新源代码地址是: http://github.com/enkari/ninject/tree/master 用户向导: http://ninject.codeplex.com/wikipage?title=User%20Guide&referringTitle=Home 建议新手请先看看Ninject的介绍: What Is Ninject Why Use Ninject 我节选其中关于Ninject的好处,并翻译如下: Ninject是一个快如闪电、超轻量级的基于.Net平台的依赖注入框架。它能够帮助你把应用程序分离成一个个松耦合、高内聚的模块,然后用一种灵活的方式组装起来。通过使用Ninject配套你的软件架构,那么代码将会变得更加容易编写、重用性强、易于测试和修改。 搜索博客园尚未找到关于Ninject的使用,因此本文发布一个示例作入门级教程。 Ninject入门级示例 像以前的IOC教程那样,拿日志记录做示例应该是非常直观的。 首先编写一个日志记录的接口: public interface ILogger { void Write(string message); } 以及 FlatFileLogger, DatabaseLogger

spring -di依赖注入,seter方法

淺唱寂寞╮ 提交于 2020-02-03 19:33:54
【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" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <!-- scope属性,表示创建对象的方式, 值:prototype表示获取的是多实例 ,每次执行一次,都会创建一个新的对象 一旦换成 singleton 表示成一个单实例,只有唯一的一个实例,内存地址不变 --> <bean id="per" class="com.demo.dao.Person"></bean> <bean id="dao" class="com.demo.dao.PersonDAOImpl"> <property name="name" value="张三

(一)IOC基础推导及理论

你。 提交于 2020-02-03 15:45:37
环境准备:见java环境搭建,新建maven项目 1、写一个UserDao接口 public interface UserDao { public void getUser(); } 2、再写Dao的实现类 public class UserDaoImpl implements UserDao { @Override public void getUser() { System.out.println("获取用户数据"); } } 3、写UserService的接口 public interface UserService { public void getUser(); } 4、写Service的实现类 public class UserServiceImpl implements UserService { private UserDao userDao = new UserDaoImpl(); public void getUser() { userDao.getUser(); } } 5、测试一下 @Test public void test(){ UserService service = new UserServiceImpl(); service.getUser(); } 6、假设UserDao有多个实现类,UserDaoImplA和UserDaoImplB

架构师之路(5)---IoC框架

旧巷老猫 提交于 2020-02-03 12:43:28
1 IoC理论的背景 我们都知道在面向对象的应用中,软件系统都是由N个对象组成的,它们通过彼此的合作,最终实现业务逻辑。 图1:耦合在一起的对象 如果我们打开机械式手表的后盖,就会看到与上面类似的情形,各个齿轮分别带动时针、分针和秒针顺时针旋转,从而在表盘上产生正确的时间。上图画的就是这样的一个齿轮组,它拥有多个独立的齿轮,这些齿轮相互啮合在一起,协同工作,来共同完成某项任务。我们可以看到,在齿轮组中,如果有一个齿轮出了问题,就可能会影响到整个齿轮组的运转。 齿轮组中各个齿轮之间的啮合关系,与软件系统中对象与对象之间的耦合关系,非常类似。对象之间的耦合关系是必要的,是协同工作的基础,当然也是无法避免的,否则无法保证系统整体的正常运转。目前,很多工业级的应用越来越庞大,对象之间的依赖关系也越来越复杂,就会出现对象之间的多重依赖性关系,因此,架构师和设计师对系统进行分析和设计将面临很大的挑战。对象之间耦合度过高的系统,必然会出现牵一发而动全身的情形。 图2:对象之间复杂的依赖关系 耦合关系不仅会出现在对象与对象之间,也会出现在软件系统的各模块之间,以及软件系统和硬件系统之间。如何降低系统之间、模块之间和对象之间的耦合度,是软件工程永远追求的目标之一。 所以有人就提出来IOC理论,用来实现对象之间的“解耦”,目前已被广泛应用于很多项目中。 2 什么是控制反转(IoC)

Angularjs的IOC Inject分析

社会主义新天地 提交于 2020-02-03 02:44:16
在上一篇《 Angularjs开发一些经验总结 》中提到angular开发中的IOC inject优先,所以在这节将引用angularjs的注入代码来分析angularjs的注入方式。在《 再谈angularjs DI(Dependency Injection) 》中提到angularjs的注入方式分为3中方式,如果你还不清楚的请移步。 推断式注入:在angularjs中我们可以在我们需要注入的地方按照名称注入,这里要求参数名称必须和注入服务实例名称相同,一种名称约定,angularjs会提取参数名称查找相应DI实例注入; :标记注入:在angularjs中我们可以利用 $inject标注DI注入,这里需要注入服务名称的顺序和构造参数名对应.这里可以解决以上约定的死板性; 内联注入:对于directives,factory,filter等特殊指令使用$inject标注注入使用不是那么友好,angularjs特别增加了内联注入。 在这里我们先上今天的主角code: 1 /** 2 * @ngdoc overview 3 * @name AUTO 4 * @description 5 * 6 * Implicit module which gets automatically added to each {@link AUTO.$injector $injector}. 7 */ 8

Spring核心思想之IOC总结

断了今生、忘了曾经 提交于 2020-02-03 00:13:26
说到Spring的核心思想Ioc和aop不是Spring提出来的,在Spring之前就已经存在,只不过更偏向理论化,Spring在技术层次把两个思想做了非常好的实现(java) 第一部分:什么是IOC IOC Inversion of Control (控制反转/反转控制),注意它是⼀个技术思想,不是⼀个技术实现 描述的事情:Java开发领域对象的创建,管理的问题 传统开发⽅式:⽐如类A依赖于类B,往往会在类A中new⼀个B的对象 IoC思想下开发⽅式:我们不⽤⾃⼰去new对象了,⽽是由IoC容器(Spring框架)去帮助我们实例化对象并且管理它,我们需要使⽤哪个对象,去问IoC容器要即可 我们丧失了⼀个权利(创建、管理对象的权利),得到了⼀个福利(不⽤考虑对象的创建、管理等⼀系列事情) 为什么叫做控制反转? 控制:指的是对象创建(实例化、管理)的权利 反转:控制权交给外部环境了(spring框架、IoC容器) 第二部分:IOC解决了什么问题 IoC解决对象之间的耦合问题(声明接口类型的属性比如 private UserDao userDao;面向的接口,并没有面向具体的实现类,不存在特别强度的耦合) 第三部分:IoC和DI的区别 DI:Dependancy Injection(依赖注⼊) 怎么理解: IOC和DI描述的是同⼀件事情,只不过⻆度不⼀样罢了 来源: 51CTO 作者:

Spring入门-IOC

≡放荡痞女 提交于 2020-02-03 00:12:17
导包 第一个是用于注解的 idea会自动多导进来 四个核心(容器)jar包 最后一个是第三方(通过解压的形式会发现和idea的一样文件) 配置文件 1.加入约束(路径如下 找到自己的jar包) spring-framework-5.0.2.RELEASE/docs/spring-framework-reference/html5/index.html进入网页再点击core <?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"> <!-- services --> <bean id="petStore" class="org.springframework.samples.jpetstore.services.PetStoreServiceImpl"> <property name=

IoC容器Autofac之实例引入(一)

强颜欢笑 提交于 2020-02-02 19:57:31
先不必尝试理解IOC,先来看段代码。 一、一个没有使用IoC的例子 public class MPGMovieLister { public Movie[] GetMPG() { var finder = new ListMovieFinder(); var allMovies = finder.FindAll(); return allMovies.Where(m => m.Name.EndsWith(".MPG")).ToArray(); } } public class ListMovieFinder { public List<Movie> FindAll() { return new List<Movie> { new Movie { Name = "Die Hard.wmv" }, new Movie { Name = "My Name is John.MPG" } }; } } 类MPGMovieLister的作用是列出所有的mpg类型的电影,其中调用了类ListMovieFinder类的方法FindAll()来获取所有的电影。 这段代码看起来还不错,已经符合当前的需求了。 二、当需求发生变动时,非IoC遭遇到的困境 假如这个时候,movie的列表获取不是直接创建一个list获取,而要求从某个文本文件读取,或者是数据库获取,又或者从web service中获取

Spring 核心控制器 Ioc和Di

心不动则不痛 提交于 2020-02-02 17:57:00
学习spring的童鞋都知道,spring中有两个非常重要的点,Ioc(控制反转)与DI(依赖注入),对于初级玩家来说,这两个概念可能有点模棱两可的感觉,今天就谈下自己的一点理解,不足请多多指教!!! 本文人力资源局的例子只为方便理解,无任何指向意义! 首先在我们没使用Spring之前我们想用一个类调用另外一个类的方法或者传递方法,我们都采取实例化对象然后生成set,get方法,这样耦合度很高不利于程序得扩展,而且用起来很麻烦,开发效率很低。那我们有了Spring这些事请都让Spring去处理。 一、Ioc是什么?   控制反转(Inversion of Control,缩写为IoC),是 面向对象编程 中的一种设计原则,可以用来减低计算机代码之间的 耦合度 。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。当然,这是百度说的,看了还是不懂,so,复杂的东西简单说   控制反转三个问题:1、谁控制谁;            2、控制了什么;            3、怎么就反转了; 第一个问题: 谁控制谁,Ioc其实可以把它当做一个容器