Documentation
¶
Overview ¶
实现了一个完善的 IoC 容器。
Index ¶
- Constants
- Variables
- func IsRefType(k reflect.Kind) bool
- func IsValueType(k reflect.Kind) bool
- func NewBeanCondition(beanId string) *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(beanId string) *missingBeanCondition
- func NewMissingPropertyCondition(name string) *missingPropertyCondition
- func NewOptionArg(fn interface{}, tags ...string) *optionArg
- 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 (d *BeanDefinition) And() *BeanDefinition
- func (d *BeanDefinition) Bean() interface{}
- func (d *BeanDefinition) BeanId() string
- func (d *BeanDefinition) Caller() string
- func (d *BeanDefinition) ConditionOn(cond Condition) *BeanDefinition
- func (d *BeanDefinition) ConditionOnBean(beanId string) *BeanDefinition
- func (d *BeanDefinition) ConditionOnExpression(expression string) *BeanDefinition
- func (d *BeanDefinition) ConditionOnMatches(fn ConditionFunc) *BeanDefinition
- func (d *BeanDefinition) ConditionOnMissingBean(beanId string) *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(beanIds ...string) *BeanDefinition
- func (d *BeanDefinition) InitFunc(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(beanId string) *Conditional
- func (c *Conditional) OnCondition(cond Condition) *Conditional
- func (c *Conditional) OnExpression(expression string) *Conditional
- func (c *Conditional) OnMatches(fn ConditionFunc) *Conditional
- func (c *Conditional) OnMissingBean(beanId string) *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 Properties
- type SpringBean
- type SpringContext
Constants ¶
const ( ConditionDefault = ConditionOp(0) // 默认值 ConditionOr = ConditionOp(1) // 或 ConditionAnd = ConditionOp(2) // 且 ConditionNone = ConditionOp(3) // 非 )
Variables ¶
var ErrorType = reflect.TypeOf((*error)(nil)).Elem()
ErrorType error 的类型
Functions ¶
func NewBeanCondition ¶
func NewBeanCondition(beanId string) *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(beanId string) *missingBeanCondition
NewMissingBeanCondition missingBeanCondition 的构造函数
func NewMissingPropertyCondition ¶
func NewMissingPropertyCondition(name string) *missingPropertyCondition
NewMissingPropertyCondition missingPropertyCondition 的构造函数
func NewOptionArg ¶
func NewOptionArg(fn interface{}, tags ...string) *optionArg
NewOptionArg optionArg 的构造函数
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, parent *BeanDefinition, method string, tags ...string) *BeanDefinition
MethodToBeanDefinition 将成员方法转换为 BeanDefinition 对象
func ToBeanDefinition ¶
func ToBeanDefinition(name string, i interface{}) *BeanDefinition
ToBeanDefinition 将 Bean 转换为 BeanDefinition 对象
func (*BeanDefinition) ConditionOn ¶
func (d *BeanDefinition) ConditionOn(cond Condition) *BeanDefinition
ConditionOn 为 Bean 设置一个 Condition
func (*BeanDefinition) ConditionOnBean ¶
func (d *BeanDefinition) ConditionOnBean(beanId string) *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(beanId string) *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(beanIds ...string) *BeanDefinition
DependsOn 设置 Bean 的非直接依赖
func (*BeanDefinition) InitFunc ¶
func (d *BeanDefinition) InitFunc(fn interface{}) *BeanDefinition
InitFunc 设置 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(beanId string) *Conditional
OnBean 设置一个 beanCondition
func (*Conditional) OnCondition ¶
func (c *Conditional) OnCondition(cond Condition) *Conditional
OnCondition 设置一个 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(beanId string) *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 Properties ¶
type Properties interface { // LoadProperties 加载属性配置文件 LoadProperties(filename string) // GetProperty 返回属性值,属性名称统一转成小写。 GetProperty(name string) interface{} // GetBoolProperty 返回布尔型属性值,属性名称统一转成小写。 GetBoolProperty(name string) bool // GetIntProperty 返回有符号整型属性值,属性名称统一转成小写。 GetIntProperty(name string) int64 // GetUintProperty 返回无符号整型属性值,属性名称统一转成小写。 GetUintProperty(name string) uint64 // GetFloatProperty 返回浮点型属性值,属性名称统一转成小写。 GetFloatProperty(name string) float64 // GetStringProperty 返回字符串型属性值,属性名称统一转成小写。 GetStringProperty(name string) string // GetDefaultProperty 返回属性值,如果没有找到则使用指定的默认值,属性名称统一转成小写。 GetDefaultProperty(name string, defaultValue interface{}) (interface{}, bool) // SetProperty 设置属性值,属性名称统一转成小写。 SetProperty(name string, value interface{}) // GetPrefixProperties 返回指定前缀的属性值集合,属性名称统一转成小写。 GetPrefixProperties(prefix string) map[string]interface{} // GetAllProperties 返回所有的属性值,属性名称统一转成小写。 GetAllProperties() map[string]interface{} // BindProperty 根据类型获取属性值,属性名称统一转成小写。 BindProperty(name string, i interface{}) }
定义属性值接口
type SpringBean ¶
type SpringBean interface { Bean() interface{} // 源 Type() reflect.Type // 类型 Value() reflect.Value // 值 TypeName() string // 原始类型的全限定名 }
SpringBean Bean 源接口
type SpringContext ¶
type SpringContext interface { // 属性值列表接口 Properties // GetProfile 返回运行环境 GetProfile() string // SetProfile 设置运行环境 SetProfile(profile string) // 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。 RegisterMethodBean(parent *BeanDefinition, method string, tags ...string) *BeanDefinition // RegisterNameMethodBean 注册成员方法单例 Bean,需指定名称,重复注册会 panic。 RegisterNameMethodBean(name string, parent *BeanDefinition, method string, tags ...string) *BeanDefinition // AutoWireBeans 完成自动绑定 AutoWireBeans() // WireBean 绑定外部的 Bean 源 WireBean(bean interface{}) // GetBean 根据类型获取单例 Bean,若多于 1 个则 panic;找到返回 true 否则返回 false。 // 什么情况下会多于 1 个?假设 StructA 实现了 InterfaceT,而且用户在注册时使用了 // StructA 的指针注册多个 Bean,如果在获取时使用 InterfaceT,则必然出现多于 1 个的情况。 GetBean(i interface{}) bool // GetBeanValue 根据名称和类型获取单例 Bean,若多于 1 个则 panic;找到返回 true 否则返回 false。 GetBeanValue(beanId string, v reflect.Value) bool // GetBeanByName 根据名称和类型获取单例 Bean,若多于 1 个则 panic;找到返回 true 否则返回 false。 // 什么情况下会多于 1 个?假设 StructA 和 StructB 都实现了 InterfaceT,而且用户在注册时使用了相 // 同的名称分别注册了 StructA 和 StructB 的 Bean,这时候如果使用 InterfaceT 去获取,就会出现多于 1 个的情况。 GetBeanByName(beanId string, i interface{}) bool // CollectBeans 收集数组或指针定义的所有符合条件的 Bean 对象,收集到返回 true,否则返回 false。 // 什么情况下可以使用此功能?假设 HandlerA 和 HandlerB 都实现了 HandlerT 接口,而且用户分别注册 // 了一个 HandlerA 和 HandlerB 对象,如果用户想要同时获取 HandlerA 和 HandlerB 对象,那么他可 // 以通过 []HandlerT 即数组的方式获取到所有 Bean。 CollectBeans(i interface{}) bool // FindBeanByName 根据名称和类型获取单例 Bean,若多于 1 个则 panic;找到返回 true 否则返回 false。 FindBeanByName(beanId string) (*BeanDefinition, bool) // GetAllBeanDefinitions 获取所有 Bean 的定义,一般仅供调试使用。 GetAllBeanDefinitions() []*BeanDefinition }
SpringContext 定义 IoC 容器接口,Bean 的注册规则:
- AutoWireBeans 开始后不允许注册新的 Bean(性能考虑)