SpringBoot

package
v1.0.2 Latest Latest
Warning

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

Go to latest
Published: Mar 24, 2020 License: Apache-2.0 Imports: 13 Imported by: 26

README

spring-boot

开箱即用的 Go-Spring 程序启动框架。

import (
	"fmt"
	"os"
	"testing"
	"time"

	"github.com/go-spring/go-spring/spring-boot"
	"github.com/go-spring/go-spring/spring-core"
)

func init() {
	SpringBoot.RegisterBean(new(MyRunner))
	SpringBoot.RegisterBeanFn(NewMyModule, "${message}")
}

func TestRunApplication(t *testing.T) {
	os.Setenv(SpringBoot.SPRING_PROFILE, "test")
	SpringBoot.RunApplication("testdata/config/", "k8s:testdata/config/config-map.yaml")
}

////////////////// MyRunner ///////////////////

type MyRunner struct {
	Ctx SpringCore.SpringContext `autowire:""`
}

func (r *MyRunner) Run() {
	fmt.Println("get all properties:")
	for k, v := range r.Ctx.GetAllProperties() {
		fmt.Println(k + "=" + fmt.Sprint(v))
	}
}

////////////////// MyModule ///////////////////

type MyModule struct {
	msg string
}

func NewMyModule(msg string) *MyModule {
	return &MyModule{
		msg: msg,
	}
}

func (m *MyModule) OnStartApplication(ctx SpringBoot.ApplicationContext) {
	fmt.Println("MyModule start")

	var e *MyModule
	ctx.GetBean(&e)
	fmt.Printf("event: %+v\n", e)

	ctx.SafeGoroutine(Process)
}

func (m *MyModule) OnStopApplication(ctx SpringBoot.ApplicationContext) {
	fmt.Println("MyModule stop")
}

func Process() {

	defer fmt.Println("go stop")
	fmt.Println("go start")

	var m *MyModule
	SpringBoot.GetBean(&m)
	fmt.Printf("process: %+v\n", m)

	time.Sleep(200 * time.Millisecond)

	SpringBoot.Exit()
}

Documentation

Overview

开箱即用的 Go-Spring 程序启动框架。

Index

Constants

View Source
const (
	DefaultConfigLocation = "config/" // 默认的配置文件路径

	SpringAccess   = "spring.access" // "all" 为允许注入私有字段
	SPRING_ACCESS  = "SPRING_ACCESS"
	SpringProfile  = "spring.profile" // 运行环境
	SPRING_PROFILE = "SPRING_PROFILE"
	SpringStrict   = "spring.strict" // 严格模式,"true" 必须使用 AsInterface() 导出接口
	SPRING_STRICT  = "SPRING_STRICT"
)

Variables

View Source
var DefaultWebMapping = NewWebMapping()

DefaultWebMapping 默认的 Web 路由映射表

Functions

func AllAccess

func AllAccess() bool

AllAccess 返回是否允许访问私有字段

func BindProperty

func BindProperty(key string, i interface{})

BindProperty 根据类型获取属性值,属性名称统一转成小写。

func BindPropertyIf

func BindPropertyIf(key string, i interface{}, allAccess bool)

BindPropertyIf 根据类型获取属性值,属性名称统一转成小写。

func CollectBeans

func CollectBeans(i interface{}) bool

CollectBeans 收集数组或指针定义的所有符合条件的 Bean 对象,收集到返回 true,否则返回 false。

func Exit

func Exit()

Exit 退出 SpringBoot 应用

func FindBean

func FindBean(selector interface{}) (*SpringCore.BeanDefinition, bool)

FindBean 获取单例 Bean,若多于 1 个则 panic;找到返回 true 否则返回 false。 selector 可以是 BeanId,还可以是 (Type)(nil) 变量,Type 为接口类型时带指针。

func FindBeanByName

func FindBeanByName(beanId string) (*SpringCore.BeanDefinition, bool)

FindBeanByName 根据名称和类型获取单例 Bean,若多于 1 个则 panic;找到返回 true 否则返回 false。

func GetBean

func GetBean(i interface{}) bool

GetBean 根据类型获取单例 Bean,若多于 1 个则 panic;找到返回 true 否则返回 false。

func GetBeanByName

func GetBeanByName(beanId string, i interface{}) bool

GetBeanByName 根据名称和类型获取单例 Bean,若多于 1 个则 panic;找到返回 true 否则返回 false。

func GetBeanDefinitions

func GetBeanDefinitions() []*SpringCore.BeanDefinition

GetBeanDefinitions 获取所有 Bean 的定义,一般仅供调试使用。

func GetBoolProperty

func GetBoolProperty(keys ...string) bool

GetBoolProperty 返回布尔型属性值,属性名称统一转成小写。

func GetDefaultProperty

func GetDefaultProperty(key string, def interface{}) (interface{}, bool)

GetDefaultProperty 返回属性值,如果没有找到则使用指定的默认值,属性名称统一转成小写。

func GetDurationProperty

func GetDurationProperty(keys ...string) time.Duration

GetDurationProperty 返回 Duration 类型属性值,属性名称统一转成小写。

func GetFloatProperty

func GetFloatProperty(keys ...string) float64

GetFloatProperty 返回浮点型属性值,属性名称统一转成小写。

func GetIntProperty

func GetIntProperty(keys ...string) int64

GetIntProperty 返回有符号整型属性值,属性名称统一转成小写。

func GetPrefixProperties

func GetPrefixProperties(prefix string) map[string]interface{}

GetPrefixProperties 返回指定前缀的属性值集合,属性名称统一转成小写。

func GetProfile

func GetProfile() string

GetProfile 返回运行环境

func GetProperties

func GetProperties() map[string]interface{}

GetProperties 返回所有的属性值,属性名称统一转成小写。

func GetProperty

func GetProperty(keys ...string) interface{}

GetProperty 返回属性值,属性名称统一转成小写。

func GetStringProperty

func GetStringProperty(keys ...string) string

GetStringProperty 返回字符串型属性值,属性名称统一转成小写。

func GetTimeProperty

func GetTimeProperty(keys ...string) time.Time

GetTimeProperty 返回 Time 类型的属性值,属性名称统一转成小写。

func GetUintProperty

func GetUintProperty(keys ...string) uint64

GetUintProperty 返回无符号整型属性值,属性名称统一转成小写。

func NewConfigMapPropertySource

func NewConfigMapPropertySource(filename string) *configMapPropertySource

NewConfigMapPropertySource configMapPropertySource 的构造函数

func NewDefaultPropertySource

func NewDefaultPropertySource(fileLocation string) *defaultPropertySource

NewDefaultPropertySource defaultPropertySource 的构造函数

func RegisterBean

func RegisterBean(bean interface{}) *SpringCore.BeanDefinition

RegisterBean 注册单例 Bean,不指定名称,重复注册会 panic。

func RegisterBeanFn

func RegisterBeanFn(fn interface{}, tags ...string) *SpringCore.BeanDefinition

RegisterBeanFn 注册单例构造函数 Bean,不指定名称,重复注册会 panic。

func RegisterMethodBean

func RegisterMethodBean(selector interface{}, method string, tags ...string) *SpringCore.BeanDefinition

RegisterMethodBean 注册成员方法单例 Bean,不指定名称,重复注册会 panic。 selector 可以是 *BeanDefinition,可以是 BeanId,还可以是 (Type)(nil) 变量。 必须给定方法名而不能通过遍历方法列表比较方法类型的方式获得函数名,因为不同方法的类型可能相同。 而且 interface 的方法类型不带 receiver 而成员方法的类型带有 receiver,两者类型不好匹配。

func RegisterNameBean

func RegisterNameBean(name string, bean interface{}) *SpringCore.BeanDefinition

RegisterNameBean 注册单例 Bean,需指定名称,重复注册会 panic。

func RegisterNameBeanFn

func RegisterNameBeanFn(name string, fn interface{}, tags ...string) *SpringCore.BeanDefinition

RegisterNameBeanFn 注册单例构造函数 Bean,需指定名称,重复注册会 panic。

func RegisterNameMethodBean

func RegisterNameMethodBean(name string, selector interface{}, method string, tags ...string) *SpringCore.BeanDefinition

RegisterNameMethodBean 注册成员方法单例 Bean,需指定名称,重复注册会 panic。 selector 可以是 *BeanDefinition,可以是 BeanId,还可以是 (Type)(nil) 变量。 必须给定方法名而不能通过遍历方法列表比较方法类型的方式获得函数名,因为不同方法的类型可能相同。 而且 interface 的方法类型不带 receiver 而成员方法的类型带有 receiver,两者类型不好匹配。

func RunApplication

func RunApplication(configLocation ...string)

RunApplication 快速启动 SpringBoot 应用

func SetAllAccess

func SetAllAccess(allAccess bool)

SetAllAccess 设置是否允许访问私有字段

func SetEventNotify

func SetEventNotify(notify func(event SpringCore.ContextEvent))

SetEventNotify 设置 Context 事件通知函数

func SetProfile

func SetProfile(profile string)

SetProfile 设置运行环境

func SetProperty

func SetProperty(key string, value interface{})

SetProperty 设置属性值,属性名称统一转成小写。

func WireBean

func WireBean(bean interface{})

WireBean 绑定外部的 Bean 源

Types

type ApplicationContext

type ApplicationContext interface {
	SpringCore.SpringContext

	// SafeGoroutine 安全地启动一个 goroutine
	SafeGoroutine(fn GoFunc)

	// Wait 等待所有 goroutine 退出
	Wait()
}

ApplicationContext Application 上下文

type ApplicationEvent

type ApplicationEvent interface {
	OnStartApplication(ctx ApplicationContext) // 应用启动的事件
	OnStopApplication(ctx ApplicationContext)  // 应用停止的事件
}

ApplicationEvent 应用运行过程中的事件

type CommandLineRunner

type CommandLineRunner interface {
	Run(ctx ApplicationContext)
}

CommandLineRunner 命令行启动器接口

type GoFunc

type GoFunc func()

type Mapping

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

Mapping 封装 Web 路由映射

func DeleteMapping

func DeleteMapping(path string, fn SpringWeb.Handler) *Mapping

DeleteMapping

func GetMapping

func GetMapping(path string, fn SpringWeb.Handler) *Mapping

GetMapping

func NewMapping

func NewMapping(mapper *SpringWeb.Mapper) *Mapping

NewMapping Mapping 的构造函数

func PatchMapping

func PatchMapping(path string, fn SpringWeb.Handler) *Mapping

PatchMapping

func PostMapping

func PostMapping(path string, fn SpringWeb.Handler) *Mapping

PostMapping

func PutMapping

func PutMapping(path string, fn SpringWeb.Handler) *Mapping

PutMapping

func RequestMapping

func RequestMapping(method uint32, path string, fn SpringWeb.Handler) *Mapping

RequestMapping

func (*Mapping) And

func (m *Mapping) And() *Mapping

And c=a&&b

func (*Mapping) ConditionNot

func (m *Mapping) ConditionNot(cond SpringCore.Condition) *Mapping

ConditionNot 设置一个取反的 Condition

func (*Mapping) ConditionOn

func (m *Mapping) ConditionOn(cond SpringCore.Condition) *Mapping

ConditionOn 设置一个 Condition

func (*Mapping) ConditionOnBean

func (m *Mapping) ConditionOnBean(selector interface{}) *Mapping

ConditionOnBean 设置一个 BeanCondition

func (*Mapping) ConditionOnExpression

func (m *Mapping) ConditionOnExpression(expression string) *Mapping

ConditionOnExpression 设置一个 ExpressionCondition

func (*Mapping) ConditionOnMatches

func (m *Mapping) ConditionOnMatches(fn SpringCore.ConditionFunc) *Mapping

ConditionOnMatches 设置一个 FunctionCondition

func (*Mapping) ConditionOnMissingBean

func (m *Mapping) ConditionOnMissingBean(selector interface{}) *Mapping

ConditionOnMissingBean 设置一个 MissingBeanCondition

func (*Mapping) ConditionOnMissingProperty

func (m *Mapping) ConditionOnMissingProperty(name string) *Mapping

ConditionOnMissingProperty 设置一个 MissingPropertyCondition

func (*Mapping) ConditionOnProfile

func (m *Mapping) ConditionOnProfile(profile string) *Mapping

ConditionOnProfile 设置一个 ProfileCondition

func (*Mapping) ConditionOnProperty

func (m *Mapping) ConditionOnProperty(name string) *Mapping

ConditionOnProperty 设置一个 PropertyCondition

func (*Mapping) ConditionOnPropertyValue

func (m *Mapping) ConditionOnPropertyValue(name string, havingValue interface{}) *Mapping

ConditionOnPropertyValue 设置一个 PropertyValueCondition

func (*Mapping) Doc

func (m *Mapping) Doc() string

Doc 返回接口文档

func (*Mapping) FilterNames

func (m *Mapping) FilterNames() []string

FilterNames 返回过滤器列表

func (*Mapping) Filters

func (m *Mapping) Filters() []SpringWeb.Filter

Filters 返回 Mapper 的过滤器列表

func (*Mapping) Handler

func (m *Mapping) Handler() SpringWeb.Handler

Handler 返回 Mapper 的处理函数

func (*Mapping) Key

func (m *Mapping) Key() string

Key 返回 Mapper 的标识符

func (*Mapping) Matches

func (m *Mapping) Matches(ctx SpringCore.SpringContext) bool

Matches 成功返回 true,失败返回 false

func (*Mapping) Method

func (m *Mapping) Method() uint32

Method 返回 Mapper 的方法

func (*Mapping) Or

func (m *Mapping) Or() *Mapping

Or c=a||b

func (*Mapping) Path

func (m *Mapping) Path() string

Path 返回 Mapper 的路径

func (*Mapping) Port

func (m *Mapping) Port() int

Port 返回路由的端口

func (*Mapping) SetDoc

func (m *Mapping) SetDoc(doc string) *Mapping

SetDoc 设置接口文档

func (*Mapping) SetFilterNames

func (m *Mapping) SetFilterNames(filterNames ...string) *Mapping

SetFilterNames 设置过滤器列表

func (*Mapping) SetFilters

func (m *Mapping) SetFilters(filters ...SpringWeb.Filter) *Mapping

Filters 设置 Mapper 的过滤器列表

func (*Mapping) SetPort

func (m *Mapping) SetPort(port int) *Mapping

SetPort 设置路由的端口

type Router

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

Router 路由分组

func NewRouter

func NewRouter(mapping *WebMapping, basePath string) *Router

NewRouter Router 的构造函数

func Route

func Route(basePath string) *Router

Route 返回和 Mapping 绑定的路由分组

func (*Router) And

func (r *Router) And() *Router

And c=a&&b

func (*Router) ConditionNot

func (r *Router) ConditionNot(cond SpringCore.Condition) *Router

ConditionNot 设置一个取反的 Condition

func (*Router) ConditionOn

func (r *Router) ConditionOn(cond SpringCore.Condition) *Router

ConditionOn 设置一个 Condition

func (*Router) ConditionOnBean

func (r *Router) ConditionOnBean(selector interface{}) *Router

ConditionOnBean 设置一个 BeanCondition

func (*Router) ConditionOnExpression

func (r *Router) ConditionOnExpression(expression string) *Router

ConditionOnExpression 设置一个 ExpressionCondition

func (*Router) ConditionOnMatches

func (r *Router) ConditionOnMatches(fn SpringCore.ConditionFunc) *Router

ConditionOnMatches 设置一个 FunctionCondition

func (*Router) ConditionOnMissingBean

func (r *Router) ConditionOnMissingBean(selector interface{}) *Router

ConditionOnMissingBean 设置一个 MissingBeanCondition

func (*Router) ConditionOnMissingProperty

func (r *Router) ConditionOnMissingProperty(name string) *Router

ConditionOnMissingProperty 设置一个 MissingPropertyCondition

func (*Router) ConditionOnProfile

func (r *Router) ConditionOnProfile(profile string) *Router

ConditionOnProfile 设置一个 ProfileCondition

func (*Router) ConditionOnProperty

func (r *Router) ConditionOnProperty(name string) *Router

ConditionOnProperty 设置一个 PropertyCondition

func (*Router) ConditionOnPropertyValue

func (r *Router) ConditionOnPropertyValue(name string, havingValue interface{}) *Router

ConditionOnPropertyValue 设置一个 PropertyValueCondition

func (*Router) DELETE

func (r *Router) DELETE(path string, fn SpringWeb.Handler) *Mapping

DELETE 注册 DELETE 方法处理函数

func (*Router) GET

func (r *Router) GET(path string, fn SpringWeb.Handler) *Mapping

GET 注册 GET 方法处理函数

func (*Router) HEAD

func (r *Router) HEAD(path string, fn SpringWeb.Handler) *Mapping

HEAD 注册 HEAD 方法处理函数

func (*Router) OPTIONS

func (r *Router) OPTIONS(path string, fn SpringWeb.Handler) *Mapping

OPTIONS 注册 OPTIONS 方法处理函数

func (*Router) Or

func (r *Router) Or() *Router

Or c=a||b

func (*Router) PATCH

func (r *Router) PATCH(path string, fn SpringWeb.Handler) *Mapping

PATCH 注册 PATCH 方法处理函数

func (*Router) POST

func (r *Router) POST(path string, fn SpringWeb.Handler) *Mapping

POST 注册 POST 方法处理函数

func (*Router) PUT

func (r *Router) PUT(path string, fn SpringWeb.Handler) *Mapping

PUT 注册 PUT 方法处理函数

func (*Router) Request

func (r *Router) Request(method uint32, path string, fn SpringWeb.Handler) *Mapping

Request 注册任意 HTTP 方法处理函数

func (*Router) SetFilterNames

func (r *Router) SetFilterNames(filterNames ...string) *Router

SetFilterNames 设置过滤器列表

func (*Router) SetFilters

func (r *Router) SetFilters(filters ...SpringWeb.Filter) *Router

Filters 设置过滤器列表

func (*Router) SetPort

func (r *Router) SetPort(port int) *Router

SetPort 设置路由的端口

type WebMapping

type WebMapping struct {
	Mappings map[string]*Mapping
}

WebMapping Web 路由映射表

func NewWebMapping

func NewWebMapping() *WebMapping

NewWebMapping WebMapping 的构造函数

func (*WebMapping) Request

func (m *WebMapping) Request(method uint32, path string, fn SpringWeb.Handler) *Mapping

Request

Jump to

Keyboard shortcuts

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