依赖注入&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
,这个文件不应该手动维护;Test
struct 就可以在其他地方使用了,只是手动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
}