Spring基础框架(一)

这篇博客主要介绍了Spring的基础知识,包括Spring的IoC(控制反转)核心特性,Bean的定义、加载和作用范围,以及依赖注入的注解说明。此外,还提到了Spring中的循环依赖问题及其解决方案。

我爱Java

Spring

Spring 框架的核心特性是可以用于开发任何 Java 应用程序,但是在 Java EE 平台上构建 web 应用程序是需要扩展的

  • Spring基础的是 Spring Framework,其功能有:
    • IoC –控制反转,Spring 两大核心技术之一
    • AOP – 面向切面编程,Spring 两大核心技术之一
    • 事务 - 无需编写代码,即可实现数据库事务管理
    • 测试 - 与测试框架集成、web 单元测试
    • MVC - 开发 web 应用程序
    • 缓存 - 对缓存进行抽象
    • 调度 - 延时任务、定时任务
  • Spring Framework 在开发中的作用:
    • 分层解耦 - 让单体应用的可扩展性更强
    • 整合框架 - 整合第三方框架,使之协同工作
    • 实用技术 - 自身强大,提供各种实用功能
IoC –控制反转,Spring 两大核心技术之一

IoC, 意为控制反转(Inversion of Control,缩写为IoC)。内部具有依赖注入功能的容器(Spring BeanFactory 容器和Spring ApplicationContext 容器),通常新建一个对象是由我们new出来的,但这里可以交给Spring容器来操作。

  • 之前对象如何来的?
    new新建
  • 之前对象属性如何赋值?
    调用构造方法、调用set方法完成赋值
  • 如果使用了Spring之后,对象那里来?
    ​ 由Spring创建并保存到Spring容器中,我们从Spring容器中获取对象
  • 如果使用了Spring之后,对象属性的赋值?
    ​ 由Spring给对象的属性赋值

总结:使用了Spring之后,对象由Spring创建和管理,只需从Spring容器中获取需要的Bean对象就行了。

Bean的定义

不是特别懂,暂时理解为由IoC管理的对象

加载Bean

要把某些类的对象交给 Spring 管理,需要在类上标注如下注解之一

  • @Component - 把普通类给 Spring管理,这个类不属于三层架构中的类

  • @Controller - 把控制器类交给 Spring管理(学习SpringMVC会用到)

  • @Service - 把业务层类交给 Spring管理

  • @Repository - 把数据访问层类交给Spring管理(用得少,因为与 MyBatis 整合)

四个注解的效果一致,但是应用场景不一样

获取Bean
ConfigurableApplicationContext ac = SpringApplication.run(Spring01Application.class, args);
//1.按照类型获取,一次只能识别一个
UserService userService = ac.getBean(UserService.class);
//2.按照名称获取,需要强转
UserService userService = (UserService) ac.getBean("userServiceA");
//3.根据名称和类型获取
UserService userService = ac.getBean("userServiceA", UserService.class);
Bean的作用范围

@singleton
在spring IoC容器仅存在一个Bean实例,Bean以单例方式存在,默认值

@prototype
每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时,相当于执行newXxxBean()

Bean的生命周期

@PostConstruct 的方法是初始化方法,会在bean被创建之后调用。
@PreDestroy 的方法是销毁方法,singleton范围的bean的销毁方法会在容器关闭前被调用。

第三方Bean管理
依赖注入

IoC:控制反转,把创建对象的权利交给Spring,由Spring创建Bean对象并保存到Spring容器/IoC容器中,我们程序从Spring容器中获取Bean对象即可。
DI:依赖注入,告诉Spring在创建对象的时候给对象的属性赋值

DI的注解说明
  • @AutoWired
    常写在成员变量,给对象类型的属性赋值,默认按照类型自动注入,如果Spring容器中同类型的对象有多个,可能注入失败。
  • @Qualifier
    指定要注入的Bean的名称,这个注解在成员变量上不能单独使用。
  • @Value
    常写在成员变量上,给成员变量注入普通类型的数据
  • @ConfigurationProperties
    写在类上,给Bean的属性批量注入普通类型数据。
lombok工具包

@NoArgsConstructor//生成空参构造【了解】
@AllArgsConstructor//生成全参构造【了解】
@Data//生成以下四个方法(除了全参构造方法),贼牛批【掌握】

  1. @Getter//生成getter方法【了解】
  2. @Setter//生成setter方法【了解】
  3. @ToString//生成toString方法【了解】
  4. @EqualsAndHashCode//生成hashCode和equals方法【了解】

@Slf4j//类中会生成一个log对象,用于输出日志【掌握】

循环依赖

现象:A对象内部注入了B对象,B对象内部注入了A对象,此现象就成为循环依赖。

  1. 解决set方式循环依赖:
    springboot2.6.0之前:由Spring自动解决。springboot2.6.0及以后版本:
    需要在application.properties开启允许set方法循环依赖:
spring.main.allow-circular-references=true
  1. 解决构造方式循环依赖:在任意一方构造方法中使用@Lazy注解标注注入的对象,含义是注入代理对象而非真实对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值