-
Notifications
You must be signed in to change notification settings - Fork 52
Home
俞正东 edited this page Jan 13, 2023
·
23 revisions
Welcome to the Autofac.Annotation wiki!
大家好,欢迎关注autofac.Annotation项目,几年前公司转java技术栈接触到了Spring项目,很优秀,源码嚼了很多遍于是很想尝试把这套东西用在.net平台上。社区有个Spring.net项目已经多年不维护了,而且还是xml配置模式非基于注解的,无法与现有的SpringBoot项目同日而语。在SpringBoot项目中的常用的注解和扩展机制我都在这个项目中实现了,可以看下面介绍的已实现的功能一览!
- Annotdation是注解的意思,在java项目里面 注解的概念和 csharp里面的 Attribute 的概念是一样的。
- 本项目是基于Autofac(巨人的肩膀)的基础之上构建,选择用Autofac是它扩展性非常好,在实现Spring的细节上提供了便捷
- 本项目的所有实现都参考Spring的设计思想,但是并不是纯粹的把java的代码换成csharp,功能上效果是和Spring看齐的,但代码实现上是自己实现的
基于参考 Java的 Spring注解方式开发思想,
所有autofac容器的注册 和 装配 都是依赖标签来完成。
这样一来 一方面很容易分清楚 哪些是DI 哪些非DI, 哪些是拦截器,哪些需要拦截器,轻松实现切面编程, 代码也好看,吸收java的spring框架的优越的地方,配合.net语法的优越性,编程效率能够大大提升,具体体现在:
- 控制反转(IOC)的思想,运用依赖注入(DI)的技术,让我们管理对象的时候再也不用new new new了!防止大量对象的创建!防止组件之间的强依赖!
- AOP(面向切面编程)技术,能够使用少量代码搭建完美的的日志管理,权限管理,运行期监控!
- 低耦合特性:通过依赖注入特性,可以借助容器创建,管理对象,防止在代码中硬性注入对象,防止对象混乱!
标签名称 | 使用位置 | 使用说明 |
---|---|---|
AutoConfiguration | 打在class上面 | 自动装配class里面带有Bean标签的方法 |
Bean | 打在方法上面 | 配合AutoConfiguration标签使用 |
Component | 打在class上面 | 自动注册 |
Autowired | 打在构造方法的Parameter,类的Property,类的Field,类的方法 | 自动装配 |
PropertySource | 打在class上面 | 配合Value标签使用,设置Value的数据源,支持静态比如json,xml,支持资源内嵌,也支持动态数据源(比如nacos) |
Value | 打在构造方法的Parameter,类的Property,类的Field | 静态/动态(例如nacos)数据装配,支持强大的EL表达式 |
Pointcut | 打在class上面 | 切面配置,一个切面拦截N多个对象,配合Before After AfterReturn AfterThrows Around 实现拦截器链 |
Import | 打在继承了ImportSelector的class上面 | 扩展注册Component |
Order | 打在了class上面,和Compoment一起使用 | 值越小的越先加载 |
Conditional | 打在class或者方法上面 | 条件加载,自定义实现的 |
ConditionOnBean | 打在标有Bean注解的方法上面 | 条件加载 |
ConditionOnMissingBean | 打在标有Bean注解的方法上面 | 条件加载 |
ConditionOnClass | 打在class或者方法上面 | 条件加载 |
ConditionOnMissingClass | 打在class或者方法上面 | 条件加载 |
ConditionOnProperty | 打在class或者方法上面 | 条件加载 |
ConditionOnProperties | 打在class或者方法上面 | 条件加载 |
PostConstruct | 打在方法上面 | 当类初始化完成后调用 |
PreDestory | 打在方法上面 | 当容器Dispose前调用 |
DependsOn | 可以配合Bean和Component使用 | A的实例化依赖另一个B的实例化,但是A并不需要持有一个B的对象 |