Spring基本概念与使用
创始人
2024-05-30 01:41:23
0

文章目录

  • 一、Spring概念
    • 1.容器
    • 2.IoC
    • 3.DI
    • 4.Ioc与DI的关系
  • 二、Spring创建与使用
    • 1.Maven
    • 2.添加Spring框架支持
      • 注:国内的Maven源配置
    • 3.简单实例
      • (1)创建一个Bean对象。
      • (2)将Bean对象存储到Spring当中
      • (3)从spring中读取到Bean对象。
        • a)先得到Spring上下文对象。
          • ApplicationContext与BeanFactory的关系
        • b)从Spring中取出bean对象
  • 四、简单的将对象存储到Spring中
    • 1.五大类注解
      • 命名规则
      • 为什么需要五个类注解?
      • 五大类注解用途(重点)
    • 2.方法注解
      • @Bean
  • 五、更加简单的对象注入
    • 1.属性注入
    • 2.Setter注入
    • 3.构造方法注入
    • @Autowired与@Resource的关系
  • 六、Bean的作用域与Spring的生命周期
    • 1.Bean的作用域
      • Lombok
      • Bean作用域分类
    • 2.Spring的执行流程
    • 3.Bean生命周期


一、Spring概念

Spring是一个开源框架,是一个包含了众多工具方法的IoC容器。可以用来将Bean对象放入和取出。

1.容器

之前接触过的容器:
List/Map:数据存储容器。
Tomcat:Web容器。

2.IoC

IoC(Inversion of Control)控制反转,把创建对象的权利交给容器,对象的实例不再由调用者来创建,而是由容器来创建,容器会负责控制程序之间的关系,而不是由调用者的程序代码直接控制。控制权由应用代码转移带了容器,控制权发生了反转,这就是控制反转。
Spring也是一个容器,是一个IoC(Inversion of Control)容器。

3.DI

DI(依赖注入):动态的将某个类引入当前类的行为/机制。

例如:构造一辆车需要框架,框架需要底盘,底盘需要轮胎,制造轮胎需要知道轮胎的大小,如果需要改变轮胎的大小或者其他竖向属性,需要改动每一个与之有依赖的对象,高耦合;而当前的方法,直接将轮胎对象注入底盘,底盘对象注入框架,框架对象注入车,在需要改动轮胎大小等属性的时候,只需要在轮胎对象中修改即可,而底盘和框架对象则不需要再有变动,这样子降低了耦合度。
在这里插入图片描述

以前方法:在这里插入图片描述

现在方法 :
在这里插入图片描述

4.Ioc与DI的关系

IoC是“目标”也是一种思想,DI是具体的实现。例如:今天我想去吃一顿那好的,这是一种目标和思想(IoC),最后我今天吃了烤肉,这就是DI。

二、Spring创建与使用

1.Maven

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.添加Spring框架支持

在pom.xml中注入依赖,并点击Maven的刷新按钮。
在这里插入图片描述

    org.springframeworkspring-context5.2.3.RELEASEorg.springframeworkspring-beans5.2.3.RELEASE

注:国内的Maven源配置

在这里插入图片描述在这里插入图片描述

3.简单实例

创建一个普通类的main方法运行Spring框架。

(1)创建一个Bean对象。

(2)将Bean对象存储到Spring当中

a)在resources下创建一个spring配置文件。
在这里插入图片描述

spring-config.xml




b)将Bean对象配置到spring配置文件中。
在这里插入图片描述
在这里插入图片描述

(3)从spring中读取到Bean对象。

a)先得到Spring上下文对象。

方式一:

//1.先得到 Spring 对象ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");

方式二:BeanFactory

BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
ApplicationContext与BeanFactory的关系

相同点:
1.都可以得到Spring上下文对象;
2.都是来自Spring的顶级接口。
不同点:
1.继承关系和功能:ApplicationContext属于BeanFactory的子类;BeanFactory只有最基础访问Bean的能力,而ApplicationContext除了拥有BeanFactory功能之外,还包含了更多的功能,如:国际化支持、资源访问、事件传播等。
2.性能:ApplicationContext加载方式是将Bean对象一次性加载,所以在后面访问Bean对象时很快(饿汉模式);BeanFactory需要某个Bean时,采取加载Bean对象,所以它在执行Bean获取时,比较慢。

b)从Spring中取出bean对象

方式一:根据 bean 的名称(标识)获取bean对象

        //根据 bean 的名称(标识)获取bean对象User user = (User) context.getBean("user");//取user

方式二:根据 bean 类型获取 bean

		//根据 bean 类型获取 bean,多个bean时会报错User user3 = context.getBean(User.class);

方式三:根据 bean名称 + bean类型 获取bean

		User user4 = context.getBean("user",User.class);

在这里插入图片描述
在这里插入图片描述

        //1.先得到 Spring 对象ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");//2.从Spring中取出bean对象User user = (User) context.getBean("user");//3.使用Bean(可选)System.out.println(user.sayHi());

在这里插入图片描述

四、简单的将对象存储到Spring中

1.五大类注解

命名规则

在这里插入图片描述
命名规则:如果第一个字母和第二个字母不为大写,则命名为将首字母小写;否则,命名为原类名。

为什么需要五个类注解?

(1)通过类注解可以了解当前类的用户(例如:车牌前有地域的划分等)。
(2)功能有细微不同。

五大类注解用途(重点)

(1)@Controller(控制器):归属于业务逻辑层,用来控制用户的行为,它用来检查用户参数的有效性。

(2)@Service(服务):归属于服务层,调用持久化类实现响应的功能。(不直接和数据库交互,它类似于控制中心)

(3)@Repository(仓库):归属于持久层,是直接和数据库进行交互的,通常每一个表都会对应一个@Repository。

(4)@Configuration(配置):归属于配置层,是用来配置当前项目的一些信息的。

(5)@Component(组件):归属于公共工具类,提供某些公共方法。

注:@Component是除了它自己的其他四个类的父类。

2.方法注解

存对象到Spring中方法二。

@Bean

@Bean:将当前修饰方法的方法对象存储到Spring当中。
(1)@Bean要与五大类配合使用;
(2)获取Bean时如果没有给注入的Bean进行命名,则直接用方法名获取;如果使用了name属性命名,则需要用设置的方法名进行获取。
(3)给@Bean设置了name属性之后,实验原方法名就不能获取对象了,只能使用设置的名称才能获取。
在这里插入图片描述
在这里插入图片描述

注:@Bean注解一定要配合5大类注解一块使用,否则是无效的方法注解。

五、更加简单的对象注入

@Autowired
@Resource

1.属性注入

使用属性注入的方式获取Bean
在这里插入图片描述
优点:实现简单。
缺点:
       (1)不可注入一个不可变(final)的对象,一般final修饰的属性要么直接赋值,要么在构造方法中初始化。
       (2)只适用于IoC容器。
       (3)更容易违背单一性原则。(针对类级别,写法简单,更容易犯错)

2.Setter注入

在这里插入图片描述

优点:更加符合单一设计原则。(针对对象方法级别,写法麻烦,用的时候才会去写)
缺点:
       (1)不能注入不可变对象。
       (2)注入对象可被修改。(由于set方法是普通方法,可重复调用,被调用时存在被修改的危险)

3.构造方法注入

构造方法注入是Spring官方从4.x之后推荐的注入方式。

在这里插入图片描述

优点:
(1)可以注入一个不可变对象.
(2)注入的对象不会被修改。
         a)加了final修饰符。
         b)构造方法就是随着类加载只执行一次的(不像set有可能执行多次被修改的风险)
(3)注入的对象会被完全初始化。
(4)通用性更好。

总结:日常开发中,使用属性注入实现更简单的读取Bean,依然是主流的方式。

@Autowired与@Resource的关系

相同点:都是用来实现依赖注入的。
不同点:
       (1)功能支持不同:@Autowired支持属性注入、setter注入、构造方法注入;@Resource支持属性、setter注入,但不支持构造方法注入。

       (2)出身不同:@Autowired来自Spring框架;而@Resource来自于JDK。

       (3)参数支持不同:@Resource支持更多的参数设置;而@Autowired只支持required参数。

1.@Resource的属性注入与@Autowired的属性注入对比:
在这里插入图片描述
2.setter注入方法都差不多。

六、Bean的作用域与Spring的生命周期

1.Bean的作用域

Bean作用域:Bean在整个Spring框架(项目)中的某种行为模式。

Lombok

lombok:简化Java开发的一个工具,为了更简单的替代Java中必要代码的一种实现工具。
lombok使用:
1.在项目中引用lombok。
(1)在pom.xml中添加依赖。

        org.projectlomboklombok1.18.24provided

(2)在setting->plugingz中下载lombok插件。

在这里插入图片描述
@Data==>@Setter+@Getter+@ToString

Bean作用域分类

(1)singleton:单例模式。(默认作用域)作用于IoC容器。
默认UserBean的作用域为@Scope(“singleton”)
在这里插入图片描述在这里插入图片描述
(2)prototype:原型模式(多例模式)
@Scope(“prototype”)
在这里插入图片描述
(3)request:请求作用域。
(4)session:会话作用域。->类似多线程中的ThreadLocal
(5)application:全局作用域。作用于servlet容器,应用在Spring MVC中。
(6)websocket:应用在Spring WebSocket中。

2.Spring的执行流程

(1)启动容器(启动项目)
(2)读取配置文件,初始化。
        a)使用xml直接注册bean;
        b)配置bean跟(扫描)路径。
(3)将bean存储到spring中,通过类注解进行扫描和装配。
(4)将bean从spring读取出来,装配到响应的类。

3.Bean生命周期

生命周期指的是一个对象从诞生到销毁的整个生命过程,我们把这个过程就叫做一个
对象的生命周期。Bean的生命周期分为以下5大部分:在这里插入代码片
(1)实例化(对应JVM中的“加载”),从无到有,将字节码转换成内存中的对象,只是分配了内存。
(2)设置属性(Bean注入和装配)
(3)初始化:
        a)各种通知;
        b)初始化的前置工作;
        c)进行初始化工作(使用注解@PostConstruct初始化、使用(xml)init-method初始化);
        d)初始化的后置工作。
(4)使用Bean;
(5)销毁Bean。
在这里插入图片描述
实例化-》设置属性-》初始化
在这里插入图片描述

相关内容

热门资讯

巨亏63%后增聘蔡霖!招商资管... (转自:机构之家)5月12日,招商资管发布公告,旗下产品招商资管智远成长灵活配置混合型集合资产管理计...
医用耗材集采深化进行时:企业加... 21世纪经济报道记者 唐唯珂 广州报道五月以来,各地耗材集采持续深入,高值耗材之外,普耗也有所涉及。...
国办印发!2025年度立法工作... 转自:新华社新华社北京5月14日电 经党中央、国务院同意,国务院办公厅日前印发《国务院2025年度立...
杭州将足球纳入中考体考选考项目 格隆汇5月14日|杭州市政府官网近日公布《杭州市加快推进全国足球发展重点城市建设若干措施》。其中提到...
赋予新使命,机遇为何一再青睐“... 文/乐居财经 严明会5月8日,“格力地产”证券简称正式变更为“珠免集团(维权)”,这也标志着其稳妥推...
认养一头牛新推专业儿童品牌“哞... 近日,认养一头牛官宣旗下专业儿童品牌“哞星人”成立。并推出A2型儿童纯牛奶系列、A2型有机儿童纯牛奶...
宁德时代获超500亿美元机构认... 观点网讯:5月14日,宁德时代获机构下单超500亿美元,折合约3902亿港元,剔除基石认购部分后超额...
特朗普称美中贸易谈判成果将有利... 来源:环球网 【环球网报道】5月14日上午,国台办举行例行新闻发布会,发言人陈斌华就近期两岸热点问题...
公司称兼职者想无偿解约要看态度... 【#公司称兼职者想无偿解约要看态度# #大学生兼职配音0收入被索赔违约金# 】近日,南京大学生小...
三星计划在HBM4采用混合键合... 今年初有报道称,三星将从第10代V-NAND闪存开始,采用长江存储(YMTC)的专利混合键合技术。三...
淘宝上线新功能:屏蔽高退款人群 5月13日,有消息称,淘宝已上线“高退款人群屏蔽”功能,服饰商家可在自定义推广页面设置屏蔽人群,既可...
新华时评·锲而不舍落实中央八项... 据新华社北京5月14日电 日前,中央层面深入贯彻中央八项规定精神学习教育工作专班、中央纪委办公厅公开...
《长安三万里》在台湾地区上映并... 来源:环球网 【环球网报道】5月14日上午,国台办举行例行新闻发布会,发言人陈斌华就近期两岸热点问题...
特斯拉机器人展示复杂舞蹈能力:...   Hehson科技讯 5月14日上午消息,特斯拉擎天柱机器人在海外社交平台发布最新消息:“刚开始热...
党中央、国务院同意,印发! 转自:中国能源报中国政府网5月14日消息,《国务院2025年度立法工作计划》已经党中央、国务院同意并...
联想青春有AI大学生教育特惠计... 5月13日晚,联想在清华大学学生职业发展指导中心举办了一场特别的宣讲会——联想大学生AI精英挑战赛主...
危机四伏:210万加沙人被未爆... 据《耶路撒冷邮报》5月12日报道,以色列总理内塔尼亚胡暗示将继续扩大在加沙的作战行动。土耳其阿纳多卢...
英伟达要在沙特建AI工厂,黄仁... 当地时间5月13日,多家美国科技公司宣布与沙特达成人工智能交易。其中,英伟达和AMD引领了大规模的交...
“从1%到7%”,中国跨境电商... 近日,国务院发布批复,同意在海南全岛和秦皇岛等15个城市(地区)设立跨境电子商务综合试验区,同时撤销...
董事长涉短线交易遭立案,三年巨...   科创板的“明星”生物药企迈威生物(688062.SH)近日陷入双重风波:董事长兼总经理刘大涛因涉...