一文了解Spring框架
目录
SpringBoot VS Servlet
Spring是什么?
loC:控制反转
DI
创建一个Spring项目
创建一个Spring IOC容器
注册Bean对象
获取Bean对象
注意事项:
类注解
为什么有这么多类注解?
注册与注入
方法注解 @Bean
SpringBoot VS Servlet
当我们用Servlet开发一个项目时步骤是:
- 创建Maven项目
- 配置pom.xml(添加需要的依赖包、添加webapp/WEB-INF/web.xml文件及内容)
- 添加Servlet代码:@WebServlet注解+重写doXXX方法
- 配置Tomcat:添加Tomcat
- 部署项目:破解版需要自己手动设置
当我们用框架开发一个项目时:
- 创建maven项目
- 修改pom.xml:添加ee框架的依赖包(ee框架搭建项目还可以创建一个Spring Initializer的项目,或者在Sring官网下载一个项目模板)
- 准备spring约定的文件
Spring是什么?
Spring框架即Spring Framework,它是一个开源框架,支持广泛的应用场景。用一句话概括就是:Spring是包含了众多方法的loC(控制反转)容器。那什么是loC呢?
loC:控制反转
实例化对象及组织对象间的依赖关系,都交给loC容器来进行管理,控制权由程序自己控制,转变为loC容器控制,控制权发生反转,所以叫loC容器。
DI
说到 IoC 不得不提的一个词就是 “DI” , DI 是 Dependency Injection 的缩写,翻译成中文是 “ 依赖注入 ” 的意思。所谓依赖注入,就是由 IoC 容器在运行期间,动态地将某种依赖关系注入到对象之中。所以,依赖注入(DI )和控制反转( IoC )是从不同的角度的描述的同一件事情,就是指通过引入 IoC 容器,利用依赖关系注入的方式,实现对象之间的解耦。解耦:自己写代码来创建对象及组织依赖关系,属于强耦合的(就是一个地方改,依赖这个地方的其他地方都得改),使用框架后,框架自动给我们组织依赖关系,解耦。loC与DI :loC是一个目标也是一种思想,而DI是这个目标的具体实现
创建一个Spring项目
我用的是Maven的方式创建一个Spring项目,可以分为以下三步:
- 创建一个普通的Maven项目
- 添加Spring框架支持(Spring-context、Spring-beans)
- 添加启动类
创建一个Spring IOC容器
ApplicationContext context=new AnnotationConfigApplicationContext("org.example");
ApplicationContext就是Spring容器的顶级接口
AnnotationConfigApplicationContext是其中一个实现类,它的作用是
- 扫描指定的包路径下,使用Spring框架注解的类(在上面代码扫描的是org.example)
- 注册这些类到容器中(框架帮我们new对象,及注入对象的依赖关系)
注册Bean对象
@Controller
//@Service
//@Repository
//@Component
public class Bean对象1 {
public void sayHello(){
System.out.println("Hello");
}
}
@Controller
//@Service
//@Repository
//@Component以上四个类注解都是用于注册Bean对象
获取Bean对象
获取bean对象的方式有两种
(1)通过Bean的类型
(1)通过Bean的类型获取
Bean对象1 b1=context.getBean(Bean对象1.class);
(2)通过Bean的id
(2)通过Bean的id
Bean对象1 b1_1=(Bean对象1) context.getBean("bean对象1");
注意事项:
- 一定要被扫描到,才能注册到容器中(一定要在指定的包路径下,指定类注解)
- 默认注册到容器中的bean id,是类名首字母小写,如果类名开始两个连续字母大写,bean id就是类名
- @Controller
@Service
@Repository
@Component这四个注册Bean对象的类注解默认都是单例的方式注册,注册为普通的java bean对象,还有一个@Configuration注册为配置类对象
类注解
想要将对象存储在Spring中,有两种注解类型可以实现:
类注解:@Controller(控制器存储)、@Service(服务存储)、@Repository(仓库存储)、@Component(组件存储)、@Configuration(配置存储)
方法注解:@Bean
为什么有这么多类注解?
这么多类注解,就是让程序员看到类注解之后,就能直接了解当前类的用途。
程序的工程分层,调用流程如下:
@Component:一般组件使用,除了以上明确含义的类注解作用,之前的作用,就可以使用AComponent注解。
注册与注入
注册bean对象:按框架约定的写法(目前是几个类注解),框架给我们new对象。
注入依赖关系:按框架约定的写法(属性注解),框架给我们组织依赖关系(把容器中的对象赋值给属性)
方法注解 @Bean
类注解是添加到某个类上的,而方法注解是放到某个方法上的。
@Configuration
public class AppConfig {
@Bean
public Bean对象1 test_1(){
Bean对象1 bean对象1=new Bean对象1();
bean对象1.sayHello();
return bean对象1;
}
}
注意点:
- 只有类被扫描到,且注册到容器中,方法上的@Bean注解才生效
- @Bean注解的方法,所在的类,需要五种类注解之一(一般是在@Configuration配置类中)
相关文章
- Android性能优化:这是一份全面详细的内存优化指南,android开发环境的搭建步骤
步骤1:Application Framework 决定回收的进程类型 Android中的进程 是托管的;当进程空间紧张时,会 按进程优先级低->>高的顺序 自动回收进程 Android将进程分为5个优先等级,具体如下: 步骤2:Linux 内…...
2023/1/31 21:09:37 - ADempiere ERP
相關读物 MasterERPSetupOperation 推荐等级:5星。这是ADempiere的创始人Red1为一所大学写的ADempiere教程,包括安装、系统设置、主要流程,认认真真地按照这个教程实践一遍,ADempiere就算是入门了。http://sourceforge.net/pro…...
2023/1/31 21:09:22 - 金蝶K3 WiSe15.0 部署
使用环境 5个PC,1个dell R430(机架式服务器) 客户端系统环境 非精简版ghost的都行 环境插件:金蝶资源盘 服务端系统参数如下 非域环境 1.操作系统 win2016 server 大用户版 -链接:https://pan.baidu.com/s/1PTAkkOhgp7tjy9ngj9qOww 提取码:hrs9 2.数据库 MSSQL 2014 -链接…...
2023/1/31 21:09:18 - 英语在计算机专业的作用,计算机专业英语的重要性.doc
文档介绍:Forpersonaluseonlyinstudyandresearch;mercialuse计算机专业英语的作用崔艳红(吉林省畜牧业学校,吉林白城)[摘要]计算机现今已被广泛应用到各个领域,在使用计算机过程中可能会碰到各种各样的专业术语,特别是那些英文缩写常让我们不知所措,但是当你掌握计算…...
2023/1/31 21:09:18 - URLEncoder.encode 使用心得
本文转载自: https://www.cnblogs.com/alan-wang/p/6111230.html 作者:Alan-Wang 转载请注明该声明。1、解决接口GET请求中:参数包含中文问题? 通过URLEncoder.encode 可以解决。我此次使用的utf-8编码,所以对中文进行urlencode…...
2023/1/31 21:09:13 - bindService() 调用流程
bindService 调用流程一、bindService() 调用流程时序图二、bindService() 调用流程文字描述三、onServiceConnected() 第二个参数类型是 BinderProxy?API 28 一、bindService() 调用流程时序图 二、bindService() 调用流程文字描述 bindService() ->ContextIm…...
2023/1/31 21:09:09 - dedecms安装后无法登陆后台
dedecms 安装后 登录后台 报500 服务器错误能一直提示安装直至安装成功,应该环境是没问题,出现500可能是什么地方配置的问题,在根目录再新建一个目录看能不能访问,如果能说明dedecms的系统问题。还有一种情况可能是你把配置错误的.htaccess文件放在网站目录里了,检查下看有…...
2023/1/31 21:09:06 - ecshop后台登录密码
求助,为什么我的ecshop后台系统登录不上展开1全部你可以登录后台,是不是对本站有全权使用呢?是的话,是否对数据库有使用权,如果有的话,可以使用。是的话就方便了123456加密e10adc3949ba59abbe56e057f20f883e进入数据库,找到对应的用户名,用上面的加密替换掉原来的passw…...
2023/1/31 21:09:05 - ecshop后台登陆不了
ecshop后台登陆是怎么搞的展开1全部未修改的情况下,输入localhost/项目名称/admin即可进入后台登录界面;找到admin文件夹;然后重命名;比如:修改为:chinawinxpAdmin;打开项目根目录/data/config.php文件;然后将ADMIN_PATH的值由admin修改为:chinawinxpAdmin;打开项目根目…...
2023/1/31 21:08:44 - JQuery动画效果
既然jquery可以直接从后台获取数据,为什么还要用ajax呢展开1全部ajax是一种传输技术,jquery是无法直接从后台获取数据的,他里面的$.ajax(),$.get(),$.post()等方法实际上是对ajax的封装,本质还是ajax的.ajax不是一门语言,切勿与js,php等混淆本回答由网友推荐怎么用jQuery从后台…...
2023/1/31 21:08:40 - net后台管理网页模板
.net写网站后台界面都用frameset框架?展开1全部后台管理一般用frameset写比较方便呀,左侧菜单,点击右边就可以出来,不用全屏幕刷新,我觉得挺好用的,80%的程序员一般都用本回答由提问者推荐高分求asp.net生成静态页,后台怎样管理展开1全部一看楼主,就有点我当年的样子st…...
2023/1/31 21:08:30 - phpcms忘记后台密码
求解,php网站,后台登陆密码忘记了。怎么办。展开3全部PHP网站后台登录密码忘记之后有两种办法:一种是在数据库中更改后台的登录密码;另一种就是删除一个文件,然后进行重新安装。1、在数据库中修改完网站后台登录密码的方法:首先需要登录网站数据库,进入数据库的管理界面…...
2023/1/31 21:08:25 - Shell脚本的学习心得和知识总结(四)|函数和正则表达式
2020年3月15日11:56:20 注:今天的学习内容主要是shell函数和正则表达式! 文章目录shell函数正则表达式基础正则表达式扩展正则表达式正则表达式的练习shell函数 shell中允许将一组命令集合或语句形成一段可用代码,这些代码块称为shell函数。…...
2023/1/31 21:07:55 - git 提交 error:RPC failed; HTTP 413 curl 22 The requested URL returned error: 413
进入要提交的文件;显示隐藏文件,进入 .git文件夹,打开config文件修改url 原始的 url https://gitee.com/用户名/仓名.git 改为:url gitgit.oschina.net:/用户名/仓名.git (此处为码云的)...
2023/1/31 21:06:10 - 解决 413 Request Entity Too Large(请求实体太大)
今天做上传视频,报错413 Request Entity Too Large 我们可以看到请求的body的大小,在Content-Length后显示,Nginx默认的request body为1M,小于我们上传的大小 解决方案 找到自己主机的nginx.conf配置文件,打开 在http…...
2023/1/31 21:04:48 - apmxe for php4,Windows下傻瓜式快速搭建Discuz论坛(也可以参考用于搭建其他php论坛)...
先说说几句废话。在.Net领域,比较优秀的论坛有Community Server,yetanotherforums,CVBBS等等。在php领域,优秀的论坛有phpwind,phpbb,Discuz,vBulletin等等在asp/.net领域的几个论坛我都尝试用过,不过都不是很优秀.比如Community Server架构很…...
2023/1/31 21:03:15 - 帝国CMS模板修改技巧
帝国cms如何换模板?帝国的模板在后台模板管理,找到模板组,换成别的组就可以了。帝国模板是存在数据库的,所以前台是看不到文件的。帝国模板是这样的换首页模板的话 找到 后台 公共模板变量 里面有一个首页模板列表模板 找到 列表模板 修改第一个默认模板内容模板 找到 内容…...
2023/1/31 21:01:55 - 【蓝牙开发 - BLE】BLE广播包
前言 对于BLE相关的知识学习,在实际开发中,大部分的开发人员不需要接触到底层的蓝牙协议,更多的是原厂提供的BLE收发或者广播包相关设置等接口,是不涉及到原理部分的内容. 而对于希望进一步的学习蓝牙知识的同学也可能只是搜索相…...
2023/1/31 21:01:47 - 杭电oj2007 超时
超时代码 #include <stdio.h> #include<math.h>int main() {int a,b;while(scanf("%d %d",&a,&b)!EOF){int ans10,ans20;(a%20)? ans1pow(a,2):ans2pow(a,3);while(a ! b) //首先这里是个疑点,应该是有a>b的情况导致了无限循…...
2023/1/31 21:00:22 - dedecms精美后台
如何修改织梦dedecms后台管理路径地址?展开1全部在我们安装好dedecms之后,默认的管理地址为/dede,从网站安全的角度来说,我们需要修改这个管理地址,有两种方法可以快捷的修改这个地址:1、直接从网站后台修改;如果您拥有网站的管理员权限,点击“附件管理文件式管理”,然后…...
2023/1/31 20:59:20
最新文章
- 一文了解Spring框架
目录 SpringBoot VS Servlet Spring是什么? loC:控制反转 DI 创建一个Spring项目 创建一个Spring IOC容器 注册Bean对象 获取Bean对象 注意事项: 类注解 为什么有这么多类注解? 注册与注入 方法注解 Bean Spr…...
2023/1/31 21:09:41 - Windows系统dos命令之cmd
目录1. 使用cd命令快速切换到指定的盘符中1.1 参数说明1.2 cd 切换盘符2. 使用cd命令切换到指定的目录中2.1 切换指定目录3. 使用cd命令退回到上一层目录3.1 使用命令 ”cd ..“4. 使用cd命令直接退回到当前根目录下4.1 使用命令cd \1. 使用cd命令快速切换到指定的盘符中 cd 是…...
2023/1/31 21:09:38 - Android性能优化:这是一份全面详细的内存优化指南,android开发环境的搭建步骤
步骤1:Application Framework 决定回收的进程类型 Android中的进程 是托管的;当进程空间紧张时,会 按进程优先级低->>高的顺序 自动回收进程 Android将进程分为5个优先等级,具体如下: 步骤2:Linux 内…...
2023/1/31 21:09:37 - Ansys Zemax | 使用 OpticStudio 进行闪光激光雷达系统建模(中)
在消费类电子产品领域,工程师可利用激光雷达实现众多功能,如面部识别和3D映射等。尽管激光雷达系统的应用非常广泛而且截然不同,但是 “闪光激光雷达” 解决方案通常都适用于在使用固态光学元件的目标场景中生成可检测的点阵列。凭借具有针对…...
2023/1/31 21:09:36 - 股票撤单委托接口是如何操作的?
在交易的过程中,要先通过股票撤单委托接口获取委托单列表的数据,才可以进行撤单的操作,部分的数据会作为参数传递给撤单函数,下面来具体看看股票撤单委托接口是如何操作的? std::cout << " 撤单委托 \n&qu…...
2023/1/31 21:09:34 - 46.for循环嵌套之九九乘法表
46.for循环嵌套之九九乘法表 文章目录46.for循环嵌套之九九乘法表1. 目标任务2. 完成第1行输出2. 分析前3行规律3. 编写第1行代码4. 编写前2行代码5. 调整输出格式6. 完成总代码1. 目标任务 本节的任务是利用for循环嵌套编写九九乘法表。 1*11 1*22 2*24 1*33 2*36 3*39 1…...
2023/1/31 21:09:33 - Zabbix 6.2 监控 PostgreSQL13 数据库
Zabbix 6.2 监控 PostgreSQL13 数据库 文章目录Zabbix 6.2 监控 PostgreSQL13 数据库官方模版地址1.pgsql新建监控用户2. 编辑 pg_hba.conf 文件并重启3.拷贝监控脚本到var/lib/zabbix下4.zabbix监控导入模版5.主机配置模版6.验证监控数据官方模版地址 https://git.zabbix.com…...
2023/1/31 21:09:28 - 通信原理笔记—模拟信号的数字编码
目录 低通与带通信号的抽样定理: 模拟信号数字编码的基本概念: 模拟信号的抽样: 低通信号的理想抽样: 低通采样定理: 采样方式: 冲激采样示例: 低通信号的自然抽样: 带通抽样…...
2023/1/31 21:09:26 - GitHub 推出对所有公共存储库的免费秘密扫描
GitHub 正在推出对其代码托管平台上所有公共存储库的免费扫描公开秘密(例如凭据和授权令牌)的支持。 秘密扫描是一种安全选项,组织可以启用它以进行额外的存储库扫描,以检测已知类型的秘密的意外暴露。 它通过匹配合作伙伴和服务…...
2023/1/31 21:09:26 - 数据类型隐式转换导致的阻塞
背景 不合适的数据类型隐式转换会导致性能下降和并发下降,而且大多数技术人员对隐式转换的概念是陌生的,因此在生产环境中非常常见,通过本文做一个系统的梳理。 现象 收到SQL专家云阻塞告警邮件,登录SQL专家云,进入实…...
2023/1/31 21:09:24 - ADempiere ERP
相關读物 MasterERPSetupOperation 推荐等级:5星。这是ADempiere的创始人Red1为一所大学写的ADempiere教程,包括安装、系统设置、主要流程,认认真真地按照这个教程实践一遍,ADempiere就算是入门了。http://sourceforge.net/pro…...
2023/1/31 21:09:22 - Java真的不难(五十二)Stream流的深入理解与流式编程
Stream流的深入理解与流式编程: 在今年年初小应学长也写过Stream与Lambda的两篇文章,今天先将两者结合起来进行流式编程 一、关于这两者 Stream与Lambda都是Java8引入的新概念,lambda在Java编程中对于函数式编程的支持,有助于代…...
2023/1/31 21:09:22 - 金蝶K3 WiSe15.0 部署
使用环境 5个PC,1个dell R430(机架式服务器) 客户端系统环境 非精简版ghost的都行 环境插件:金蝶资源盘 服务端系统参数如下 非域环境 1.操作系统 win2016 server 大用户版 -链接:https://pan.baidu.com/s/1PTAkkOhgp7tjy9ngj9qOww 提取码:hrs9 2.数据库 MSSQL 2014 -链接…...
2023/1/31 21:09:18 - 英语在计算机专业的作用,计算机专业英语的重要性.doc
文档介绍:Forpersonaluseonlyinstudyandresearch;mercialuse计算机专业英语的作用崔艳红(吉林省畜牧业学校,吉林白城)[摘要]计算机现今已被广泛应用到各个领域,在使用计算机过程中可能会碰到各种各样的专业术语,特别是那些英文缩写常让我们不知所措,但是当你掌握计算…...
2023/1/31 21:09:18 - 向Linux内核添加驱动的步骤详解
1、获取驱动源码 (1)驱动源码一般都是从设备厂商处获取; (2)设备厂商给的驱动源码大体上是没有问题的,能加载但是效果不一定好,需要根据自己的板子进行适配; 2、驱动在内核中的两种形式 (1)直接编译进内核:内核启动时自…...
2023/1/31 21:09:15 - 如何自定义注解
在 Spring Boot 应用中,使用自定义注解时需要用到 AOP,因此引入 AOP 相关依赖: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependenc…...
2023/1/31 21:09:14 - URLEncoder.encode 使用心得
本文转载自: https://www.cnblogs.com/alan-wang/p/6111230.html 作者:Alan-Wang 转载请注明该声明。1、解决接口GET请求中:参数包含中文问题? 通过URLEncoder.encode 可以解决。我此次使用的utf-8编码,所以对中文进行urlencode…...
2023/1/31 21:09:13 - bindService() 调用流程
bindService 调用流程一、bindService() 调用流程时序图二、bindService() 调用流程文字描述三、onServiceConnected() 第二个参数类型是 BinderProxy?API 28 一、bindService() 调用流程时序图 二、bindService() 调用流程文字描述 bindService() ->ContextIm…...
2023/1/31 21:09:09 - 代码随想录训练营第34天|LeetCode 1005.K次取反后最大化的数组和、134. 加油站、135. 分发糖果
参考 代码随想录 题目一:LeetCode 1005.k次取反后最大化的数组和 第一步,按照绝对值大小将数组从小到大排序;第二步,从后往前遍历数组(保证绝对值最大的负数优先取反),将负数取反,…...
2023/1/31 21:09:07 - dedecms安装后无法登陆后台
dedecms 安装后 登录后台 报500 服务器错误能一直提示安装直至安装成功,应该环境是没问题,出现500可能是什么地方配置的问题,在根目录再新建一个目录看能不能访问,如果能说明dedecms的系统问题。还有一种情况可能是你把配置错误的.htaccess文件放在网站目录里了,检查下看有…...
2023/1/31 21:09:06