【Spring】知识梳理

基础知识

本文为Spring基础知识个人梳理

1.Spring IoC的容器构建流程

1.获取一个新的bean工厂:通常是ApplicationContext

2.加载和解析Spring的配置,解析bean对象,将解析到的bean封装成BeanDefinition,并放到本地缓存中

3.实例化和调用BeanFactoryPostProcessor的扩展方法,这边是一个非常重要的扩展点

4.实例化BeanPostProcessor,加载到BeanFactory中,但是这边还不出发,该扩展接口的方法在bean对象执行初始化方法前后被触发,这边是另一个重要扩展点

5.实例化所有剩余的bean实例,包括:创建bean实例、bean实例属性填充、bean实例的初始化

6.完成容器刷新,推送上下文刷新完毕事件到监听器

2.Spring bean的生命周期

1.bean实例化,创建一个bean对象

​ Spring会扫描指定包下面的Java类,然后将其变成beanDefinition对象,然后Spring会根据beanDefinition来创建bean,特别要记住一点,Spring是根据beanDefinition来创建Spring bean的

2.属性填充阶段

3.初始化阶段

4.bean正常使用阶段

5.销毁阶段

3.Spring事务的实现原理

Spring 事务的底层实现主要使用的技术:AOP(动态代理) + ThreadLocal + try/catch。

动态代理:基本所有要进行逻辑增强的地方都会用到动态代理,AOP 底层也是通过动态代理实现。

ThreadLocal:主要用于线程间的资源隔离,以此实现不同线程可以使用不同的数据源、隔离级别等等。

try/catch:最终是执行 commit 还是 rollback,是根据业务逻辑处理是否抛出异常来决定。

4.@Resource和@Autowire的区别

1.@Resource和@Autowire都可以用来装配bean。

2.@Autowire默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置他的required属性为false。

3.@Resource如果指定了name或type,则按指定的进行装配;如果都不指定,则优先按名称装配,当找不到名称匹配的bean时才按照类型进行装配。。

5.@Autowire怎么使用名称来注入

配合@Qualifier使用,例如@Qualifier(“userService”)

6.使用MyBatis时,调用DAO接口时是怎么调用到SQL的?

简单点说,当我们使用 Spring+MyBatis 时:

1、DAO接口会被加载到 Spring 容器中,通过动态代理来创建

2、XML中的SQL会被解析并保存到本地缓存中,key是SQL 的 namespace + id,value 是SQL的封装

3、当我们调用DAO接口时,会走到代理类中,通过接口的全路径名,从步骤2的缓存中找到对应的SQL,然后执行并返回结果

7.Spring常用注解都有哪些

  1. @Component(任何层)、@Controller、@Service、@Repository(dao):用于实例化对象
  2. @Autowired:对象属性的依赖注入
  3. @Qualifier:要和 @Autowired 联合使用,代表在按照类型匹配的基础上,再按照名称匹配
  4. @Resource:按照属性名称依赖注入
  5. @ComponentScan:组件扫描
  6. @Configuration:被此注解标注的类,会被 Spring 认为是配置类。Spring 在启动的时候会自动扫描并加载所有配置类,然后将配置类中的 bean 放入容器
  7. @Transactional:此注解可标注在类上,也可标注在方法上,表示当前类中的方法具有事务管理功能
  8. @Value:简单属性的依赖注入
  9. @Bean:标注在方法上,用于将方法的返回值对象放入容器
  10. @Import:在一个配置类中导入其他配置类的内容
  11. @Scope:设置 Spring 对象的作用域
  12. @PostConstruct、@PreDestroy:用于设置 Spring 创建对象在对象创建之后和销毁之前要执行的方法
  13. @PropertySource:用于引入其他的 properties 配置文件

8.@Component和@Service的区别

@Component:spring基础的注解,被spring管理的组件或bean

@Repository:用于持久层,数据库访问层

@Service:用于服务层,处理业务逻辑

@Controller:用于呈现层,(spring-mvc)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值