SpringCore

package
v1.0.0-rc Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 4, 2020 License: Apache-2.0 Imports: 15 Imported by: 10

Documentation

Overview

实现了一个完善的 IoC 容器。

Index

Constants

View Source
const (
	ConditionDefault = ConditionOp(0) // 默认值
	ConditionOr      = ConditionOp(1) // 或
	ConditionAnd     = ConditionOp(2) // 且
	ConditionNone    = ConditionOp(3) // 非
)

Variables

View Source
var ErrorType = reflect.TypeOf((*error)(nil)).Elem()

ErrorType error 的类型

Functions

func IsRefType

func IsRefType(k reflect.Kind) bool

IsRefType 返回是否是引用类型

func IsValueType

func IsValueType(k reflect.Kind) bool

IsValueType 返回是否是值类型

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

func ParseBeanId(beanId string) (typeName string, beanName string, nullable bool)

ParseBeanId 解析 BeanId 的内容,"TypeName:BeanName?" 或者 "[]?"

func RegisterTypeConverter

func RegisterTypeConverter(fn interface{})

RegisterTypeConverter 注册类型转换器,用于属性绑定,函数原型 func(string)type

func TypeName

func TypeName(t reflect.Type) string

TypeName 返回原始类型的全限定名,golang 允许不同的路径下存在相同的包,故此有全限定名的需求。 形如 "github.com/go-spring/go-spring/spring-core/SpringCore.DefaultSpringContext"

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) And

func (d *BeanDefinition) And() *BeanDefinition

And c=a&&b

func (*BeanDefinition) Bean

func (d *BeanDefinition) Bean() interface{}

Bean 返回 Bean 的源

func (*BeanDefinition) BeanId

func (d *BeanDefinition) BeanId() string

BeanId 返回 Bean 的 BeanId

func (*BeanDefinition) Caller

func (d *BeanDefinition) Caller() string

Caller 返回 Bean 的调用点

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) Name

func (d *BeanDefinition) Name() string

Name 返回 Bean 的名称

func (*BeanDefinition) Options

func (d *BeanDefinition) Options(options ...*optionArg) *BeanDefinition

Options 设置 Option 模式函数的参数绑定

func (*BeanDefinition) Or

func (d *BeanDefinition) Or() *BeanDefinition

Or c=a||b

func (*BeanDefinition) Primary

func (d *BeanDefinition) Primary(primary bool) *BeanDefinition

Primary 设置 Bean 的优先级

func (*BeanDefinition) Type

func (d *BeanDefinition) Type() reflect.Type

Type 返回 Bean 的类型

func (*BeanDefinition) TypeName

func (d *BeanDefinition) TypeName() string

TypeName 返回 Bean 的原始类型的全限定名

func (*BeanDefinition) Value

func (d *BeanDefinition) Value() reflect.Value

Value 返回 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 ConditionOp

type ConditionOp int

ConditionOp conditionNode 的计算方式

type Conditional

type Conditional struct {
	// contains filtered or unexported fields
}

Conditional Condition 计算式

func NewConditional

func NewConditional() *Conditional

NewConditional Conditional 的构造函数

func (*Conditional) And

func (c *Conditional) And() *Conditional

And c=a&&b

func (*Conditional) Empty

func (c *Conditional) Empty() bool

Empty 返回表达式是否为空

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

func (*Conditional) Or

func (c *Conditional) Or() *Conditional

Or c=a||b

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 的注册规则:

  1. AutoWireBeans 开始后不允许注册新的 Bean(性能考虑)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL