别问为啥叫京都大火篇-剑心迷
Spring或许是现在很多人学习的第一个框架(主要我是个碎嘴子,总想扯东扯西)
先对不起各位,我又开始扯皮了。
Spring、SpringMVC、SpringBoot、SpringCloud可以说占了java开发的半壁江山,而学习Spring就成了重中之重,正是Spring这种良好的生态环境,使得程序猿这个物种可以更快的产出馋品锦鲤需要的食物。

Spring是什么?

Spring是一个开源的框架,为了简化企业开发而生,可以使开发变得更加的优雅和简洁
核心本质:–Spring本质就是个IOC和AOP的容器框架。
IOC:控制反转
AOP:面向切面编程
而容器呢,就是管理我们注入到管理应用对象的生命周期,就像一个桶里放的都是存放的对象

Spring的优点
1、Spring通过DI、AOP和消除样板式代码来简化企业级Java开发

​ 2、Spring框架之外还存在一个构建在核心框架之上的庞大生态圈,它将Spring扩展到不同的领域,如Web服务、REST、移动开发以及NoSQL

​ 3、低侵入式设计,代码的污染极低

​ 4、独立于各种应用服务器,基于Spring框架的应用,可以真正实现Write Once,Run Anywhere的承诺

​ 5、Spring的IoC容器降低了业务对象替换的复杂性,提高了组件之间的解耦

​ 6、Spring的AOP支持允许将一些通用任务如安全、事务、日志等进行集中式处理,从而提供了更好的复用

​ 7、Spring的ORM和DAO提供了与第三方持久层框架的的良好整合,并简化了底层的数据库访问

​ 8、Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分或全部

–IOC控制反转(Inversion of Control)

要学会ioc就需要搞清楚4个问题;
1、谁控制谁:在过去编码的过程中,需要什么对象都是自己创建new出来的,由程序员自己来控制对象,但是又了IOC容器之后,变成了由IOC容器来控制对象
2、控制什么:在实现的过程中所需要的对象以及需要依赖的对象
3、什么是反转:在没有IOC容器的时候,是由我们在对象中主动创建依赖的对象,这种是正转。但是有了IOC容器后,依赖的对象由IOC容器创建并注入到了对象之中,由主动创建成了被动的接受,这就是反转
4、哪些方面被反转:需要依赖的对象反转了

DI与IOC
DI是啥:依赖注入(别说,这俩东西就是感觉蛮像的)
很多人把IOC和DI说成一个东西,笼统来说的话是没有问题的,IOC和DI是从不同的角度描述的同一件事,IOC是从容器的角度描述,而DI是从应用程序的角度来描述,也可以这样说,IOC是设计思想,而DI是具体的实现方式

IOC基本的使用与容易忽略(一些功能工作压根用不到)
知识点,拿笔圈起来(下面会进行验证):
1、ApplicationContext就是IOC容器的接口,可以通过此对象获取容器中创建的对象

​ 2、对象在Spring容器创建完成的时候就已经创建完成,不是需要用的时候才创建

​ 3、对象在IOC容器中存储的时候都是单例的,如果需要多例需要修改属性

​ 4、创建对象给属性赋值的时候是通过setter方法实现的

​ 5、对象的属性是由setter/getter方法决定的,而不是定义的成员属性

//创建一个实体类private String name;private Integer age;private String gender;public Persion(Integer id, String name, Integer age, String gender) {this.id = id;this.name = name;this.age = age;this.gender = gender;}//特意在无参构造添加了一句话来测试spring容器中的对象是合适创建的public Persion() {System.out.println("是否创建");}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}
<!--给容器中手动注入对象,并且设置值-->
<!--在spring容器中注入对象,测试--><bean id="per1" class="com.kaisi.pojo.Persion"><property name="id" value="1"></property><property name="age" value="22"></property><property name="name" value="李四"></property><property name="gender" value="中"></property></bean>
//特意只是加载了配置文件,来验证IOC容器何时创建对象
public class Test {public static void main(String[] args) {//解析xml文件对springIOC容器进行测试ApplicationContext con = new ClassPathXmlApplicationContext("ks.xml");
//        Persion per1 = con.getBean("per1", Persion.class);
//        System.out.println(per1);}
}
```![在这里插入图片描述](https://img-blog.csdnimg.cn/20200927200328645.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTY4NzU0Ng==,size_16,color_FFFFFF,t_70#pic_center)- **由↑结果就显而易见了,只是加载了容器。对象在IOC容器创建完成的时候就已经创建完成,并不是需要的时候才会创建。*- 但是注意,这只是默认为单例的时候才这样,如果scope为pretotype,对象不会再容器创建前完成创建,而是调用getBean才会进行创建*```java//解析xml文件对springIOC容器进行测试ApplicationContext con = new ClassPathXmlApplicationContext("ks.xml");Persion per1 = con.getBean("per1", Persion.class);Persion per2 = con.getBean("per1", Persion.class);System.out.println(per1 == per2);


嘿嘿,结果依旧预想效果,因为SpringIOC中默认的 scope=“singleton” 就是单例。当然有默认就可以修改

 <!--bean的作用域:singleton、prototype、request、session默认情况下是单例的prototype:多实例的容器启动的时候不会创建多实例bean,只有在获取对象的时候才会创建该对象每次创建都是一个新的对象singleton:默认的单例对象在容器启动完成之前就已经创建好对象获取的所有对象都是同一个request和session是之前版本的,忘记是几了,request是每次请求都是创建一个对象而session是每次会话创建一个对象--><bean id="per1" class="com.mashibing.bean.Person" scope="prototype"></bean>

将scope属性改为 “prototype” 即可

 //解析xml文件对springIOC容器进行测试ApplicationContext con = new ClassPathXmlApplicationContext("ks.xml");Persion per1 = con.getBean("per1", Persion.class);Persion per2 = con.getBean("per1", Persion.class);System.out.println(per1 == per2);


这一步同时验证了,当作用域为prototype的时候,只有进行调用才会创建对象。一石二鸟。结果false说明对象在内存的地址值并不相同,那么此刻IOC中的对象就不是单例,而是多例

将实例注入到Spring中,不止只有xml文件配置的形式,更方便常用的多基于注解。
如果想要将自定义的bean对象添加到IOC容器中,可以用Spirng提供的注解
Spring中提供了四个主要组件的添加注解:
@Controller:控制器,推荐给controller层添加此注解
@Service:业务逻辑,推荐给业务逻辑层添加此注解
@Repository:仓库管理,推荐给数据访问层添加此注解
@Component:给不属于以上基层的组件添加此注解
值得注意的是:这个四个注解并没有什么区别,都会把自定义的bean注入到Spring容器中,但仿佛约定一般,会给不同的层级加入与之对应的注解,让其他人看起来更加清晰方便。(遇上不按常理出牌的也没办法,认了吧…)

若是使用注解需要注意一些地方
1,当给一个bean对象加入上面任意一个注解
2,此时需要在xml文件中,依赖context命名空间
3,在配置问加入自动扫描的标签,用来告诉Spring需要把哪些类或者方法等等加入到Spring容器中
<context:component-scan base-package=“com.kaisi”></context:component-scan>

-----使用@AutoWired进行自动注入
注意:使用@AutoWried的时候注解的时候,自动装配是根据类型bytype实现的
1、如果根据类型只找到一个,进行直接赋值
2、如果没有找到,直接抛出异常
3、如果找到了多个,那么就会按照注入对象的变量名作为<bean标签>中的id进行匹配
–匹配到直接进行自动注入
–匹配不到继续报异常

//先注入一个
@Service
public class PersonService {@Autowiredprivate PersonDao personDao;public void save(){System.out.println("p1111");personDao.save();}
}

//在注入一个像相同类型的进行测试
@Service
public class PersonService2 extends PersonService{@Autowiredprivate PersonDao personDao;public void save(){System.out.println("p222");personDao.save();}}



有俩个相同类型的bean注入到IOC容器的时候,就会按照ByName进行匹配。
由↑俩结果可以得出此结论。
还有个有趣的注解是@Qualifier:用此注解可以指定根据name来走哪个方法
1,找到了就直接进行装配注入
2,找不到就直接报错

------自动装配的注解@AutoWired,@Resource
在使用自动装配的时候,出了可以使用@AutoWired注解之外,还可以使用@Resource注解
1、@AutoWired:是spring中提供的注解,@Resource:是jdk中定义的注解,依靠的是java的标准

​ 2、@AutoWired默认是按照类型进行装配,默认情况下要求依赖的对象必须存在,@Resource默认是按照名字进行匹配的,同时可以指定name属性。
注意:@Resource是按照名称进行装配的,如果名字找不到,那么就使用类型
@AutoWired是按照类型进行装配,如果类型找不到那么久使用名字进行查找

Spring详解一号IOC京都大火篇相关推荐

  1. Spring详解二号AOP冰霜篇

    依旧是常用的学习讨论进行的论述 Spring的另一个核心就是AOP:Aspect Oriented Programming 面向切面编程 面向切面编程:基于OOP基础之上新的编程思想,OOP面向的主要 ...

  2. 简书大佬的笔记:一篇文章带你详解 HTTP 协议(网络协议篇一)

    一篇文章带你详解 HTTP 协议(网络协议篇一) 本篇文章篇幅比较长,先来个思维导图预览一下. 一张图带你看完本篇文章 一.概述 1.计算机网络体系结构分层 计算机网络体系结构分层 2.TCP/IP ...

  3. CompletableFuture使用详解(全网看这一篇就行)

    Java8 CompletableFuture 用法全解_孙大圣666的博客-CSDN博客_completablefuture ​​​CompletableFuture使用详解(全网看这一篇就行)_代 ...

  4. JAVAWEB开发之Spring详解之——Spring的入门以及IOC容器装配Bean(xml和注解的方式)、Spring整合web开发、整合Junit4测试

    Spring框架学习路线 Spring的IOC Spring的AOP,AspectJ Spring的事务管理,三大框架的整合 Spring框架概述 什么是Spring?  Spring是分层的Java ...

  5. java spring详解

    1.什么是java spring Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用."耦合"一般指 ...

  6. Spring 详解(五):Spring声明式事务

    事务管理是企业级应用程序开发中必备技术,用来确保数据的完整性和一致性.本文主要讲解事务涉及到一些概念以及spring中事务的使用. 1. 事务 数据库事务(Database Transaction) ...

  7. Spring 详解Bean的后置处理器

    Bean的后置处理器详解: Spring当中的后置处理器是Spring体用的一个扩展点,开发者只要去实现,Spring当中的BeanPostProcessor接口,那么就能插手SpringBean实例 ...

  8. Spring详解(一):简介

    Spring Framework创始人:Rod Johnson. 计算机专业本科,音乐学博士.有着相当丰富的C/C++技术背景的Rod早在1996年就开始了对Java服务器端技术的研究. 轮子理论推崇 ...

  9. Spring详解(超全面)

    目录: 一.Spring 1. 概述 2.为什么要用Spring 3.Spring初体验 二.IoC 1.概念 2.IoC容器 2.1 BeanFactory 2.2 ApplicationConte ...

最新文章

  1. 百度某员工抱怨:前人代码写得像坨*,颠覆了对大厂的认知
  2. golang strings Replace 字符串替换
  3. CTFshow php特性 web127
  4. 网站安全扫描工具--Netsparker的使用
  5. uni-app文档需要注意细节点
  6. 剪切文件_转录组测序技术和结果解读(十六)——可变剪切
  7. python 字符串 4位一组_Python基础4- 字符串
  8. mingw64 下 java_Win7 64 配置MinGW,以及使用Eclipse
  9. php 滑块 爬虫_PHP实现简易爬虫与简易采集程序
  10. 如何使用JMeter自身代理录制APP测试脚本
  11. Python(含PyCharm及配置)下载安装以及简单使用(Idea)
  12. 不用U盘安卓Linux系统,安卓Android-X86 安装教程 不使用U盘安装Androidx86教程
  13. 车机开发之添加自定义键
  14. Hello World---kodu少儿编程第四天
  15. 梦幻西游手游什么服务器稳定,《梦幻西游手游》ios玩哪个区好 ios区服选择推荐...
  16. MySQL的COUNT语句暗藏玄机
  17. 多多情报通:拼多多虚假发货罚款是按什么罚款的?是由什么原因造成的?
  18. QQ空间登陆协议分析-2014年8月
  19. Windows:Windows 8安装64位Benq G900HD的显示器驱动
  20. 华为数通笔记-ISIS高级特性

热门文章

  1. 迁移学习——Balanced Distribution Adaptation for Transfer Learning
  2. 计算机网络教室财产登记表,固定资产清查登记表-资产管理.DOC
  3. 学习《软件工程》心得
  4. border定义不同边框,虚线边框(dashed,dotted),实线边框(solid)
  5. 计算机操作系统笔记第八章磁盘存储器的管理
  6. 三分钟学会PS小清新调色教程-萧蕊冰
  7. 分水岭算法 c语言实现,分水岭算法的应用
  8. [BUUCTF][Zer0pts2020]Can you guess it?
  9. Objective-C分类 (catagory)
  10. MPEG2-PS格式分析实例