goioc 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
goioc 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
goioc 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 MIT
开发语言 Google Go
操作系统 跨平台
软件类型 开源软件
开源组织
地区 国产
投 递 者 elevenx
适用人群 未知
收录时间 2019-04-02

软件简介

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容器的应用:游戏服务器引擎框架(用来开发游戏引擎的引擎)

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论

点击引领话题📣 发布并加入讨论🔥
暂无内容
发表了博客
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
发表了问答
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
jwt-go 安全漏洞
授权机制缺失
jwt-go是个人开发者的一个Go语言的JWT实现。 jwt-go 4.0.0-preview1之前版本存在安全漏洞。攻击者可利用该漏洞在使用[]string{} for m[\"aud\"](规范允许)的情况下绕过预期的访问限制。
CVE-2020-26160 MPS-2020-13786
2022-08-08 20:54
HashiCorp Consul 信息泄露漏洞
信息暴露
HashiCorp Consul是一套分布式、高可用数据中心感知解决方案。该产品用于跨动态分布式基础架构连接和配置应用程序。 HashiCorp Consul和Consul Enterprise 1.4.1版本至1.6.2版本中存在安全漏洞,该漏洞源于程序没有在全部的API端点上统一执行ACLs。攻击者可利用该漏洞获取信息。
CVE-2020-7955 MPS-2020-1598
2022-08-08 20:54
Gorilla Websocket 输入验证错误漏洞
Gorilla Websocket是Gorilla个人开发者的一个基于Go语言实现的Websocket代码库。 Gorilla WebSocket 1.4.0之前版本存在输入验证错误漏洞,该漏洞源于通过websocket连接接收的websocket帧的长度存在整数溢出漏洞。攻击者可利用该漏洞会利用这个漏洞对允许websocket连接的HTTP服务器发起拒绝服务攻击。
CVE-2020-27813 MPS-2020-16819
2022-08-08 20:54
Google Kubernetes API Server 资源管理错误漏洞
循环内过多的平台资源消耗
Google Kubernetes是美国谷歌(Google)公司的一套开源的Docker容器集群管理系统。该系统为容器化的应用提供资源调度、部署运行、服务发现和扩容缩容等功能。API server是其中的一个API(应用编程接口)服务器。 Google Kubernetes 1.15.10之前版本、1.16.7之前版本和1.17.3之前版本中的API Server组件存在资源管理错误漏洞。远程攻击者可借助特制请求利用该漏洞造成拒绝服务。
CVE-2019-11254 MPS-2020-44793
2022-08-08 20:54
Hashicorp HashiCorp Consul 安全漏洞
Hashicorp HashiCorp Consul是美国HashiCorp(Hashicorp)公司的一套分布式、高可用数据中心感知解决方案。该产品用于跨动态分布式基础架构连接和配置应用程序。 Consul 存在安全漏洞,该漏洞允许远程攻击者破坏目标系统。以下产品及版本受到影响:Consul: 1.8.0, 1.8.1, 1.8.2, 1.8.3, 1.8.4, 1.8.5, 1.8.6, 1.8.7, 1.8.8, 1.8.9, 1.9.0, 1.9.1, 1.9.2, 1.9.3, 1.9.4。
CVE-2021-28156 MPS-2021-5161
2022-08-08 20:54
Hashicorp HashiCorp Consul 安全漏洞
拒绝服务
Hashicorp HashiCorp Consul是美国HashiCorp(Hashicorp)公司的一套分布式、高可用数据中心感知解决方案。该产品用于跨动态分布式基础架构连接和配置应用程序。 HashiCorp Consul和Consul Enterprise 1.8.0到1.9.14、1.10.7和1.11.2存在安全漏洞,该漏洞源于应用存在不受控的资源消耗。
CVE-2022-24687 MPS-2022-3624
2022-08-08 20:54
miekg Go DNS package 安全特征问题漏洞
使用具有密码学弱点缺陷的PRNG
miekg Go DNS package是一款DNS服务器软件包。 miekg Go DNS package 1.1.25之前版本(用在CoreDNS 1.6.6之前版本和其他产品)中存在安全漏洞,该漏洞源于程序没有正确生成随机数。攻击者可利用该漏洞伪造响应。
CVE-2019-19794 MPS-2019-16292
2022-08-08 20:54
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
0 评论
5 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部