依赖注入&Bean

未匹配的标注

Bean 注解

依赖生成工具 toolset; 每个struct如果存在注解 @Bean 那么它就可以被依赖系统管理, 你可以在任意地方编写以下代码,注解依赖工具toolset make:bean,这个工具可以运行任意项目下,可以不限制本框架。

// @Bean
type Test struct {
    TestPort int `inject:"config, app.servers.http.port"`
}

上面代码标识,Test 应该有依赖系统管理,属性TestPort 应获得一个int类型的配置。配置由config服务提供,参数是 app.servers.http.portconfig服务又是由注解 @Bean(“config”) 管理,当然它已经在框架引导文件里定义好了,查看 源码,你可以参考和定义更强大功能的服务提供者。编写好了,再使用工具生成注释对应的源码。

make gen

执行命令后,工具会在对应目录生成z_inject_gen.go,这个文件不应该手动维护;Teststruct 就可以在其他地方使用了,只是手动NewTest, 也可以在别的地方使用inject注解注入

func test() {
    NewTest()
}
// @Bean
type EchoTest struct {
    Test *Test `inject:""`
}

动态注入

为了更模块化开发,通常一个模块都有一个独立配置文件,以方便扩展功能;例如一个支付模块,需要更改自定义的数据库连接,动态注入指定配置的连接

// @Bean
type Play struct {
    DB *gorm.DB `inject:"database, @config(play.connect)"`
}

Bean的生命周期

// @Bean
type DemoBean struct {}

func (receiver DemoBean) Init() {
    // 会在第一次NewDemoBean()时候执行
}

func (receiver DemoBean) Boot () {
    // 会在框架所有的Init执行后,再统一执行 Boot
}

func (receiver DemoBean) Exit () {
    // 应用退出时候统一执行 Exit
}

项目地址 通用工具

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
贡献者:1
讨论数量: 0
发起讨论 只看当前版本


暂无话题~