您现在的位置是:首页 >技术杂谈 >Spring笔记网站首页技术杂谈
Spring笔记
文章目录
1、什么是Spring?
Spring是一个包含了众多工具方法的IOC容器。
1.什么是容器?
放东西的就是容器;
List/Map -> 数据存储容器
Tomcat -> Web 容器
因此Spring也是一个容器,是一个IOC控制反转的容器
2.什么是IOC?
IOC全称Inversion of control,即控制反转
Spring 是⼀个 IoC(控制反转)容器,重点还在“容器”⼆字上,那么它就具备两个最基础的功能:
1、将对象存⼊到容器;2、从容器中取出对象
所以Spring 最核⼼的功能,就是将对象存⼊到 Spring 中,再从 Spring 中获取对象的过程
3.什么是DI
提起IOC,那么DI也是必不可少的概念
DI 是 Dependency Injection 的缩写,翻译成中⽂是“依赖注⼊”的意思
所谓依赖注⼊,就是由 IoC 容器在运⾏期间,动态地将某种依赖关系注⼊到对象之中。所以,依赖注⼊(DI)和控制反转(IoC)是从不同的⻆度的描述的同⼀件事情,就是指通过引⼊ IoC 容器,利⽤依赖关系注⼊的⽅式,实现对象之间的解耦。
IoC 是“⽬标”也是⼀种思想,⽽⽬标和思想只是⼀种指导原则,最终还是要有可⾏的落地⽅案,⽽ DI就属于具体的实现
2、如何创建Spring
创建一个Spring项目主要有三个步骤:
1.创建Maven项目
2.添加Spring依赖
3.创建启动类
1.创建Maven项目
2.将Spring框架加入到项目中
到Maven中央仓库中区找
3.创建启动类
这样一份Spring就创建好了
注意:一定要配置国内源,并且路径中尽量不要出现中文(我的出现了,不推荐)
3、Spring简单的读和取操作
Spring存Bean对象的方式:
1.直接在spring-config.xml里面放置对象
2.通过配置扫描路径和添加注解的方式添加Bean对象
添加Bean对象可以通过两种注解
1.类注解:@Controller、@Service、@Repository、@Component、@Configuration
2.方法注解:@Bean
1.使用类注解
注意:此处我们创建的User类,所以通过getBean来寻找对象的时候前面一个参数是id,默认是类首字母小写,第二个参数是类对象。
问题一:如果我们的类名第一个字母也是小写呢?
如果类名的首字母是小写,那么和默认方式是一样的,首字母小写即可
问题二:如果我们的类名首字母和第二个字母都是大写呢?
使用原类名即可
结论:当使用五大类注解时,默认情况下获取Bean对象,只需要将类名首字母小写即可;然而当Bean对象首字母和第二个字母都是大写时,此时需要原类名才能正确获取到Bean对象
2.使用Bean方法注解:将返回的对象存储到spring中
3.为什么需要五个类注解
1.通过类注解可以了解到当前类的用途
2.不同的类注解有不同的地方
五大类注解用途(重点) :
1. @Controller (控制器) :归属于业务逻辑层,用来控制用户的行为,它用来检查用户参数的有效性。
2. @Service (服务) :归属于服务层,调用持久化类实现相应的功能。[不直接和数据库交互的,它类似于控制中心]
3. @Repository (仓库) :归属于持久层,是直接和数据库进行交互的。通常每一个表都会对应一个@Repository。
4. @Configuration (配置) :归属于配置层,是用来配置当前项目的一些信息。
5. @Component (组件) :归属于公共工具类,提供某些公共方法。
4.从spring中简单读取 Bean对象
有三种方式往spring中注入对象:
1.属性注入
2.setter注入
3.构造方法注入
1.属性注入
优点:实现简单,(迄今为止应用最为广泛的注入方式)
缺点:1.不能注入不可变对象
2.只适用于IOC容器
3.更容易违背单一设计原则(针对对象是类)
2.setter注入
缺点:1.不能注入不可变对象
2.注入对象可被修改
优点:更符合单一设计原则。针对对象方法级别
3.构造方法注入
优点:1.可以注入不可变对象
2.注入对象不会被修改
3.注入的对象会被完全初始化
缺点:书写繁杂,没有属性注入简单
5.@Resource和@Autowired的异同
相同点:
都是用来实现属性注入的
不同点:
1.功能支持不同:@Autowired 支持属性注入、setter注入、构造方法注入;但是@Resource只支持属性、setter注入
2.出身不同:@Autowired来自于spring框架,@Resource来自JDK
3.参数支持不同:@Autowired只支持required参数,@Resource支持更多的参数设置
注意:当Service中出现了多个未重命名的对象时,再去注入对象就会出错