Spring学习记录(一)
1.Spring简介
Spring是一个轻量级的java开发框架。框架的主要优势之一就是分层架构,Spring使用基本的JavaBean,不仅限于服务器的开发。从简单性,可测试性和松耦合的角度而言,任何java应用都可以从spring中受益。
Spring的核心就是控制反转(IOC)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式)轻量级开源框架
1.1 为什么要使用Spring
(1) 方便解耦,简化开发:Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理
(2) AOP编程:Spring提供面向切面编程,可以方便的实现对程序的权限拦截,运行监控等功能
(3) 声明式事务:只需通过配置就可以完成对事务的管理,无需手动编程
(4) 方便程序测试:Spring对Junit4支持,可以通过注解方式的测试spring程序
(5) Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(Struts,Hibernate,MyBatis,Quartz,Dubbo,Zookeeper)的直接支持
(6) Spring对javaEE开发中非常难用的一些API(JDBC,JavaMail,远程调用等),都提供了封装,大大降低了API应用难度
2.SpringIOC,DI的实现原理
IOC:Inverse Of Control反转控制
将我们创建的对象的方式反转了,以前对象的创建是由我们开发人员自己维护,包括依赖关系也是自己注入,使用spring之后,对象的创建以及依赖关系可以由spring完成创建以及注入。反转控制就是反转了对象的创建方式,从我们自己创建反转给了程序。
DI:Dependency Injection依赖注入
实现IOC思想,DI做支持
注入方式:set方法注入,构造方法注入,字段注入(不推荐)
注入类型:值类型注入(八大数据基本类型),引用类型注入(将依赖对象注入)
3.Spring的概念
3.1 BeanFactory(过时)
BeanFactory最底层原始的接口,针对原始接口的实现类功能较为单一。它的实现类的容器的特点是每次在获得
对象时,才会创建对象。
3.2 ApplicationContext
ApplicationContext接口每次容器启动是就会创建容器中配置的所有对象,并提供更多的功能
他有两个典型的实现类:
(1) 从类路径下家在配置文件:ClassPathXmlApplicationContext
(2) 从硬盘绝对路径下加载配置文件:FileSystemXmlApplicationContext("d:/xxx/yyy")
在web开发中,使用applicationContext,在资源匮乏的环境可以使用BeanFactory。
4.Spring的配置详解
4.1 bean配置
<!-- 将User对象交给spring容器管理 -->
<!-- Bean元素:使用该元素描述需要spring容器管理的对象
name属性:给被管理的对象命令,获取对象时根据该名称获得对象
class属性:被管理对象的完整类名
id属性:与name属性一模一样,名称不可重复,不能使用特殊字符
-->
<bean id="user" name="user" class="com.javaweb.pojo.User"> </bean>
scope属性:
常用取值:
(1) singleton(默认值):单例对象,被标识为单例的对象在spring容器值会存在一个实例
(2) prototype:多例原型,被标识为多例的对象每次在获得时才会创建,每次创建都是新的对象
(3) request:对象与request生命周期一致
(4) session:web环境下对象与session生命周期一致
生命周期属性:
配置一个方法作为生命周期初始化方法,spring会在对象创建之后立即调用——init-method
配置一个方法作为生命周期的销毁方法,spring容器在关闭并销毁所有容器中的对象之前调用——destory-method
4.2 spring创建对象的方式
(1) 空参构造方式
(2) 静态工厂(了解)
(3) 实例工厂(了解)
3.1 BeanFactory(过时)
Spring学习记录(一)的更多相关文章
- 我的Spring学习记录(二)
本篇就简单的说一下Bean的装配和AOP 本篇的项目是在上一篇我的Spring学习记录(一) 中项目的基础上进行开发的 1. 使用setter方法和构造方法装配Bean 1.1 前期准备 使用sett ...
- 我的Spring学习记录(四)
虽然Spring管理这我们的Bean很方便,但是,我们需要使用xml配置大量的Bean信息,告诉Spring我们要干嘛,这还是挺烦的,毕竟当我们的Bean随之增多的话,xml的各种配置会让人很头疼. ...
- 我的Spring学习记录(五)
在我的Spring学习记录(四)中使用了注解的方式对前面三篇做了总结.而这次,使用了用户登录及注册来对于本人前面四篇做一个应用案例,希望通过这个来对于我们的Spring的使用有一定的了解. 1. 程序 ...
- Spring 学习记录3 ConversionService
ConversionService与Environment的关系 通过之前的学习(Spring 学习记录2 Environment),我已经Environment主要是负责解析properties和p ...
- Spring 学习记录8 初识XmlWebApplicationContext(2)
主题 接上文Spring 学习记录7 初识XmlWebApplicationContext refresh方法 refresh方法是定义在父类AbstractApplicationContext中的. ...
- Spring 学习记录6 BeanFactory(2)
主题 除了Spring 学习记录5 BeanFactory 里写的几个接口外,BeanFactory的实现类还实现了一些其他接口,这篇文章主要介绍这些接口和实现类. 结构 DefaultListabl ...
- Spring学习记录(九)---通过工厂方法配置bean
1. 使用静态工厂方法创建Bean,用到一个工厂类 例子:一个Car类,有brand和price属性. package com.guigu.spring.factory; public class C ...
- Spring学习记录(七)---表达式语言-SpEL
SpEL---Spring Expression Language:是一个支持运行时查询和操作对象图表达式语言.使用#{...}作为定界符,为bean属性动态赋值提供了便利. ①对于普通的赋值,用Sp ...
- Spring 学习记录5 BeanFactory
主题 记录我对BeanFactor接口的简单的学习. BeanFactory我感觉就是管理bean用的容器,持有一堆的bean,你可以get各种bean.然后也提供一些bean相关的功能比如别名呀之类 ...
- Spring学习记录(十四)---JDBC基本操作
先看一些定义: 在Spring JDBC模块中,所有的类可以被分到四个单独的包:1.core即核心包,它包含了JDBC的核心功能.此包内有很多重要的类,包括:JdbcTemplate类.SimpleJ ...
随机推荐
- Pycharm自动部署项目
Pycharm自动部署项目 大家好呀,又有几天不见各位了.断更了几天,给大家说声抱歉.清明节大家都挺忙的,有扫墓祭祖的,也有趁小长假去游玩的. 所以,在节后,更新也会照常进行,继续给大家分享本人的一些 ...
- thinkphp5加密解密
thinkphp5目前没有提供加密解密类,但是tp3.2中提供了好几种加密解密方法,我们可以吧3.2的这些类拿来使用. 1.将tp3.2中ThinkPHP\Library\Think的Crypt文件夹 ...
- Linux--1 初识
一.服务器核心知识 1.电脑和电脑的硬件组成 现在的人们几乎无时无刻不在使用着电脑!不管是桌上型电脑(桌机).笔记型电脑(笔电).平板电脑,还是智慧型手机等等,这些东西都算是电脑.虽然接触这么多,但是 ...
- 【ACM】棋盘覆盖 - 大数除
棋盘覆盖 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 在一个2k×2k(1<=k<=100)的棋盘中恰有一方格被覆盖,如图1(k=2时),现用一缺角的 ...
- D. Beautiful numbers
题目链接:http://codeforces.com/problemset/problem/55/D D. Beautiful numbers time limit per test 4 second ...
- 嵌入式CISC模型机设计
一. 课程设计的题目和内容 题目:设计一台嵌入式CISC模型计算机 采用定长CPU周期.联合控制方式,并运行能完成一定功能的机器语言源程序进行验证,机器语言源程序功能如下: 任意输入5个整数, ...
- Java的compare比较
package com.jckb; public class Name implements Comparable<Name>{ private String firstName; pri ...
- IE6、7下块级元素设置display:inline-block不换行的解决办法
使用背景 在实际的工作中,我们有的时候会把块元素设置为inline-block,这样做的目的有2个,一是块元素能够排列到一行,二是块元素就形成包裹性,能够自适应content area,而不必设置宽和 ...
- hibernate丢失更新
如果多个线程操作基于同一个查询结构对表中的记录进行修改,那么后修改的记录将会覆盖前面修改的记录,前面的修改就丢失掉了,这就叫做更新丢失.Serializable可以防止更新丢失问题的发生.其他的三个隔 ...
- 第2章 TCP-IP的工作方式
第2章 TCP-IP的工作方式 TCP/IP协议系统 为了实现TCP的功能,TCP/IP的创建者使用了模块化的设计.TCP/IP协议系统被分为不同的组件,每个组件分别负责通信过程的一个步骤.这种模块化 ...