揭开Spring的神秘面纱(下)

4、解密Spring框架——回头再来理解IOC/DI和Bean的创建

IOC/DI:代码本质上基于Java反射原理实现。

最简单的理解:之前传统的做法是,在调用者中创建(New)被调用者,导致类与类之间高度耦合。现在Spring的做法是通过外部注入依赖,实例不在由我们调用者主动进行实例化,而是通过IOC容器帮我们创建指定实例并且将实例注入到所需要的调用者,也就是被动注入,由容器进行注入组合对象,所以对象与对象之间是松耦合,也利于功能的复用。这就是所谓的IOC/DI。

理解的关键是:谁依赖谁,为什么需要依赖,谁注入谁,注入了什么。

  • 谁依赖于谁:当然是应用程序依赖于IOC容器。
  • 为什么需要依赖:应用程序需要IOC容器来提供对象需要的外部资源。
  • 谁注入谁:很明显是IOC容器注入应用程序某个对象,应用程序依赖对象。
  • 注入了什么:就是注入某个对象所需要的外部资源(包括对象,资源,常量数据)

5、这是最后的问题了,Bean何时被创建了呢?

重点:日志开放到Debug级别,让我们来启动程序找找看!!!

也就是容器初期化时立即创建对象。当然,也可以延迟加载,在用到的时候再创建,有个属性beans default-lazy-init=“true”可以设置。

PS:Spring创建对象有三种方式,这里就不讲了,感兴趣的可以上网查查。

作用域:

  • Singleton(默认)——只会存在一个共享的Bean实例,也就是说IOC容器只会创建该Bean定义的唯一实例。
  • Prototype——每次请求(调用bean方法)会产生新的bean实例,相当于new操作。

5、解密Spring框架——AOP是什么,你不知道而又常见的具体实现是什么

AOP:面向切面编程,本质上是基于动态代理实现的(代理模式)。再挖的深一点,还是Java的反射。

AOP基本概念很好理解,就是在正常业务处理流程代码之外,切入一些其他的共同业务逻辑代码,但这些代码并不冗余在正常业务逻辑处理之中,提高代码的复用性的同时降低耦合度。

AOP自身的核心概念和早期流行用Aspect实现就不详细讲了,主要就是用before和after-returning创建前置通知、后置通知和环绕通知等。大家可以具体上网查查,资料非常多。

除了Aspect,Filter和Interceptor其实也是AOP的具体实现的方式,是不是既熟悉又陌生。

问题:Filter、Interceptor和AOP的区别是什么?执行先后顺序又是什么样子的?

区别:

  •   Filter主要处理最初的http请求,看程序是否要接受该请求。
  •   Interceptor主要控制请求控制器和里面的方法,也就是Controller
  •   层,但是无法继续深入控制,比如控制请求方法的参数。
  •   Aspect可以自定义切入点,所以最灵活,可以更深入控制,主要用于  业务层Service控制。

执行顺序:

  • 一个请求过来之后,先Filter过滤。
  • 然后程序中拦截器进行处理。
  • 最后处理完后,被AOP动态代理重新编译过的主要业务类进行处理。

6、解密Spring框架——Spring常用注解解密

  • @Configuration(定义配置类,可替换xml配置文件)
  • @ComponentScan(专用于扫描@Component的类加入到IOC容器中)
  • @Component(一个元注解,意思是可以注解其他类注解,如@Controller、@Service、@Repository。此注解的类被看作组件,当使用基于注解的配置和类路径扫描的时候,这些类就会被实例化)
  • @Bean(替代 XML 元素<bean>)
  • @Autowired(Bean的依赖注入,默认是byType)
  • @Value(为变量和方法参数指定默认值,也用来读取Spring环境变量和系统变量)

最后,欢迎扫码加入星球《极客e家》,星球里,大咖云集,我们将一起打造极客文化。在这里,您将体会到:

【科技动态】:我们聚焦软件技术发展趋势和行业最新动态,尤其ChatGPT这波的AI风向标,让您轻松掌握一手科技资讯。

【共同成长】:除了传统的【系列课程 & 面试】栏目之外,我们还将分享优质的技术文章和工具等,还有更多来自星主和各个小伙伴的原创学习资料,让您的技术更上一层楼,生产性更进一步提高,我们还提供技术交流和问答平台,更有针对性的解决您的问题。

【小白逆袭】:如果您是刚入行或工作不久的软件小白,在这里,您将在极客文化的熏陶中,引领您走向技术大牛之路。

【技术面试】:我们也会分享一些技术面试的重点和常问的技术问题。

【行业资讯】:分享和探讨最新行业资讯,尤其是星主所在城市(大连)的软件行业动态和技术趋势。

更多精彩内容,期待您在星球中探索。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值