用户代码与Spring的交互形式,你有总结过吗?
PS:教科书般的文章太多了,我要追求与众不同,注意是追求。授人以鱼不如授人以渔。
相关文章
如何慢慢地快速成长起来?
你是如何看待Spring容器的,是这样子吗?
👉§认真思考,才能理解深刻
我们经常会说我在开发中用到了Spring,这句话没问题。但仔细思考下,也可以说成我写的代码用到了Spring,是不是觉得瞬间开启了一种新的思维。
我们经常会说把某个类注册到Spring中,这话也没毛病。但也可以说成我告诉Spring让她帮我把这个类注册一下。是不是觉得很新奇啊。
👉§命令式,声明式
无论是科班码农还是半路出家,其实都是从命令式代码开撸的。
一是自己一行一行的写代码,实现一个功能,特有成就感。
二是码农都是基层劳动者,没有权利指挥别人,只能自己干。
这其实就是命令式的,缺点是比较耗时。
终于有一天遇到了SQL,码农翻身成了主人。
只要写一条SQL语句表明我的意图即可,不用关心如何执行的细节。
很爽,这就是声明式的,优点是省时省力。
这下变被动为主动了,角色反转。所以声明式的事物都会慢慢火起来。
整体来说我只需发号施令,然后坐等结果就行了。所以外卖行业火了。
Spring通过注解来支持声明式,所以我们并没有做什么,只是告诉Spring我们想做什么。
如果这些都明白,下面的内容就很轻松了。
👉§让Spring帮你存
存入Spring里的类一般都叫做bean或组件。
在@Configuration类里使用@Bean方法就声明了想要把一个类注册为bean,同时这个@Configuration类自身也会被注册为bean。
可以认为@Configuration类就相当于一个bean源,主要作用就是向容器里贡献bean定义。
另外一种方式就是在类定义上使用@Component,声明了想要把该类注册为一个普通的组件。它有三个好哥们,就是@Repository、@Service、@Controller。用法一样,功能上各有侧重。
以上这些注解都是Spring自己的注解,除此之外,还支持JSR的注解,如@ManagedBean和@Named,与@Component语义相同。
主要是因为Java开源社区的发展倒逼Java的发展,所以Java的有些东西是从社区中吸收过来的。
👉§让Spring帮你取
其实就是依赖注入啦。Spring提供了@Autowired注解,来执行按类型的注入,如果出现同种类型的多个候选bean,配合使用@Qualifier来进行名称限定即可。也可以把多个候选bean中的一个标记@Primary注解,表明它是主要候选bean。
也可以使用JSR的@Resource注解,需要注意的是Spring把它解释为按照名称进行注入的。
还可以使用JSR的@Inject注解,与@Autowired语义相同。
👉§让Spring帮你做
Spring除了可以帮你存取bean之外,还可以帮你做一些事情。例如定时任务。
在@Configuration类上使用@EnableScheduling注解启用定时任务功能,然后使用@Scheduled注解标记想要被定时执行的方法即可。
👉§让Spring来增强
Spring可以使用JDK动态代理或CGLIB来生成代理,对用户代码进行增强。使用最广泛的应该是声明式事务了。
在@Service类上使用@Transactional注解即可开启。
PS:重要的不是内容,而是思考方式。
(完)
编程新说
用独特的视角说技术