官网:https://spring.io/projects/spring-framework#overview
官方下载地址:https://repo.spring.io/release/org/springframework/spring/
GitHub:https://github.com/spring-projects/spring-framework

依赖:

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.9</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.9</version>
</dependency>

1.2 优点:

  • spring是开源的免费的容器。
  • spring是一个轻量级的,非入侵式的框架。
  • 控制反转(IOC),面向切面编程 (AOP)。
  • 支持事务处理,对框架整合的支持。
    总结:spring是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架。

1.3 组成:

  • 之前,程序是主动创建对象,控制权在程序员手上。
  • 使用set注入之后,程序不再具有主动性,变成了被动的接收对象。

IOC思想,从本质上解决了问题,程序员不用再去管理对象的创建了,系统的耦合性降低,可以更加专注的业务层
这是IOC的原型,反转就是把主动权交给用户

2.2 控制反转

控制:谁来控制对象的创建,传统应用是由程序员控制对象的创建,使用spring后,对象是由spring来控制

反转:程序本身不创建对象,而变成被动的接收对象
依赖注入:就是利用set方法来进行注入
IOC是一种编程思想,由主动的编程变成被动的接收

现在,我们彻底不用在程序中改动了,要实现不同的操作,只需要在xml配置中进行修改。所谓的IOC:对象由spring进行创建、管理、装配

3、HelloSpring

  1. 新建一个maven项目,编写实体类
public class Hello {private String str;public String getStr() {return str;}public void setStr(String str) {this.str = str;}@Overridepublic String toString() {return "Hello{" +"str='" + str + '\'' +'}';}
}

2.编写xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd"><!--使用Spring来创建对象,在Spring这些都称为Bean类型 变量名 = new 类型();Hello hello = new Hello();id = 变量名class = new的对象property 相当于给对象中的属性设置一个值!-->
//使用spring来创建对象,在spring这些都称为Bean<bean id="hello" class="com.kuang.pojo.Hello"><property name="str" value="Spring"/></bean>
</beans>

.3.测试

public class MyTest {public static void main(String[] args) {//获取Spring的上下文对象!ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");//我们的对象现在都在Spring中的管理了,我们需要使用,直接去里面取出来就可以!Hello hello = (Hello) context.getBean("hello");System.out.println(hello.toString());}
}Hello{str='Spring'}

这个过程就叫控制反转:

控制:谁来控制对象的创建,传统应用程序的对象是由程序本身控制创建的,使用Spring后,对象是由Spring来创建的。

反转:程序本身不创建对象,而变成被动的接收对象。

依赖注入:就是利用set方法来进行注入的。

IOC是一种编程思想,由主动的编程变成被动的接收。

可以通过new ClassPathXmlApplicationContext去浏览一下底层源码。

OK,到了现在,我们彻底不用在程序中去改动了,要实现不同的操作,只需要在xml配置文件中进行修改,所谓的IOC,一句话搞定:对象由Spring来创建,管理,装配!
887

5. 依赖注入(DI)dependency injection

5.1 构造器注入

前面讲过了

5.2 set方式注入【重点】

【环境搭建】
1.复杂类型

public class Address {private String address;public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}
}

2.真实测试对象

   public class Studfent{private String name;private Address address;private String[] books;private List<String> hobbys;private Map<String,String> card;private Set<String> games;private String wife;private Properties info;
}

3.beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="address" class="com.hardy.pojo.Address"><property name="address" value="郑州"/></bean><bean id="student" class="com.hardy.pojo.Student"><!-- 第一种,普通值注入  value--><property name="name" value="hardy"/><!-- 第二种,bean注入  ref--><property name="address" ref="address"/><!-- 第三种,数组注入--><property name="books"><array><value>三国演义</value><value>水浒传</value><value>红楼梦</value><value>西游记</value></array></property><!-- 第四种,list集合注入--><property name="hobbys"><list><value>听歌</value><value>看书</value><value>学Java</value></list></property><!-- 第五种,map注入--><property name="card"><map><entry key="校园卡" value="201112084"/><entry key="银行卡" value="2637643487362476376"/></map></property><!-- 第六种,set注入--><property name="games"><set><value>LOL</value><value>梦幻西游</value><value>绝地求生</value></set></property><!-- 第七种,null值注入--><property name="wife"><null/></property><!-- 第八种,Properties 特殊值注入--><property name="info"><props><prop key="driver">201112084</prop><prop key="url">hardy</prop><prop key="username">root</prop><prop key="password">root</prop></props></property></bean>
</beans>

4.测试类

public class MyTest {public static void main(String[] args) {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");Student student = (Student) context.getBean("student");System.out.println(student.toString());/*** Student{*  name='hardy',*  address=Address{address='郑州'},*  books=[三国演义, 水浒传, 红楼梦, 西游记],*  hobbys=[听歌, 看书, 学Java],*  card={*      校园卡=201112084,*      银行卡=263764348736246},*  games=[LOL, 梦幻西游, 绝地求生],*  wife='null',*  info={*      password=root,*      url=hardy,*      driver=201112084,*      username=root}}*/}
}

5.3 拓展方式注入(P和 C命名空间注入)

我们可以使用P命名空间 和 C命名空间注入
注:需要导入xml约束

 xmlns:c="http://www.springframework.org/schema/c"   xmlns:p="http://www.springframework.org/schema/p"
 xmlns:p="http://www.springframework.org/schema/p"<!--p命名空间注入,可以直接注入属性  property  --><bean id="user" class="com.hardy.pojo.User" p:age="18" p:name="hardy"/>
 xmlns:c="http://www.springframework.org/schema/c"   <!--C命名空间注入,对象要有参构造器注入,constructor  --><bean id="user2" class="com.hardy.pojo.User" c:name="张三" c:age="23"/>

5.4 bean的作用域:6种

singleton:全局只能有1个(spring默认机制)(单例模式)
prototype:每次从容器get的时候都会产生一个新对象(原型模式)
request   以下的只能在web中使用
session
application
websocket

(kuang)1、Spring 笔记相关推荐

  1. 狂神说Spring笔记(全网最全)

    Spring框架 1.Spring 狂胜说Spring笔记以及代码 1.1 简介 Spring : 春天 -->给软件行业带来了春天 2002年,Rod Jahnson首次推出了Spring框架 ...

  2. Spring:笔记整理(1)——HelloWorld

    Spring:笔记整理(1)--HelloWorld 导入JAR包: 核心Jar包 Jar包解释 Spring-core 这个jar 文件包含Spring 框架基本的核心工具类.Spring 其它组件 ...

  3. spring 笔记2:Spring MVC : Did not find handler method for 问题的解决

    spring 笔记2:Spring MVC : Did not find handler method for 问题的解决 参考文章: (1)spring 笔记2:Spring MVC : Did n ...

  4. spring 笔记持续更新2012年9月16日 11:54:45

    spring笔记 点击下载立体结构笔记http://download.csdn.net/detail/yao__shun__yu/4608595 点击进入我的个人编程网站,初步建设中http://mo ...

  5. 跟杨春娟学Spring笔记:AOP之SpringAOP引介通知

    跟杨春娟学Spring笔记:AOP之SpringAOP引介通知 完成:第一遍 1.如何代码实现AOP之SpringAOP引介通知? IntroductionInterceptor(引介通知) 在目标类 ...

  6. [转]Spring 笔记

    Spring 笔记 笔记总结到位,非常经典. 参考资料: Spring 笔记(江南白衣博物馆) Spring下单元测试的要点 Spring配置要点 Spring事务管理

  7. Spring笔记9--Spring的三大重要配置(alias,bean,import)

    我的所有spring笔记大集锦 Spring5入门知识整合(持续更新) 目前而言就bean用的最多,import在以后的团队协作中用的很多 下面逐一说说各自用法 1.alias关键字 首先alias是 ...

  8. 【从零开始学Spring笔记】工厂类

    大家可以关注作者的账号,关注从零开始学Spring笔记文集.也可以根据目录前往作者的博客园博客进行学习.本片文件将基于黑马程序员就业班视频进行学习以及资料的分享,并记录笔记和自己的看法.欢迎大家一起学 ...

  9. 跟杨春娟学Spring笔记:表达式装配

    跟杨春娟学Spring笔记:表达式装配 完成:第一遍 1.使用表达式注入有哪几种? 如果是表达式注入,必须在value里写#{表达式} 运算符:等于 符号: == 文本类型运算符: eq 运算符:小于 ...

  10. 跟杨春娟学Spring笔记:集合装配

    跟杨春娟学Spring笔记:集合装配 完成:第一遍 1.常见集合元素有哪些? 集合元素 : 用途:装配list类型的值,允许重复 集合元素 : 用途:装配set类型的值,不允许重复 集合元素 : 用途 ...

最新文章

  1. 联想手机android系统耗电,联想 K900 Android 4.2 手机续航能力实测
  2. u检验、t检验、F检验、X2检验 (转)
  3. C++中Struct和Class的区别
  4. (6)css盒子模型(基础下)
  5. 工作90:富文本编辑器使用篇wangedit
  6. MySQL8怎么设置时区为东八区_mysql时区设置为东八区
  7. 数博会重磅活动:第二届大数据科学与工程国际会议详细日程
  8. JS工具类——Select操作类
  9. 计算机网络经典试题答案,2016年计算机软考网络工程师经典练习试题及答案
  10. SketchUp Pro 2019下载|SketchUp Pro 2019(草图大师)免安装绿色精简版下载
  11. 【数学期刊】世界著名数学期刊
  12. 表单复选框按钮全选-取消全选小案例
  13. 《算法新解》作者刘新宇:我只是想打开那些黑盒子,告诉人们里面有什么。
  14. MASC: Multi-scale Affinity with Sparse Convolution for 3D Instance Segmentation
  15. 巨简单又好用的pygame游戏暂停继续方法
  16. js如何判断保留两位小数
  17. 【设计模式】一:六大基本原则详解
  18. java最新面试题及答案2020 阿里(十六)
  19. 如何做数据平滑迁移:双写方案
  20. leon3详细开发教程

热门文章

  1. 基于javaweb+jsp的医院住院管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Layui Ajax)
  2. ODBC 和OLEDB
  3. 数码相框(LCD、I2C)
  4. BMN:Boundary-matching network for temporal action proposal generation
  5. 前端与后台的交互方式
  6. 你买票了吗?五一火车票发售量创历史新高,车票总发售2209万张票
  7. Py之zhon:zhon库的简介、安装、使用方法之详细攻略
  8. 一年级关于计算机的手抄报内容是什么,小学一年级小知识手抄报内容
  9. mysql清空表中数据
  10. oracle给已有表添加主键