autoload

autoload 基于 singlemap 实现 ioc aop autowired,更方便的集成库之间的使用: 包含 #[bean] #[aop] #[component_scan]

```rust // 展开 // macrorules! defsingle { // () => { // singleget_unwrap!( "defsingle", EntityObj) // }; // } #[autowired] static defsingle: Option = None;

// autocall::libs 是 autocall 上传的自动装配包 //扫描自动配置,快速集成组件 比如 src/starterlibs/mod.rs 默认自动调用 crate::starterlibs::actix-web-starter::loading();

[starterscan(scanpath="autocall::libs",lib_name="log4rs-starter,rbatis-starter,actix-web-starter")]

pub fn scanautoloading(){ //用来承载扫描内容的载体 }

//扫描 atesta::ioca路径下 scanmacro="bean" 使用bean宏标记的函数,扫描的内容会根据 调用宏componentscan的crate位置作为基础坐标,不用担心发布的crate扫描路径不正确的情况

[componentscan(scanpath="atesta::ioca",scan_macro="bean")]

pub fn lading(){ println!("crateiocpath!() test"); let a = singlegetunwrap!("get_bec",String); println!("输出参数:{:?}",a); }

//加载了一个bean

[bean]

pub fn get_bec()->String{ println!("加载了一个组件"); String::from("99999") }

//标记切入的bean

[aop(firstbean="setaopa",lastbean="setaopb")]

pub fn setaohhhhh(a:&String,b:&String)->String{ println!("setaohhhhh:{:?}",a); return String::from("888899"); }

//位于函数执行前获取到参数

[bean]

pub fn set_aopa()->Box<(dyn Fn(Vec>) + Send + Sync )>{ return Box::new(|r:Vec>|{ println!("打印头部内容:{:?}",r); println!("test bibao"); }); }

//位于函数执行后获取到参数

[bean]

pub fn set_aopb()->Box<(dyn Fn(Vec>) + Send + Sync )>{ return Box::new(|r:Vec>|{ println!("打印尾部内容:{:?}",r); println!("test bibaobbbbb"); }); } ```

More patterns and use-cases are in the docs!

Related crates