Spring框架基础知识-第四节内容(Spring基础配置)
ccwgpt 2025-07-27 19:16 1 浏览 0 评论
Spring基础配置
Spring框架本身有四大原则:
(1) 使用POJO进行轻量级和最小侵入式开发。
(2) 通过依赖注入和基于接口编程实现松耦合。
(3) 通过AOP和默认习惯进行声明式编程。
(4) 使用AOP和模板减少模块化代码。
Spring所有功能的设计和实现都是基于此四大原则的。每一个被Spring管理的Java对象都称为Bean。
依赖注入
1、控制反转是通过依赖注入去实现的,依赖注入指的是容器负责创建对象和维护对象间的依赖关系,而不是通过对象本身负责自己的创建和解决自己的依赖。
2、依赖注入的主要目的是为了解耦。
3、Spring IOC容器(ApplicationContext)负责创建Bean,并通过容器将功能类Bean注入到你需要的Bean中。
4、Spring提供使用xml配置、注解、java配置、groovy配置实现Bean的创建和注入。无论是xml配置、注解、Java配置,都被称为配置元数据,所谓元数据就是描述数据的数据。Spring容器解析这些配置元数据进行Bean的初始化、配置和管理依赖。
声明Bean的注解
@Component组件,没有明确的角色。
@Service 在业务逻辑层(Service层)使用
@Repository 在数据访问层(dao层)使用
@Controller 在展现层(MVC-SpringMVC)使用
注入Bean的注解
一般情况下通用
@Autowired:Spring提供的注解。
@Inject:JSR-330提供的注解
@Resource:JSR-250提供的注解。
这些注解在set方法上或者属性上使用,但是建议在属性上使用,优点是代码更少、层次更清晰。
代码示例
(1)首先声明一个Person的Bean
说明:使用@Service注解声明当前的person类是Spring管理的一个Bean,其中使用@Component、@Service、@Repository、@Controller注解是等效的。
(2)在声明一个Student的Bean
说明:使用@Autowired注解将Person类注入到Student这个Bean中,是为了让Student这个bean也具备Person类的功能。
(3)声明一个配置类
说明:@Configuration声明当前类是一个配置类。使用@ComponentScan("bean")自动扫描包名下所有使用@Service、@Component、@Repository和@Controller的类,并注册为Bean。
(4)编写运行代码
说明:使用
AnnotationConfigApplicationContext作为Spring容器,接受输入一个配置类作为参数。
运行结果:
Java配置
基本概念
Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置,Java配置也是Spring boot推荐的配置方式。
Java配置是通过@Configuration和@Bean来实现的。@Configuration声明当前类是一个配置类,相当于一个Spring配置的xml文件。@Bean注解在方法上,声明当前方法的返回值为一个Bean。
什么时候使用Java配置,什么时候使用注解配置,我们主要的原则是:全局配置使用Java配置(如数据库相关配置、MVC相关配置),业务bean的配置使用注解配置(@Service、@Component、@Repository、@Controller)。
代码示例
首先声明一个类Fruit
再声明一个类Apple
声明一个配置类Config
编写测试类
AOP
基本概念
AOP:面向切面编程,相对于OOP面向对象编程。
Spring的AOP存在目的是为了解耦。AOP可以让一组类共享相同的行为。在OOP中只能通过继承类和实现接口来使代码的耦合度增强,且类继承只能为单继承,阻碍更多行为添加到一组类上,AOP弥补了OOP的不足。
Spring支持AspectJ的注解式切面编程。
(1)使用@Aspect声明一个切面。
(2)@After、@Before、@Around定义建言(advice),可直接将拦截规则(切点)作为参数。
(3)其中@After、@Before、@Around参数的拦截规则为切点(PonitCut),为了使切点复用,可使用@PointCut注解专门定义拦截规则,然后在@After、@Before、@Around的参数中调用。
(4)其中符合条件的每一个被拦截处为连接点(joinpoint)。
代码示例
(1)添加spring aop支持及AspectJ依赖
(2)编写拦截规则的注解
(3)编写使用注解的被拦截类
(4)编写切面
说明:
1、通过@Aspect注解声明一个切面。
2、通过@Component让此切面成为Spring容器管理的Bean。
3、通过@Pointcut注解声明切点。
4、通过@After注解声明一个建言,并使用@Ponitcut定义的切点成为参数。
5、通过反射获得注解上的属性,然后做日志记录相关的操作。
(5)编写配置类
说明:使用@EnableAspectJAutoProxy注解开启Spring对AspectJ的支持。
(6)编写运行类
结果:
说明:先执行方法中的代码,然后再执行注解中的代码。
Spring容器
基本概念
容器可以管理对象的生命周期,对象与对象之间的依赖关系,您可以使用一个配置文件(通常是XML),在上面定义好对象的名称、如何产生(Prototype 方式或Singleton 方式)、哪个对象产生之后必须设定成为某个对象的属性等,在启动容器之后,所有的对象都可以直接取用,不用编写任何一行程序代码来产生对象,或是建立对象与对象之间的依赖关系,这也正是使用Spring框架给我们带来的好处。
Spring核心容器
下面的Spring主要接口设计关系图:
1、从接口BeanFactory到HierarchicalBeanFactory,再到ConfigurableBeanFactory,这是一条主要的BeanFactory设计路径。
BeanFactory接口定义了基本的Ioc容器的规范,在这个接口定义中,包括了getBean()这样的Ioc容器的基本方法(通过这个方法可以从容器中取得Bean)。
通过这些接口设计的叠加,定义了BeanFactory接口就是最简单的Ioc容器的基本功能。
2、以ApplicationContext作为核心的接口设计,这里涉及的主要接口设计
有,从BeanFactory到ListableBeanFactory,再到ApplicationContext,再到我们常用的WebApplicationContext或
ConfigurableApplicationContext接口。对于ApplicationContext接口,它通过继承MessageSource、ResourceLoader、ApplicationEventPublisher接口,在BeanFactory简单Ioc容器的基础上添加了许多对高级容器的特性支持。
3、这个接口系统是以BeanFactory和ApplicationContext为核心设计的,而BeanFactory是Ioc容器中最基本的接口。
4、BeanFacotry是Spring中比较原始的Factory。它无法支持spring的许多插件,如AOP功能、Web应用等。ApplicationContext接口,它由BeanFactory接口派生而来,因而提供BeanFactory所有的功能。ApplicationContext以一种面向框架的方式工作以及对上下文进行分层和实现继承。ApplicationContext还提供了以下的功能:
(1)MessageSource, 提供国际化的消息访问
(2)资源访问,如URL和文件
(3)事件传播
(4)载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层。
BeanFactory采用的是延迟加载形式来注入Bean的,即只有在使用到某个Bean时(调用getBean()),才对该Bean进行加载实例化,这样我们就不能发现一些存在的Spring的配置问题。而ApplicationContext则相反,它是在容器启动时,一次性创建了所有的Bean,这样在容器启动时,我们就可以发现Spring中存在的配置错误。
AnnotationConfigApplicationContext类
使用
AnnotationConfigApplicationContext可以实现基于Java的配置类加载Spring的应用上下文,避免使用application.xml进行配置。在使用spring框架进行服务端开发时,个人感觉注解配置在便捷性和操作上都优于使用XML文件进行配置。
代码示例
(1)定义一个接口Output
(2)定义一个实现类
(3)定义一个配置类
(4)测试
结果:
- 上一篇:SpringBoot项目开发实战销售管理系统——项目框架搭建!
- 已经是最后一篇了
相关推荐
- Spring框架基础知识-第四节内容(Spring基础配置)
-
Spring基础配置Spring框架本身有四大原则:(1)使用POJO进行轻量级和最小侵入式开发。(2)通过依赖注入和基于接口编程实现松耦合。(3)通过AOP和默认习惯进行声明式编程。(4)使...
- SpringBoot项目开发实战销售管理系统——项目框架搭建!
-
项目框架搭建在完成项目的分析和数据库设计后,一般由架构师完成项目框架的搭建,包括项目依赖的添加、项目的配置和项目日志的配置,完成后再开始业务代码的编写。技术栈的搭建新建一个SpringBoot项目,...
- 从零到一:独立运行若依框架系统并进行本地二次开发
-
####一、环境准备1.**基础环境**:-JDK1.8+(推荐JDK17)-Maven3.6+-MySQL5.7+(推荐8.0)-Redis5.0+-Node.js16...
- 单片机时间片轮询程序架构(单片机如何实现精准的时间周期)
-
时间片轮询法有很多时候都是与操作系统一起被提到,也就是说很多时候是操作系统中使用了这一方法:STM32单片机开发中的RTOS。下文将参考别人的代码,演示建立的一个时间片轮询架构程序的...
- Netty主要组件和服务器启动源码分析
-
1.Netty服务端启动代码publicclassNettyServer{publicstaticvoidmain(String[]args)throwsInterrup...
- 前端定时任务的神库!快把它加到你的项目中去!
-
我们常会遇到定时刷新数据、轮询接口、发送提醒等场景,我们常会遇到定时刷新数据、轮询接口、发送提醒等场景。为什么选择cron库?定时任务开发痛点原生setInterval的时间误差累积难以实现复杂的...
- 如何正确实现一个后台(定时)任务(后台定时任务怎么实现)
-
相信大家都知道如何在.NET中执行后台(定时)任务。首先我们会选择实现IHostedService接口或者继承BackgroundService来实现后台任务。然后注册到容器内,然后注册到容...
- 秒杀传统的Linux Crontab,这款开源的定时任务管理系统绝了!
-
Gocron是一款开源的定时任务管理系统,基于Go语言开发,旨在替代传统的LinuxCrontab。它通过Web界面提供直观的任务管理功能,支持精确到秒的Crontab时间表达式,并具备任务重试、超...
- Python 定时任务:schedule 自动执行脚本太方便。
-
2025年了,还在为Python定时任务头疼?轻量级需求搞什么Celery,schedule三行代码就搞定。这库把定时任务简化到像说人话,但新手直接抄文档容易踩坑。文档只会告诉你怎么设置每10分钟执行...
- SpringBoot扩展——定时任务!(基于springboot的校园宿舍管理系统的设计与实现)
-
定时任务项目开发中会涉及很多需要定时执行的代码,如每日凌晨对前一日的数据进行汇总,或者系统缓存的清理、对每日的数据进行分析和总结等需求,这些都是定时任务。单体系统和分布式系统的分布式任务有很大的区别,...
- 适合普通开发者和产品经理的PHP应用模板开发AI的SaaS应用框架
-
简单到傻!Liang_SaaS适合普通开发者和产品经理的PHP应用模板开发AI的SaaS应用框架,利用Php开发AI的SaaS应用框架,是一个强大的内容管理仪表板模板,基于Bootstrap和...
- 非常实用的15款开源PHP类库(php开源管理系统)
-
PHP库给开发者提供了一个标准接口,它帮助开发者在PHP里充分利用面向对象编程。这些库为特定类型的内置功能提供了一个标准的API,允许类可以与PHP引擎进行无缝的交互。此外,开发者使用这些类库还可以简...
- 蜂神榜苹果商店也凑热闹:“520”我爱玩家!
-
各位看官,今天被朋友圈各类“520”刷屏呢?有没有给你亲爱的家人一份“520”模式的红包呢?苹果商店也给了玩家一个“520”模式的惊喜---再一次提供了多款“1元”价格的游戏!并且此次降价的游戏品质都...
- 变成气球的猫咪《气球》十一正式推出
-
墨西哥游戏公司NoodlecakeGames曾开发过《致命框架》、《阿尔托冒险》等优秀佳作,而它旗下的最新游戏《气球》(TheBalloons)在十一的时候就要和大家见面了。游戏中,玩家要操控娃娃...
- 星座超游爱:狮子遇挑战,处女手抓牢~
-
teemo跟大家讲了三期太阳星座,也许有很多不热心的小伙伴并不知道是什么东西,今天就小科普一番~在出生的那一天,太阳所落的那个星座,就是每个人的太阳星座,而这恰好就是大家的性格中心,是权势驱力、人格的...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- Spring框架基础知识-第四节内容(Spring基础配置)
- SpringBoot项目开发实战销售管理系统——项目框架搭建!
- 从零到一:独立运行若依框架系统并进行本地二次开发
- 单片机时间片轮询程序架构(单片机如何实现精准的时间周期)
- Netty主要组件和服务器启动源码分析
- 前端定时任务的神库!快把它加到你的项目中去!
- 如何正确实现一个后台(定时)任务(后台定时任务怎么实现)
- 秒杀传统的Linux Crontab,这款开源的定时任务管理系统绝了!
- Python 定时任务:schedule 自动执行脚本太方便。
- SpringBoot扩展——定时任务!(基于springboot的校园宿舍管理系统的设计与实现)
- 标签列表
-
- 框架图 (58)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- jpa框架 (47)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- java日志框架 (61)
- JAVA集合框架 (47)
- mfc框架 (52)
- abb框架断路器 (48)
- beego框架 (52)
- java框架spring (58)
- grpc框架 (65)
- tornado框架 (48)
- 前端框架bootstrap (54)
- orm框架有哪些 (51)
- ppt框架 (48)
- 内联框架 (52)
- cad怎么画框架 (58)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)