Spring(1)

本贴最后更新于 2124 天前,其中的信息可能已经沧海桑田

1、spring 的介绍

ejb -> spring
表现层 Struts2 -> SpringMVC
持久层 hibernate -> mybatis
spring 无可替代

1)spring理解:
	spring是一个对象的容器,专门来管理对象。
	spring是一站式轻量级的框架,一站式具体表现在spring自己可以实现表现层、业务层、持久层分层功能。
2)spring有三大经典的思想,分别是"IOC"、"DI"、"AOP"

2、spring 容器:底层有 Map 结构,用来存放对象
底层产生对象:xml 配置文件 + 反射 + 工厂模式
applicationContext.xml
Class.forName("cn.itcast.spring.demo1.UserDaoImpl");

容器创建的三种方式
	ClassPathXmlApplicationContext
容器,也叫Bean工厂,常用接口有:BeanFactory/ApplicationContext/WebApplicationContext
相关源码:BeanDefinitionRegistry/BeanDefinition
	org.springframework.beans.factory.support.DefaultListableBeanFactory
	/** Map of bean definition objects, keyed by bean name */
	private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<String, BeanDefinition>(256);
	默认的键的名字:UserDaoImpl类名首字母小写
	org.springframework.beans.factory.support.DefaultSingletonBeanRegistry

3、IOC(inversion of controller)控制反转

1)IOC 的理解

	以前,我们自己创建对象:Student st=new Student("",18);
	现在,一个对象的创建和整个生命周期的维护都交给了spring,
		通过配置文件或者注解的方式让spring来管理对象
	IOC的本质,spring容器来创建,不是我们手动new,创建对象的权利交给了spring
	爱情买卖  当初是你要放开,放开就放开 自己new的对象与spring容器里的对象有区别
	
2)IOC入门案例体会
	(1)ioc底层实现原理(xml配置文件+反射+工厂模式)
	(2)ioc实现的步骤
		第一步:导入基本的坐标(beans,context,core,expression,日志包)
		第二步:在src目录下创建spring创建bean的配置文件applicationContext.xml(引入约束,配置bean)
		第三步:使用ClassPathXmlApplicationContext测试,从spring中获取bean
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		UserDaoImpl bean = (UserDaoImpl) context.getBean("userDao");
		
3)spring创建bean的三种方式(重点掌握无参构造来实例化对象)
	(1)无参构造(默认,实际开发中使用该方法)
	(2)静态工厂类,静态工厂方法
	(3)普通工厂类,普通实例工厂方法
	<bean id="该bean取个名字等同于name属性" class="类的完整路径" scope="singleton/prototype...."></bean>默认是singleton

3、DI(dependency injection)依赖注入
1)DI 的理解(对象的成员变量初始化)
给 bean 的成员变量初始化,该成员变量可以是一个普通的类型,也可以是一个引用类型变量。

2)DI实现的方式
	(1)set方法注入(最常用)
		在Bean所在类中提供成员变量的set方法
		在Spring的配置文件中使用<property name="" value=""/>
		能够注入的对象,一定都是在容器里面的
		A B
		<bean id="b" class="xxx.B">
			<property name="age" value="5" />
			<property name="color" value="黄色" />
		</>
		
		<bean id="a" class="xxx.A" >    
			<property name="age" value="20" />
			<property name="color" value="白色" />
			<property name="b1" ref="b">  private B b1;
		</>
		
		使用set方法注入对象、集合、properties数据
		a.<property name="" ref=""></property> 将已经声明的对象可以通过ref属性引入 
		b.<property><list name=""><value></value></list></property> 注入数组或者list
		c.<property><map name=""><entry key="" value=""></entry></map></property> 注入map
		d.<property><props name=""><prop></prop></props></property>  注入properties属性
				
	(2)有参构造注入
		在Bean所在类中提供成员变量的有参构造
		<bean id="tom" class="cn.itcast.spring.demo5.Tom" >
			<constructor-arg name="name" value="tom"></constructor-arg>
			<constructor-arg name="age" value="5"></constructor-arg>
			<constructor-arg name="color" value="灰色"></constructor-arg>
			<constructor-arg name="jerry" ref="jerry"></constructor-arg>
		</bean>

3)spel:spring的表达式
   value="#{dogAge}" 引用对象  ref="bean的id" 
   value="#{dogAge.age+20}"等同于value="#{dogAge.getAge()+20}"
   value="#{dogAge.getName()+'PersonPerson'}"
   
	<bean id="personAge" class="cn.itcast.spring.demo4.Person">
		<property name="age" value="#{dogAge.getAge()+20}"></property>
		<property name="username" value="#{dogAge.getName()+'PersonPerson'}"></property>
		<property name="dog" value="#{dogAge}"></property>
	</bean>
	

4.spring 和 web 整合

ContextLoaderListener  Context指:ServletContext
@Override
public void contextInitialized(ServletContextEvent event) {
	initWebApplicationContext(event.getServletContext());
}
servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, this.context);

启动程序 web.xml -> applicationContext.xml	
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3169 引用 • 8208 回帖

相关帖子

回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • SQLite

    SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。

    4 引用 • 7 回帖
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖
  • SpaceVim

    SpaceVim 是一个社区驱动的模块化 vim/neovim 配置集合,以模块的方式组织管理插件以
    及相关配置,为不同的语言开发量身定制了相关的开发模块,该模块提供代码自动补全,
    语法检查、格式化、调试、REPL 等特性。用户仅需载入相关语言的模块即可得到一个开箱
    即用的 Vim-IDE。

    3 引用 • 31 回帖 • 82 关注
  • CentOS

    CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同在于 CentOS 并不包含封闭源代码软件。

    238 引用 • 224 回帖
  • 分享

    有什么新发现就分享给大家吧!

    245 引用 • 1776 回帖 • 1 关注
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖 • 5 关注
  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    83 引用 • 165 回帖 • 5 关注
  • 七牛云

    七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化 PaaS 服务。围绕富媒体场景,七牛先后推出了对象存储,融合 CDN 加速,数据通用处理,内容反垃圾服务,以及直播云服务等。

    26 引用 • 222 回帖 • 167 关注
  • 域名

    域名(Domain Name),简称域名、网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。

    43 引用 • 208 回帖 • 1 关注
  • 电影

    这是一个不能说的秘密。

    120 引用 • 598 回帖
  • Swagger

    Swagger 是一款非常流行的 API 开发工具,它遵循 OpenAPI Specification(这是一种通用的、和编程语言无关的 API 描述规范)。Swagger 贯穿整个 API 生命周期,如 API 的设计、编写文档、测试和部署。

    26 引用 • 35 回帖
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    163 引用 • 473 回帖
  • 一些有用的避坑指南。

    69 引用 • 93 回帖
  • GraphQL

    GraphQL 是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据支撑。

    4 引用 • 3 回帖 • 16 关注
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖
  • 链书

    链书(Chainbook)是 B3log 开源社区提供的区块链纸质书交易平台,通过 B3T 实现共享激励与价值链。可将你的闲置书籍上架到链书,我们共同构建这个全新的交易平台,让闲置书籍继续发挥它的价值。

    链书社

    链书目前已经下线,也许以后还有计划重制上线。

    14 引用 • 257 回帖 • 1 关注
  • Angular

    AngularAngularJS 的新版本。

    26 引用 • 66 回帖 • 524 关注
  • 正则表达式

    正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。

    31 引用 • 94 回帖 • 2 关注
  • Markdown

    Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。

    165 引用 • 1474 回帖
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    942 引用 • 1458 回帖 • 109 关注
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    192 引用 • 291 回帖 • 430 关注
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 348 关注
  • Vim

    Vim 是类 UNIX 系统文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff)、语法高亮、全面的帮助系统、本地脚本(Vimscript)和便于选择的可视化模式。

    28 引用 • 66 回帖 • 7 关注
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    116 引用 • 99 回帖 • 249 关注
  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    180 引用 • 120 回帖 • 1 关注
  • 创业

    你比 99% 的人都优秀么?

    83 引用 • 1398 回帖
  • uTools

    uTools 是一个极简、插件化、跨平台的现代桌面软件。通过自由选配丰富的插件,打造你得心应手的工具集合。

    5 引用 • 13 回帖