Spring基础

Spring简介

Spring 框架是一个 Java 平台,为开发 Java 应用程序,提供全面的基础架构支持。 Spring 处理基础结构,因此您可以专注于应用程序。

简单来说,Spring 框架,解决对象创建以及对象之间依赖关系的一种框架。spring 把每个bean(实体类)与bean的关系全部交给第三方容器进行管理。容器就是spring,整个对象的生命周期管理的。Spring 核心就是: IOC/DI/AOP。Spring 还整合了多其他框架,同时还是一个起到整合作用的框架。

Spring组件

Spring Framework 由组成大约 20 个模块的 features 组成。这些模块分为 Core Container,Data Access/Integration, Web,AOP(Aspect Oriented Programming),Instrumentation,Messaging 和 Test,如下图所示。
在这里插入图片描述
主要组成部分
Spring Core: 基础,可以说 Spring 其他所有的功能都需要依赖于该类库。主要提供 IoC 依赖注入功能。
Spring Aspects :该模块为与AspectJ的集成提供支持。
Spring AOP :提供了面向切面的编程实现。
Spring JDBC : Java数据库连接。
Spring JMS :Java消息服务。
Spring ORM : 用于支持Hibernate等ORM工具。
Spring Web : 为创建Web应用程序提供支持。
Spring Test : 提供了对 JUnit 和 TestNG 测试的支持。

有兴趣了解的,可以看以下组件的详细解释

Spring IOC / AOP

IOC《浅谈Java反射与SpirngIOC原理》
AOP《浅谈代理模式与SpringAOP原理》

依赖注入(DI)和控制反转(IOC)

Spring IOC (控制反转),Spring DI (依赖注入),这两个概念在学习和使用 Spring 当中你一定会接触到,也是 Spring 非常重要的概念。

在我看来,IOC 只是反转了角色,颠倒我们传统手动 new Object();的方式,担任的是创建对象及解决对象依赖的角色。

DI,则是负责注入,负责把创建的对象注入。

依赖注入(DI)有几种方式?

依赖注入,其实就是 Spring 给对象的属性赋值。大致上是这几种常用的,其他的方式了解即可。

  • 构造函数
  • set方法为属性注入
  • 注解

Set 注入的原理?

前提是对象的属性必须有 Set方法。

关于这个,可以看我这两篇博客《浅谈Java反射与SpirngIOC原理》,IOC 底层实现是 xml 解析技术 + Java 反射技术。而 set注入,是在反射创建实例之后为对象属性赋值。(如果对象的属性不存在set方法自然会报错)

Spring Bean 作用域

Singleton 、Prototype、Request、Session、Global session 五种。

Spring Bean 作用域指的是 Bean 的 Scope 属性,默认是Singleton 单例。

Singleton :容器仅创建一个Bean实例,IOC容器每次返回的是同一个Bean实例。
Prototype:容器可以创建多个Bean实例,每次返回的都是一个新的实例。
Request:仅对HTTP请求产生作用,使用该属性定义Bean时,每次HTTP请求都会创建一个新的Bean,适用于WebApplicationContext环境。
Session:仅用于HTTP Session,同一个Session共享一个Bean实例。不同Session使用不同的实例。
Global-session:仅用于HTTP Session,同session作用域不同的是,所有的Session共享一个Bean实例。

Spring Bean 默认是单例,但请不要在Bean中共享变量,这样做会线程不安全。

@Resource 和 @Autowired 方式注入的区别?

@Resource 是由 JDK1.6开始提供,@Autowired 是 Spring 提供的。

JDK 自带的 @Resource 默认是按照名称(byName)来装配。
Spring 的 @Autowired 默认是按照类型(byType)注入,如果想按照名称(byName)来装配,可以结合@Qualifier注解一起使用。

XML文件+@AutoWired方式装配同一个Bean会怎样?

容器会优先装配XML文件中的Bean。

BeanId重复

因为Spring容器默认Bean的Scope是Singleton,当出现两个一样的BeanId是会报错,(XML文件和注解方式分开出现同一个的话不会报错,但一种方式出现重复beanId是会报错的)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值