Spring(1)

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

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 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3201 引用 • 8217 回帖

相关帖子

回帖

欢迎来到这里!

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

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

推荐标签 标签

  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    524 引用 • 4601 回帖 • 712 关注
  • LeetCode

    LeetCode(力扣)是一个全球极客挚爱的高质量技术成长平台,想要学习和提升专业能力从这里开始,充足技术干货等你来啃,轻松拿下 Dream Offer!

    209 引用 • 72 回帖 • 1 关注
  • 导航

    各种网址链接、内容导航。

    45 引用 • 177 回帖 • 3 关注
  • 一些有用的避坑指南。

    69 引用 • 93 回帖
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    315 引用 • 547 回帖
  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖
  • 百度

    百度(Nasdaq:BIDU)是全球最大的中文搜索引擎、最大的中文网站。2000 年 1 月由李彦宏创立于北京中关村,致力于向人们提供“简单,可依赖”的信息获取方式。“百度”二字源于中国宋朝词人辛弃疾的《青玉案·元夕》词句“众里寻他千百度”,象征着百度对中文信息检索技术的执著追求。

    63 引用 • 785 回帖 • 70 关注
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    19 引用 • 23 回帖 • 738 关注
  • Vue.js

    Vue.js(读音 /vju ː/,类似于 view)是一个构建数据驱动的 Web 界面库。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

    268 引用 • 666 回帖 • 1 关注
  • FlowUs

    FlowUs.息流 个人及团队的新一代生产力工具。

    让复杂的信息管理更轻松、自由、充满创意。

    1 引用 • 4 关注
  • Anytype
    3 引用 • 31 回帖 • 28 关注
  • 工具

    子曰:“工欲善其事,必先利其器。”

    300 引用 • 768 回帖
  • 浅吟主题

    Jeffrey Chen 制作的思源笔记主题,项目仓库:https://github.com/TCOTC/Whisper

    1 引用 • 28 回帖 • 2 关注
  • 阿里巴巴

    阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。

    43 引用 • 221 回帖 • 58 关注
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖
  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    20 引用 • 37 回帖 • 578 关注
  • 支付宝

    支付宝是全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验,及转账收款/水电煤缴费/信用卡还款/AA 收款等生活服务应用。

    29 引用 • 347 回帖 • 1 关注
  • SQLite

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

    4 引用 • 7 回帖 • 1 关注
  • TextBundle

    TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。

    1 引用 • 2 回帖 • 88 关注
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖
  • GitHub

    GitHub 于 2008 年上线,目前,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。正因为这些功能所提供的便利,又经过长期的积累,GitHub 的用户活跃度很高,在开源世界里享有深远的声望,并形成了社交化编程文化(Social Coding)。

    209 引用 • 2040 回帖
  • 人工智能

    人工智能(Artificial Intelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学。

    115 引用 • 318 回帖
  • RYMCU

    RYMCU 致力于打造一个即严谨又活泼、专业又不失有趣,为数百万人服务的开源嵌入式知识学习交流平台。

    4 引用 • 6 回帖 • 60 关注
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    98 引用 • 903 回帖
  • 链书

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

    链书社

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

    14 引用 • 257 回帖
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 445 关注
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 269 回帖 • 2 关注