依赖注入&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.port,config服务又是由注解 @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
}
GO 全栈框架封装
关于 LearnKu
推荐文章: