Documentation
¶
Overview ¶
实现了一个完善的 IoC 容器。
Index ¶
- Constants
- func IsFuncBeanType(fnType reflect.Type) bool
- func IsNil(v reflect.Value) bool
- func IsRefType(k reflect.Kind) bool
- func IsValidConverter(t reflect.Type) bool
- func IsValueType(k reflect.Kind) bool
- func NewBeanCondition(selector interface{}) *beanCondition
- func NewConditions(op ConditionOp, cond ...Condition) *conditions
- func NewDefaultProperties() *defaultProperties
- func NewDefaultSpringContext() *defaultSpringContext
- func NewExpressionCondition(expression string) *expressionCondition
- func NewFunctionCondition(fn ConditionFunc) *functionCondition
- func NewMissingBeanCondition(selector interface{}) *missingBeanCondition
- func NewMissingPropertyCondition(name string) *missingPropertyCondition
- func NewNotCondition(cond Condition) *notCondition
- func NewOptionArg(fn interface{}, tags ...string) *optionArg
- func NewPriorityProperties(properties Properties) *priorityProperties
- func NewProfileCondition(profile string) *profileCondition
- func NewPropertyCondition(name string) *propertyCondition
- func NewPropertyValueCondition(name string, havingValue interface{}) *propertyValueCondition
- func ParseBeanId(beanId string) (typeName string, beanName string, nullable bool)
- func RegisterTypeConverter(fn interface{})
- func TypeName(t reflect.Type) string
- type BeanDefinition
- func FnToBeanDefinition(name string, fn interface{}, tags ...string) *BeanDefinition
- func MethodToBeanDefinition(name string, selector interface{}, method string, tags ...string) *BeanDefinition
- func ToBeanDefinition(name string, i interface{}) *BeanDefinition
- func ValueToBeanDefinition(name string, v reflect.Value) *BeanDefinition
- func (d *BeanDefinition) And() *BeanDefinition
- func (d *BeanDefinition) AsInterface(exports ...interface{}) *BeanDefinition
- func (d *BeanDefinition) Bean() interface{}
- func (d *BeanDefinition) BeanId() string
- func (d *BeanDefinition) Caller() string
- func (d *BeanDefinition) ConditionNot(cond Condition) *BeanDefinition
- func (d *BeanDefinition) ConditionOn(cond Condition) *BeanDefinition
- func (d *BeanDefinition) ConditionOnBean(selector interface{}) *BeanDefinition
- func (d *BeanDefinition) ConditionOnExpression(expression string) *BeanDefinition
- func (d *BeanDefinition) ConditionOnMatches(fn ConditionFunc) *BeanDefinition
- func (d *BeanDefinition) ConditionOnMissingBean(selector interface{}) *BeanDefinition
- func (d *BeanDefinition) ConditionOnMissingProperty(name string) *BeanDefinition
- func (d *BeanDefinition) ConditionOnProfile(profile string) *BeanDefinition
- func (d *BeanDefinition) ConditionOnProperty(name string) *BeanDefinition
- func (d *BeanDefinition) ConditionOnPropertyValue(name string, havingValue interface{}) *BeanDefinition
- func (d *BeanDefinition) DependsOn(selector ...interface{}) *BeanDefinition
- func (d *BeanDefinition) Description() string
- func (d *BeanDefinition) Destroy(fn interface{}) *BeanDefinition
- func (d *BeanDefinition) Init(fn interface{}) *BeanDefinition
- func (d *BeanDefinition) Match(typeName string, beanName string) bool
- func (d *BeanDefinition) Matches(ctx SpringContext) bool
- func (d *BeanDefinition) Name() string
- func (d *BeanDefinition) Options(options ...*optionArg) *BeanDefinition
- func (d *BeanDefinition) Or() *BeanDefinition
- func (d *BeanDefinition) Primary(primary bool) *BeanDefinition
- func (d *BeanDefinition) Type() reflect.Type
- func (d *BeanDefinition) TypeName() string
- func (d *BeanDefinition) Value() reflect.Value
- type Condition
- type ConditionFunc
- type ConditionOp
- type Conditional
- func (c *Conditional) And() *Conditional
- func (c *Conditional) Empty() bool
- func (c *Conditional) Matches(ctx SpringContext) bool
- func (c *Conditional) OnBean(selector interface{}) *Conditional
- func (c *Conditional) OnCondition(cond Condition) *Conditional
- func (c *Conditional) OnConditionNot(cond Condition) *Conditional
- func (c *Conditional) OnExpression(expression string) *Conditional
- func (c *Conditional) OnMatches(fn ConditionFunc) *Conditional
- func (c *Conditional) OnMissingBean(selector interface{}) *Conditional
- func (c *Conditional) OnMissingProperty(name string) *Conditional
- func (c *Conditional) OnProfile(profile string) *Conditional
- func (c *Conditional) OnProperty(name string) *Conditional
- func (c *Conditional) OnPropertyValue(name string, havingValue interface{}) *Conditional
- func (c *Conditional) Or() *Conditional
- type ContextEvent
- type IBeanDefinition
- type Properties
- type SpringBean
- type SpringContext
- type WiringEvent
- type WiringWatcher
Constants ¶
const ( ConditionOr = ConditionOp(1) // 至少一个满足 ConditionAnd = ConditionOp(2) // 所有都要满足 ConditionNone = ConditionOp(3) // 没有一个满足 )
const ( ContextEvent_ResolveStart = ContextEvent(0) // 开始解析 Bean 的过程 ContextEvent_ResolveEnd = ContextEvent(1) // 结束解析 Bean 的过程 ContextEvent_AutoWireStart = ContextEvent(2) // 开始注入 Bean 的过程 ContextEvent_AutoWireEnd = ContextEvent(3) // 结束注入 Bean 的过程 ContextEvent_CloseStart = ContextEvent(4) // 开始关闭 Context 的过程 ContextEvent_CloseEnd = ContextEvent(5) // 结束关闭 Context 的过程 )
const ( WiringEvent_Push = WiringEvent(1) // 入栈事件 WiringEvent_Pop = WiringEvent(2) // 出栈事件 )
Variables ¶
This section is empty.
Functions ¶
func IsFuncBeanType ¶
IsFuncBeanType 返回是否是合法的函数 Bean 类型
func NewBeanCondition ¶
func NewBeanCondition(selector interface{}) *beanCondition
NewBeanCondition beanCondition 的构造函数
func NewConditions ¶
func NewConditions(op ConditionOp, cond ...Condition) *conditions
NewConditions conditions 的构造函数
func NewDefaultProperties ¶
func NewDefaultProperties() *defaultProperties
NewDefaultProperties defaultProperties 的构造函数
func NewDefaultSpringContext ¶
func NewDefaultSpringContext() *defaultSpringContext
NewDefaultSpringContext defaultSpringContext 的构造函数
func NewExpressionCondition ¶
func NewExpressionCondition(expression string) *expressionCondition
NewExpressionCondition expressionCondition 的构造函数
func NewFunctionCondition ¶
func NewFunctionCondition(fn ConditionFunc) *functionCondition
NewFunctionCondition functionCondition 的构造函数
func NewMissingBeanCondition ¶
func NewMissingBeanCondition(selector interface{}) *missingBeanCondition
NewMissingBeanCondition missingBeanCondition 的构造函数
func NewMissingPropertyCondition ¶
func NewMissingPropertyCondition(name string) *missingPropertyCondition
NewMissingPropertyCondition missingPropertyCondition 的构造函数
func NewNotCondition ¶
func NewNotCondition(cond Condition) *notCondition
NewNotCondition notCondition 的构造函数
func NewOptionArg ¶
func NewOptionArg(fn interface{}, tags ...string) *optionArg
NewOptionArg optionArg 的构造函数
func NewPriorityProperties ¶ added in v1.0.1
func NewPriorityProperties(properties Properties) *priorityProperties
NewPriorityProperties priorityProperties 的构造函数
func NewProfileCondition ¶
func NewProfileCondition(profile string) *profileCondition
NewProfileCondition profileCondition 的构造函数
func NewPropertyCondition ¶
func NewPropertyCondition(name string) *propertyCondition
NewPropertyCondition propertyCondition 的构造函数
func NewPropertyValueCondition ¶
func NewPropertyValueCondition(name string, havingValue interface{}) *propertyValueCondition
NewPropertyValueCondition propertyValueCondition 的构造函数
func ParseBeanId ¶
ParseBeanId 解析 BeanId 的内容,"TypeName:BeanName?" 或者 "[]?"
func RegisterTypeConverter ¶
func RegisterTypeConverter(fn interface{})
RegisterTypeConverter 注册类型转换器,用于属性绑定,函数原型 func(string)type
Types ¶
type BeanDefinition ¶
type BeanDefinition struct {
// contains filtered or unexported fields
}
BeanDefinition Bean 的详细定义
func FnToBeanDefinition ¶
func FnToBeanDefinition(name string, fn interface{}, tags ...string) *BeanDefinition
FnToBeanDefinition 将构造函数转换为 BeanDefinition 对象
func MethodToBeanDefinition ¶
func MethodToBeanDefinition(name string, selector interface{}, method string, tags ...string) *BeanDefinition
MethodToBeanDefinition 将成员方法转换为 BeanDefinition 对象
func ToBeanDefinition ¶
func ToBeanDefinition(name string, i interface{}) *BeanDefinition
ToBeanDefinition 将 Bean 转换为 BeanDefinition 对象
func ValueToBeanDefinition ¶
func ValueToBeanDefinition(name string, v reflect.Value) *BeanDefinition
ValueToBeanDefinition 将 Value 转换为 BeanDefinition 对象
func (*BeanDefinition) AsInterface ¶
func (d *BeanDefinition) AsInterface(exports ...interface{}) *BeanDefinition
AsInterface 指定 Bean 的导出接口
func (*BeanDefinition) ConditionNot ¶
func (d *BeanDefinition) ConditionNot(cond Condition) *BeanDefinition
ConditionNot 为 Bean 设置一个取反的 Condition
func (*BeanDefinition) ConditionOn ¶
func (d *BeanDefinition) ConditionOn(cond Condition) *BeanDefinition
ConditionOn 为 Bean 设置一个 Condition
func (*BeanDefinition) ConditionOnBean ¶
func (d *BeanDefinition) ConditionOnBean(selector interface{}) *BeanDefinition
ConditionOnBean 为 Bean 设置一个 BeanCondition
func (*BeanDefinition) ConditionOnExpression ¶
func (d *BeanDefinition) ConditionOnExpression(expression string) *BeanDefinition
ConditionOnExpression 为 Bean 设置一个 ExpressionCondition
func (*BeanDefinition) ConditionOnMatches ¶
func (d *BeanDefinition) ConditionOnMatches(fn ConditionFunc) *BeanDefinition
ConditionOnMatches 为 Bean 设置一个 FunctionCondition
func (*BeanDefinition) ConditionOnMissingBean ¶
func (d *BeanDefinition) ConditionOnMissingBean(selector interface{}) *BeanDefinition
ConditionOnMissingBean 为 Bean 设置一个 MissingBeanCondition
func (*BeanDefinition) ConditionOnMissingProperty ¶
func (d *BeanDefinition) ConditionOnMissingProperty(name string) *BeanDefinition
ConditionOnMissingProperty 为 Bean 设置一个 MissingPropertyCondition
func (*BeanDefinition) ConditionOnProfile ¶
func (d *BeanDefinition) ConditionOnProfile(profile string) *BeanDefinition
ConditionOnProfile 为 Bean 设置一个 ProfileCondition
func (*BeanDefinition) ConditionOnProperty ¶
func (d *BeanDefinition) ConditionOnProperty(name string) *BeanDefinition
ConditionOnProperty 为 Bean 设置一个 PropertyCondition
func (*BeanDefinition) ConditionOnPropertyValue ¶
func (d *BeanDefinition) ConditionOnPropertyValue(name string, havingValue interface{}) *BeanDefinition
ConditionOnPropertyValue 为 Bean 设置一个 PropertyValueCondition
func (*BeanDefinition) DependsOn ¶
func (d *BeanDefinition) DependsOn(selector ...interface{}) *BeanDefinition
DependsOn 设置 Bean 的非直接依赖
func (*BeanDefinition) Description ¶
func (d *BeanDefinition) Description() string
Description 返回 Bean 的详细描述
func (*BeanDefinition) Destroy ¶
func (d *BeanDefinition) Destroy(fn interface{}) *BeanDefinition
Destroy 设置 Bean 销毁时的回调
func (*BeanDefinition) Init ¶
func (d *BeanDefinition) Init(fn interface{}) *BeanDefinition
Init 设置 Bean 初始化的回调
func (*BeanDefinition) Match ¶
func (d *BeanDefinition) Match(typeName string, beanName string) bool
Match 测试 Bean 的类型全限定名和 Bean 的名称是否都匹配
func (*BeanDefinition) Matches ¶
func (d *BeanDefinition) Matches(ctx SpringContext) bool
Matches 成功返回 true,失败返回 false
func (*BeanDefinition) Options ¶
func (d *BeanDefinition) Options(options ...*optionArg) *BeanDefinition
Options 设置 Option 模式函数的参数绑定
func (*BeanDefinition) Primary ¶
func (d *BeanDefinition) Primary(primary bool) *BeanDefinition
Primary 设置 Bean 的优先级
func (*BeanDefinition) TypeName ¶
func (d *BeanDefinition) TypeName() string
TypeName 返回 Bean 的原始类型的全限定名
type Condition ¶
type Condition interface { // Matches 成功返回 true,失败返回 false Matches(ctx SpringContext) bool }
Condition 定义一个判断条件
type ConditionFunc ¶
type ConditionFunc func(ctx SpringContext) bool
ConditionFunc 定义 Condition 接口 Matches 方法的类型
type Conditional ¶
type Conditional struct {
// contains filtered or unexported fields
}
Conditional Condition 计算式
func (*Conditional) Matches ¶
func (c *Conditional) Matches(ctx SpringContext) bool
Matches 成功返回 true,失败返回 false
func (*Conditional) OnBean ¶
func (c *Conditional) OnBean(selector interface{}) *Conditional
OnBean 设置一个 beanCondition
func (*Conditional) OnCondition ¶
func (c *Conditional) OnCondition(cond Condition) *Conditional
OnCondition 设置一个 Condition
func (*Conditional) OnConditionNot ¶
func (c *Conditional) OnConditionNot(cond Condition) *Conditional
OnConditionNot 设置一个取反的 Condition
func (*Conditional) OnExpression ¶
func (c *Conditional) OnExpression(expression string) *Conditional
OnExpression 设置一个 expressionCondition
func (*Conditional) OnMatches ¶
func (c *Conditional) OnMatches(fn ConditionFunc) *Conditional
OnMatches 设置一个 functionCondition
func (*Conditional) OnMissingBean ¶
func (c *Conditional) OnMissingBean(selector interface{}) *Conditional
OnMissingBean 设置一个 missingBeanCondition
func (*Conditional) OnMissingProperty ¶
func (c *Conditional) OnMissingProperty(name string) *Conditional
OnMissingProperty 设置一个 missingPropertyCondition
func (*Conditional) OnProfile ¶
func (c *Conditional) OnProfile(profile string) *Conditional
OnProfile 设置一个 profileCondition
func (*Conditional) OnProperty ¶
func (c *Conditional) OnProperty(name string) *Conditional
OnProperty 设置一个 propertyCondition
func (*Conditional) OnPropertyValue ¶
func (c *Conditional) OnPropertyValue(name string, havingValue interface{}) *Conditional
OnPropertyValue 设置一个 propertyValueCondition
type IBeanDefinition ¶
type IBeanDefinition interface { Bean() interface{} // 源 Type() reflect.Type // 类型 Value() reflect.Value // 值 TypeName() string // 原始类型的全限定名 Name() string // 返回 Bean 的名称 BeanId() string // 返回 Bean 的 BeanId Caller() string // 返回 Bean 的注册点 Description() string // 返回 Bean 的详细描述 // contains filtered or unexported methods }
IBeanDefinition 对 BeanDefinition 的抽象接口
type Properties ¶
type Properties interface { // LoadProperties 加载属性配置文件, // 支持 properties、yaml 和 toml 三种文件格式。 LoadProperties(filename string) // ReadProperties 读取属性配置文件, // 支持 properties、yaml 和 toml 三种文件格式。 ReadProperties(reader io.Reader, configType string) // GetProperty 返回属性值,属性名称统一转成小写。 GetProperty(keys ...string) interface{} // GetBoolProperty 返回布尔型属性值,属性名称统一转成小写。 GetBoolProperty(keys ...string) bool // GetIntProperty 返回有符号整型属性值,属性名称统一转成小写。 GetIntProperty(keys ...string) int64 // GetUintProperty 返回无符号整型属性值,属性名称统一转成小写。 GetUintProperty(keys ...string) uint64 // GetFloatProperty 返回浮点型属性值,属性名称统一转成小写。 GetFloatProperty(keys ...string) float64 // GetStringProperty 返回字符串型属性值,属性名称统一转成小写。 GetStringProperty(keys ...string) string // GetDurationProperty 返回 Duration 类型属性值,属性名称统一转成小写。 GetDurationProperty(keys ...string) time.Duration // GetTimeProperty 返回 Time 类型的属性值,属性名称统一转成小写。 GetTimeProperty(keys ...string) time.Time // GetDefaultProperty 返回属性值,如果没有找到则使用指定的默认值,属性名称统一转成小写。 GetDefaultProperty(key string, def interface{}) (interface{}, bool) // SetProperty 设置属性值,属性名称统一转成小写。 SetProperty(key string, value interface{}) // GetPrefixProperties 返回指定前缀的属性值集合,属性名称统一转成小写。 GetPrefixProperties(prefix string) map[string]interface{} // GetProperties 返回所有的属性值,属性名称统一转成小写。 GetProperties() map[string]interface{} // BindProperty 根据类型获取属性值,属性名称统一转成小写。 BindProperty(key string, i interface{}) // BindPropertyIf 根据类型获取属性值,属性名称统一转成小写。 BindPropertyIf(key string, i interface{}, allAccess bool) }
定义属性值接口
type SpringBean ¶
type SpringBean interface { Bean() interface{} // 源 Type() reflect.Type // 类型 Value() reflect.Value // 值 TypeName() string // 原始类型的全限定名 // contains filtered or unexported methods }
SpringBean Bean 源接口
type SpringContext ¶
type SpringContext interface { // 属性值列表接口 Properties // 上下文接口 context.Context // GetProfile 返回运行环境 GetProfile() string // SetProfile 设置运行环境 SetProfile(profile string) // AllAccess 返回是否允许访问私有字段 AllAccess() bool // SetAllAccess 设置是否允许访问私有字段 SetAllAccess(allAccess bool) // SetEventNotify 设置 Context 事件通知函数 SetEventNotify(notify func(event ContextEvent)) // RegisterBean 注册单例 Bean,不指定名称,重复注册会 panic。 RegisterBean(bean interface{}) *BeanDefinition // RegisterNameBean 注册单例 Bean,需指定名称,重复注册会 panic。 RegisterNameBean(name string, bean interface{}) *BeanDefinition // RegisterBeanFn 注册单例构造函数 Bean,不指定名称,重复注册会 panic。 RegisterBeanFn(fn interface{}, tags ...string) *BeanDefinition // RegisterNameBeanFn 注册单例构造函数 Bean,需指定名称,重复注册会 panic。 RegisterNameBeanFn(name string, fn interface{}, tags ...string) *BeanDefinition // RegisterMethodBean 注册成员方法单例 Bean,不指定名称,重复注册会 panic。 // selector 可以是 *BeanDefinition,可以是 BeanId,还可以是 (Type)(nil) 变量。 // 必须给定方法名而不能通过遍历方法列表比较方法类型的方式获得函数名,因为不同方法的类型可能相同。 // 而且 interface 的方法类型不带 receiver 而成员方法的类型带有 receiver,两者类型不好匹配。 RegisterMethodBean(selector interface{}, method string, tags ...string) *BeanDefinition // RegisterNameMethodBean 注册成员方法单例 Bean,需指定名称,重复注册会 panic。 // selector 可以是 *BeanDefinition,可以是 BeanId,还可以是 (Type)(nil) 变量。 // 必须给定方法名而不能通过遍历方法列表比较方法类型的方式获得函数名,因为不同方法的类型可能相同。 // 而且 interface 的方法类型不带 receiver 而成员方法的类型带有 receiver,两者类型不好匹配。 RegisterNameMethodBean(name string, selector interface{}, method string, tags ...string) *BeanDefinition // AutoWireBeans 完成自动绑定 AutoWireBeans(watchers ...WiringWatcher) // WireBean 绑定外部的 Bean 源 WireBean(bean interface{}, watchers ...WiringWatcher) // GetBean 根据类型获取单例 Bean,若多于 1 个则 panic;找到返回 true 否则返回 false。 // 什么情况下会多于 1 个?假设 StructA 实现了 InterfaceT,而且用户在注册时使用了 // StructA 的指针注册多个 Bean,如果在获取时使用 InterfaceT,则必然出现多于 1 个的情况。 GetBean(i interface{}, watchers ...WiringWatcher) bool // GetBeanByName 根据名称和类型获取单例 Bean,若多于 1 个则 panic;找到返回 true 否则返回 false。 // 什么情况下会多于 1 个?假设 StructA 和 StructB 都实现了 InterfaceT,而且用户在注册时使用了相 // 同的名称分别注册了 StructA 和 StructB 的 Bean,这时候如果使用 InterfaceT 去获取,就会出现多于 1 个的情况。 GetBeanByName(beanId string, i interface{}, watchers ...WiringWatcher) bool // FindBean 获取单例 Bean,若多于 1 个则 panic;找到返回 true 否则返回 false。 // selector 可以是 BeanId,还可以是 (Type)(nil) 变量,Type 为接口类型时带指针。 FindBean(selector interface{}) (*BeanDefinition, bool) // FindBeanByName 根据名称和类型获取单例 Bean,若多于 1 个则 panic;找到返回 true 否则返回 false。 FindBeanByName(beanId string) (*BeanDefinition, bool) // CollectBeans 收集数组或指针定义的所有符合条件的 Bean 对象,收集到返回 true,否则返回 false。 // 什么情况下可以使用此功能?假设 HandlerA 和 HandlerB 都实现了 HandlerT 接口,而且用户分别注册 // 了一个 HandlerA 和 HandlerB 对象,如果用户想要同时获取 HandlerA 和 HandlerB 对象,那么他可 // 以通过 []HandlerT 即数组的方式获取到所有 Bean。 CollectBeans(i interface{}, watchers ...WiringWatcher) bool // GetBeanDefinitions 获取所有 Bean 的定义,一般仅供调试使用。 GetBeanDefinitions() []*BeanDefinition // Close 关闭容器上下文,用于通知 Bean 销毁等。 Close() }
SpringContext 定义 IoC 容器接口,Bean 的注册规则:
- AutoWireBeans 开始后不允许注册新的 Bean(性能考虑)
type WiringWatcher ¶
type WiringWatcher func(bd IBeanDefinition, event WiringEvent)
WiringWatcher 注入过程监视器