goioc

Go IOC 框架
授权协议 MIT
开发语言 Google Go
所属分类 程序开发、 面向方面AOP/IoC
软件类型 开源软件
地区 国产
投 递 者 白子昂
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

goioc 是一个 Go IOC 框架

使用步骤

  1. go get github.com/gosrv/goioc
  2. 加载配置文件
	loader := gioc.NewConfigLoader()
	err := loader.Load("example/conf/config.json")
	util.VerifyNoError(err)
  1. 创建IBeanContainerBuilder
    builder := gioc.NewBeanContainerBuilder()
  1. 加入1个ITagParser和若干个ITagProcessor
	builder.AddBean(loader)
	builder.AddBean(gioc.NewBeanTagProcessor(builder.GetBeanContainer()))
	builder.AddBean(gioc.NewConfigValueTagProcessor(loader))
	builder.AddBean(gioc.NewTagParser())
	builder.AddBean(gioc.NewBeanBeanConditionInjector())
  1. 加入专属bean
    builder.AddBean(otherBeans...)
  1. 构建容器
    builder.Build()

bean

放入容器中的对象就是一个bean,容器可以针对bean的成员变量做一些注入操作,比如其它bean实例的注入,或者配置数据的注入

IBeanContainerBuilder

用来构建bean容器,并完成注入,bean的注入操作由ITagProcessor完成
构建过程

  1. 收集满足条件的bean(通过IBeanCondition判断条件十分成立)
  2. 获取所有的ITagProcessor,并按优先级排序
  3. 按ITagProcessor的优先级先后处理所有满足条件的bean,这也是注入处理

IBeanCondition

通过内嵌接口IBeanCondition来实现条件判断,只有生效的bean才会被容器操作

  1. NewConditionAnd() 只有所有的条件都满足才能通过
  2. NewConditionOr() 有一个条件满足就能通过
  3. NewConditionOnValue() 当配置文件中存在配置项时才能通过
  4. NewConditionOnBeanType() 当存在某个类型的bean时才能通过
  5. NewConditionOnBeanName() 当存在某个名字的bean时才能通过

系统级tag

标注在bean上,可以执行一些特定意义的注入,目前支持两种系统级tag: bean和cfg

tag bean

  1. "bean" 通过类型注入,会注入其它同类型的bean,如果不是slice,要求容器内有且仅有一个次类型的bean,如果是slice,则可以有任意个
  2. "bean.name" 通过bean名字注入,必须存在并且只能有一个
  3. "bean.required" 如果没找到会不会报错,默认是true
    type BeanC struct {
        beanA IBeanA	`bean:"" bean.name:"beana" bean.required:"true"`
    }

tag cfg

  1. "cfg" 注入配置文件中的配置项
  2. "cfg.d" 注入特定域的配置项,与IConfigBase配合使用,调整配置注入的根节点
  3. "cfg.default" 如果配置文件中不存,则使用的默认配置
    type BeanConfig struct {
        Name  string
        Level int
        Age   int
    }
    
    type Bean struct {
        // 注入配置文件的配置项"cfg.a"
        ConfigA *BeanConfig `cfg:"cfg.a"`
        // 注入配置文件的配置项"cfg.b"
        ConfigB *BeanConfig `cfg:"cfg.b"`
    }

ITagProcessor

可以通过实现接口ITagProcessor来自定义tag注入器,你还可以为它指定一个优先级,如果它没有任何依赖,则可以设置为系统级tag

ITagParser

解析tag标签,容器中只能存在一个,而且必须有一个,用来解析tag

exaple

请查看example1.go/example2.go/example3.go/example4.go

gcluster

https://github.com/gosrv/gcluster
ioc容器的应用:游戏服务器引擎框架(用来开发游戏引擎的引擎)

 相关资料
  • 我们在WebLogic11g下使用JSF2.1+PrimeFaces6.0+PrimeFaces-Extensions6.0.0、mojarra 2.1.7。 单击p:commandButton后,DOM inspector显示对话框已在正文和html标记之外创建,如下一个图像所示: 在正文外部呈现的对话框 如果我们使用相同的代码(没有帧)创建一个新的.xhtml,并单击p:commandButt

  • 许多的 PHP 开发者都使用框架,而不是重新造轮子来构建 Web 应用。框架抽象了许多底层常用的逻辑,并提供了有益又简便的方法來完成常见的任务。 你并不一定要在每个项目中都使用框架。有时候原生的 PHP 才是正确的选择,但如果你需要一个框架,那么有如下三种主要类型: 微型框架 全栈框架 组件框架 微型框架基本上是一个封装的路由,用来转发 HTTP 请求至一个闭包,控制器,或方法等等,尽可能地加快开

  • 主要内容:iframe - 设置高度与宽度,实例,iframe - 移除边框,实例,使用 iframe 来显示目标链接页面,实例,HTML iframe 标签通过使用框架,你可以在同一个浏览器窗口中显示不止一个页面。 iframe语法: 该URL指向不同的网页。 iframe - 设置高度与宽度 height 和 width 属性用来定义iframe标签的高度与宽度。 属性默认以像素为单位, 但是你可以指定其按比例显示 (如:"80%")。 实例 <iframe loading="lazy" s

  • tornado.web — RequestHandler and Application classes Thread-safety notes Request handlers Entry points Input Output Cookies Other Application configuration Decorators Everything else tornado.template

  • UI /主题框架和组件 LESS支持下表中列出的一些UI/Theme框架 - Sr.No. 框架和描述 1 1pxdeep 它是平坦的Bootstrap 3主题,提供强大的配色方案控件。 2 Bootflat 它是一个基于Bootstrap的开源框架。 3 BootPress 它是一个基于平面文件CMS的PHP框架 4 Bootstrap 它是功能强大的移动第一前端框架,可实现更快,更轻松的Web

  • 本章介绍 Decoder(解码器) Encoder(编码器) Codec(编解码器) 在前面的章节中,我们讨论了连接到拦截操作或数据处理链的不同方式,展示了如何使用 ChannelHandler 及其相关的类来实现几乎任何一种应用程序所需的逻辑。但正如标准架构模式通常有专门的框架,通用处理模式很适合使用目标实现,可以节省我们大量的开发时间和精力。 在这一章,我们将研究编码和解码——数据从一种特定协

  • WLAN框架接口 函数 rt_err_t  rt_wlan_set_mode (const char *dev_name, rt_wlan_mode_t mode)   注册WLAN设备到WLAN设备框架   rt_err_t  rt_wlan_connect (const char *ssid, const char *password)   同步连接热点   rt_err_t  rt_wlan

  • 通过使用框架,你可以在同一个浏览器窗口中显示不止一个页面。 iframe语法: <iframe src="URL"></iframe> 该URL指向不同的网页。 Iframe - 设置高度与宽度 height 和 width 属性用来定义iframe标签的高度与宽度。 属性默认以像素为单位, 但是你可以指定其按比例显示 (如:"80%")。 <iframe src="demo_iframe.htm