autocall

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

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

[componentscan(scanpath="atesta::ioca",scansuffix=".rs",scanmacro="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!("test bibao"); }); }

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

[bean]

pub fn set_aopb()->Box<(dyn Fn(Vec>) + Send + Sync )>{ return Box::new(|r:Vec>|{ println!("test bibaobbbbb"); }); } ```

More patterns and use-cases are in the docs!

Related crates