Spring注解式编程的思考

Spring为了方面我们的开发,提供了许多简单且很方便的注解,比如@PostConstruct, @PreDestroy, @Autowired, @Aspect相关的注解等等。
这些注解使用起来确实很方便,但是无论我在看Spring相关的源码,或者看其他依赖Spring框架的项目的源码时,都发现,他们的源码里对这些注解使用的非常少,反而,他们更喜欢InitializingBean, DisposableBean, DefaultPointcutAdvisor等等具有相同功能的接口或类来代替Spring的注解,所以,我想问问大家,更倾向于哪种方式。
写业务代码时,我个人更喜欢注解式编程,它会让我的业务代码很清晰,更简洁,而当我在编写框架代码时,我更倾向于第二种,虽然注解的方式更加简洁,但是我个人的理解是注解往往是通过反射的方式去实现的,在性能方面毕竟没有直接的实现方式效率高,我想听听大家的看法

不要抬杠么:joy:,,既然使用了框架,就要充分发挥框架的优势,学习框架的优点。其实这些注解,你如果看Spring源码就会发现,无论是各个子项目,它自己都很少使用,除了@Configuration, @Bean这些必要的注解,对于Spring提供的编程方式,要学会去思考,而不是仅仅局限于会用。

@Autowired @Aspect 是框架提供给用户使用的。框架本身肯定不会去使用。

这个说法不太对哦,你去看看Spring的子项目或依赖Spring的项目,比如Spring-Redis, Spring-MyBatis, Spring-Web等等很多依赖Spring的项目,在大多数情况下,都没有使用注解式编程,,既然这些注解更加方便,为什么其他依赖Spring的项目不使用,而是采用的直接实现的方式

比如spring-jdbc的事务控制@Transactional, 并没有使用@Aspect注解方式实现拦截,而是采用传统代码方式,实现事务控制。又比如当在某个类里想获取Environment时,也没有直接使用@Autowire注入,而是采用EnvironmentAware接口来获取,,这些明明更简洁的注解,SpingBoot等等依赖Spring的项目却没使用

我也没法解释这些东西。我只是觉得, @Autowired @Aspect 这些注解都是给用户使用的。框架本身也不知道要从哪些目录去扫描,加载组键,配置。所以它不会用,我想这是一种约定吧。

嗯嗯,我并没有不推荐使用注解式编程,只是思考而已,在写业务代码时,我经常使用注解式编程,为了减少代码量,也让代码更清晰,,但是我个人在写框架代码时,我比较倾向于直接实现的方式,在性能上,我个人觉得更高一点,只是和大家探讨下!

1 个赞