SpringMVC知识图谱
概念:SpringMVC 是一种用于表现层的Web框架
需要的包
javax.servlet-api
spring-webmvc
使用流程
定义 SpringMVC配置类 类似于Spring配置类
定义 Servlet容器配置类,用于启动容器时加载springmvc配置,设置springmvc的处理路径
配置类需 继承 AbstractDispatcherServletInitializer
重写 加载springmvc配置的方法
返回 AnnotationConfigWebApplicationContext
重写 springmvc处理路径的方法
重写 spring的配置方法
启动服务器初始化过程
服务器启动,执行ServletContainersInitConfig类,初始化web容器
执行createServletApplicationContext方法,创建了WebApplicationContext对象
加载SpringMvcConfig执行@ComponentScan加载对应的bean
加载UserController,每个@Requ ...
Spring知识图谱
核心容器
IOC/DI
Bean的配置
Bean的生命周期
Bean的注入
Bean的自动装配
@Autowired 按类型
@Qualifiler 多类型,指定名称注入bean
@Value 自动装备 值
加载属性文件
容器
ApplicationContext
BeanFactory
注解开发模式
配置组件扫描
常用注解
@Component
@Service
@Repository
@Controller
用类配置
@Configuration 标识一个配置类
@ComponentScan 组件扫描定义
@PropertySource 属性文件加载
配置类加载 AnnotationConfigApplicationContext 容器
Bean的@Scope
Bean的生命周期
@PostConstruct
@PreDestory
三方包使用注解注入
自定义get方法返回注入的对象
@Bean 表示上边get返回值就是要添加到容器的Bean
简单类型@Value注入
引用类型写在get 方法参数里,自动注入
多配置类
@Import ...
XLua 协程
通过 util.cs_generator 可以用一个 function 模拟一个IEnumerator,在里头用coroutine.yield,就类似C#里头的yield return。
Lua对接C#协程12345678910111213141516171819local util = require 'xlua.util'local gameobject = CS.UnityEngine.GameObject('Coroutine_Runner') --创建一个空物体,为协程运行器(下面源码分析)CS.UnityEngine.Object.DontDestroyOnLoad(gameobject) --设置加载时不销毁local cs_coroutine_runner = gameobject:AddComponent(typeof(CS.XLuaTest.Coroutine_Runner)) --添加 Coroutine_Runner C#脚本return { --启动 协程运行器的一个协程 start = func ...
xLua热补丁
使用方式第一步:打开该特性
添加HOTFIX_ENABLE宏。
在Unity3D的 Edit > Project Settings > Player > Other Settings > Scripting Define Symbols 下添加
编辑器、各手机平台这个宏要分别设置!如果是自动化打包,要注意在代码里头用API设置的宏是不生效的,需要在编辑器设置。
建议平时开发业务代码不打开HOTFIX_ENABLE,只在build手机版本或者要在编译器下开发补丁时打开HOTFIX_ENABLE
第二步:执行XLua/Generate Code菜单。
第三步: 将XLua包里的Tools文件夹复制到当前项目Assets文件夹同级目录下
第四步:注入
构建手机包这个步骤会在构建时自动进行,编辑器下开发补丁需要手动执行”XLua/Hotfix Inject In Editor”菜单。
打印 “hotfix inject finish!” 或者 “had injected!” 才算成功,否则会打印错误信息。
如果已经打印了“hotfix in ...
xLua的配置
xLua所有的配置都支持三种方式:打标签;静态列表;动态列表。
配置有两必须两建议:
列表方式 均必须是static的字段/属性
列表方式 均必须放到一个static类
建议不用标签方式
建议列表方式配置放Editor目录(如果是Hotfix配置,而且类位于Assembly-CSharp.dll之外的其它dll,必须放Editor目录)
方法1:打标签xLua用白名单来指明生成哪些代码,而白名单通过attribute来配置。
你想从lua调用c#的某个类,希望生成适配代码,你可以为这个类型打一个LuaCallCSharp标签:
1234567[LuaCallCSharp]publicclassA{}
该方式方便,但在il2cpp下会增加不少的代码量,不建议使用。
方法2:静态列表有时我们无法直接给一个类型打标签,比如系统API,没源码的库,或者实例化的泛化类型。
这时你可以在一个静态类里声明一个静态字段,该字段的类型除 BlackList 和 AdditionalProperties 之外只要实现了IEnumerable<Type>就可以 ...
Lua文件加载
执行字符串
最基本是直接用LuaEnv.DoString执行一个字符串,当然,字符串得符合Lua语法比如:
luaenv.DoString("print('hello world')")
完整代码见XLua\Tutorial\LoadLuaScript\ByString目录
但这种方式并不建议,更建议下面介绍这种方法。
加载Lua文件
用lua的require函数即可比如:
DoString("require 'byfile'")
完整代码见XLua\Tutorial\LoadLuaScript\ByFile目录
require实际上是调一个个的loader去加载,有一个成功就不再往下尝试,全失败则报文件找不到。目前xLua除了原生的loader外,还添加了从Resource加载的loader,需要注意的是因为Resource只支持有限的后缀,放Resources下的lua文件得加上txt后缀(见附带的例子)。
建议的加载Lua脚本方式是:整个程序就一个DoString(“require ‘main’” ...
Lua调用C#
本章节涉及到的实例均在XLua\Tutorial\LuaCallCSharp下
new C#对象你在C#这样new一个对象:
var newGameObj = new UnityEngine.GameObject();
对应到Lua是这样:
local newGameObj = CS.UnityEngine.GameObject()
基本类似,除了:
1. lua里头没有new关键字;
2. 所有C#相关的都放到CS下,包括构造函数,静态成员属性、方法;
如果有多个构造函数呢?放心,xlua支持重载,比如你要调用GameObject的带一个string参数的构造函数,这么写:
local newGameObj2 = CS.UnityEngine.GameObject('helloworld')
访问C#静态属性,方法读静态属性CS.UnityEngine.Time.deltaTime
写静态属性CS.UnityEngine.Time.timeScale = 0.5
调用静态方法CS.UnityEngine.GameObject.Find('hel ...
C#访问Lua
这里指的是C#主动发起对Lua数据结构的访问。本章涉及到的例子都可以在XLua\Tutorial\CSharpCallLua下找到。
获取一个全局基本数据类型访问LuaEnv.Global就可以了,上面有个模版Get方法,可指定返回的类型。
123luaenv.Global.Get<int>("a")luaenv.Global.Get<string>("b")luaenv.Global.Get<bool>("c")
访问一个全局的table也是用上面的Get方法,那类型要指定成啥呢?
映射到普通Class或Struct
定义一个class,有对应于table的字段的public属性,而且有无参数构造函数即可,比如对于{f1 = 100, f2 = 100}可以定义一个包含public int f1;public int f2;的class。这种方式下xLua会帮你new一个实例,并把对应的字段赋值过去。
table的属性可以多于或者少于class的属性。可以嵌套其它复 ...
创建型模式
定义:
创建型模式(Creational Pattern)是设计模式的一种,它主要关注如何创建对象或者实例化一个类。在软件开发中,创建对象的过程经常会涉及到复杂的初始化步骤、依赖关系以及对象本身的构建方式等问题,而创建型模式就是为了解决这些问题而存在的。
工厂模式 Factory Pattern
简单工厂模式
方法工厂模式 (Factory Method Pattern)
抽象工厂模式 (Abstract Factory Pattern)
单例模式 (Singleton Pattern)建造者模式 (Builder Pattern)原型模式 (Prototype Pattern)
单例模式
定义单例模式是一种创建型设计模式,它保证一个类只有一个实例,并提供一个全局访问点。单例模式的目的是为了解决类的对象创建过程中出现的问题
分类饿汉式特点:饿汉式单例模式在类加载时就已经创建了实例,因此可以确保线程安全。
实现:
123456789101112public class Singleton<T> where T:new(){ private static readonly T instance = new T(); private T() {} public static T GetInstance() { return instance; }}
优点
饿汉式单例模式可以确保在程序运行期间只有一个实例对象存在,因此可以避免频繁创建和销毁对象占用系统资源的问题。
饿汉式单例模式在类加载时就已经创建了实例,因此可以确保线程安全,不需要考虑多线程访问时可能会出现的线程安全性问题。
缺点
在程序启动时就创建实例对象可能会过早地占用系统资源,这样可能会影响程序的启动速 ...