spring学习笔记1——部分基础及概念
2014-03-22 20:21
351 查看
一、什么是spring
Spring是一个开源的控制反转(IOC)和面向切面(AOP)的容器框架。它的主要目的是简化企业开发。
二、spring如何简化java开发
1、基于POJO的轻量级和最小侵入性编程
2、通过依赖注入和面向接口实现松耦合
3、基于切面和惯例进行声明式编程
4、通过切面和模板减少样板式代码
三、spring核心(6个模块)
1、spring核心模块(Core Spring Containter):负责spring应用中Bean的创建、配置和管理。
2、springAOP模块(AOP):对面向切面编程提供丰富的支持,是spring应用系统开发切面的基础。
3、数据访问与集成:与数据库进行交换
4、web与远程调用:除了提供面向用户的web应用,还提供了构建与其他应用交换的几种远程调用的选择。
5、测试:提供了一系列的模拟对象实现
6、instrumentation:(个人感觉是与服务器有关的)。
四、什么是控制反转
控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就有应用转移到外部容器。控制权的转移就是所谓反转。、
五、spring容器
Spring容器是spring的核心,它创建对象,并装配、配置他们和管理他们的整个生命周期。Spring容器使用依赖注入管理构成应用的组件,它会创建相互协作的组件之间的关联。Spring自带了多种容器实现,可以归为两类不同的类型:
1、Bean工厂:最简单的容器,提供基本的DI支持。
2、 应用上下文(3种):基于beanFactory之上构建,并提供面向应用的服务(如从属性文件解析问题信息的能力等)。
a、ClassPathXmlApplicationContext—从类路径下的XML配置文件中加载上下文定义,把应用上下文定义文件当作类资源
b、FileSystemXmlApplicationContext—读取文件系统下的XML配置文件并加载上下文定义
c、XmlWebApplicationContext—读取Web应用下的XML配置文件并装载上下文定义
注:我们可以通过getBean()方法从容器中获取bean
六、spring中实例化bean的三中方法
1、类构造器实例化
2、静态工厂方法实例化
3、实例工厂方法实例化
七、bean的作用域
1、singleton:单实例作用域,这是Spring容器默认的作用域,使用singleton作用域生成的是单实例,在整个Bean容器中仅保留一个实例对象供所有调用者共享引用。单例模式对于那些无会话状态的Bean(如辅助工具类、DAO组件、业务逻辑组件等)是最理想的选择。
2、prototype:原型模式,这是多实例作用域,针对每次不同的请求,Bean容器均会生成一个全新的Bean实例以供调用者使用。prototype作用域非常适用于那些需要保持会话状态的Bean实例,有一点值得注意的就是,Spring不能对一个prototype Bean的整个生命周期负责,容器在初始化、装配好一个prototype实例后,将它交给客户端,随后就对该prototype实例不闻不问了。因此,客户端要负责prototype实例的生命周期管理。
3、request:针对每次HTTP请求,Spring容器会根据Bean的定义创建一个全新的Bean实例, 且该Bean实例仅在当前HTTP request内有效,因此可以根据需要放心地更改所建实例的内部状态, 而其他请求中根据Bean定义创建的实例,将不会看到这些特定于某个请求的状态变化。 当处理请求结束,request作用域的Bean实例将被销毁。该作用域仅在基于web的Spring ApplicationContext情形下有效。
4、session:针对某个HTTP Session,Spring容器会根据Bean定义创建一个全新的Bean实例,且该Bean实例仅在当前HTTP Session内有效。 与request作用域一样,我们可以根据需要放心地更改所创建实例的内部状态,而别的HTTP Session中根据Bean定义创建的实例, 将不会看到这些特定于某个HTTP Session的状态变化。 当HTTP Session最终被废弃的时候,在该HTTP Session作用域内的Bean实例也会被废弃掉。该作用域仅在基于Web的Spring
ApplicationContext情形下有效。
5、global session:该作用域类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的Web应用中才有意义。portlet规范定义了全局Session的概念,它被所有构成某个portlet Web应用的各种不同的portlet所共享。在global session作用域中定义的Bean被限定于全局portlet Session的生命周期范围内。如果我们是在编写一个标准的基于Servlet的Web应用,并且定义了一个或多个具有global
session作用域的Bean,系统会使用标准的HTTP Session作用域,并且不会引起任何错误。该作用域仅在基于Web的Spring ApplicationContext情形下有效
八、bean什么时候实例化
默认情况下(单例)容器实例化时就被实例化,而scope=“prototype”时,只有调用getBean()方法是实例化。可以改变lazy-inti属性改变实例化时间(即将在单例情况是lazy-inti属性设置为true是,它也是在调用getBean()方法是实例化)。
九、Init-method=””与Destroy-method=””的运用
这两个属性分别是用于bean实例化后执行的方法和bean销毁前执行的方法。
十、在Spring装载配置文件后,Spring工厂实例化完成,开始处理
1)使用默认构造方法或指定构造参数进行Bean实例化。
2)根据property标签的配置调用Bean实例中的相关set方法完成属性的赋值。
3)如果Bean实现了BeanNameAware接口,则调用setBeanName()方法传入当前Bean的ID。
d829
4)如果Bean实现了BeanFactoryAware接口,则调用setBeanFactory()方法传入当前工厂实例的引用。
5)如果Bean实现了ApplicationContextAware接口,则调用setApplicationContext()方法传入当前ApplicationContext实例的引用。
6)如果有BeanPostProcessor与当前Bean关联,则与之关联的对象的postProcess-
BeforeInitialzation()方法将被调用。
7)如果在配置文件中配置Bean时设置了init-method属性,则调用该属性指定的初始化方法。
8)如果有BeanPostProcessor与当前Bean关联,则与之关联的对象的postProcess-
AfterInitialzation()方法将被调用。
9)Bean实例化完成,处于待用状态,可以被正常使用了。
10)当Spring容器关闭时,如果Bean实现了DisposableBean接口,则destroy()方法将被调用。
11)如果在配置文件中配置Bean时设置了destroy-method属性,则调用该属性指定的方法进行销毁前的一些处理。
12)Bean实例被正常销毁。
十一、Spring配置里,id不可以是特殊符号,name则可以含有特殊符号。如果没有特殊符号,一般用id表示bean的名称
十二、装配
创建应用对象之间的协作关系的行为通常称为装配。
十三、spring装配方式:
注入依赖对象有手工装配和自动装配两种方式。手工装配包含了:构造器注入、setter注入和注解注入。
十四、注解注入
Spring3支持@Atutowierd、@Inject、@Resource三种,但Spring容器默认禁用注解装配。启用注解的方式很简单,就是使用spring的context命名空间配置中的<context:annotation-config>元素。'
十五、@Atutowierd注解
@Atutowierd(默认按类型装配)除了可以标注在定义属性的地方,还可以标在需要装配bean引用的任意地方,比如setter、构造器(我标注构造器时,有两个参数时,会出错,不懂)。但如果只@Atutowierd时,缺点比较大,就是应用中必须只有一个bean合适装配到@Atutowierd标注的属性或参数中,否则就会出错。但同时他也为我们提供了两种解决方法:用required属性,如果将其赋值FALSE,那么找不到bean时赋予null值;用@Qualifier(“bean的名称”),以实现按名字装配。
十六、@Resource注解
@Resource默认按名称装配,当找不到与名称匹配的bean才会按类型匹配。
十七、@Inject注解
跟@Atutowierd也是默认根据类型装配,但该注解没有required属性,所以注解所标注的依赖关系必须存在,不过,对于有多个bean适合装配的时候,@Inject提供了@Named(“bean的名称”)。实际上,@Named就是一个使用@Qualifier注解所标注的注解。
十八、集合类型注入
Spring提供了急着集合类型的注入方法,有set、list、map、properties。
十九、自动装配
在xml的bean中添加autowire属性。byType:按类型装配;byName:按名称装配;constructor:与byType类型,不同之处在它采用构造器参数;autodect:自动决定采用byType还是constructor进行装配,如果发现默认构造器,那么将采用byType方式。
二十、自动扫描管理bean
通过在classpath自动扫描方式把组件纳入spring容器中管理,它可以在类路径底下寻找标注了@Component、@Service、@controler、@Repository注解的类,并把这些类纳入spring容器中管理,它的作用和在xml文件使用bean节点配置组件是一样的。其中,@Service用于标注业务层组件;@controler用于标注控制层组件(如struts中的action);@Repository用于标注数据访问层组件,即dao组件;@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。其实,目前四个注解是没有区别的。其实,spring也提供了其他注解为自动扫描,比如用@PostConstruct代替init-method="",用@PreDestroy代替destroy-method="",用@scope()设置单例或多例。
Spring是一个开源的控制反转(IOC)和面向切面(AOP)的容器框架。它的主要目的是简化企业开发。
二、spring如何简化java开发
1、基于POJO的轻量级和最小侵入性编程
2、通过依赖注入和面向接口实现松耦合
3、基于切面和惯例进行声明式编程
4、通过切面和模板减少样板式代码
三、spring核心(6个模块)
1、spring核心模块(Core Spring Containter):负责spring应用中Bean的创建、配置和管理。
2、springAOP模块(AOP):对面向切面编程提供丰富的支持,是spring应用系统开发切面的基础。
3、数据访问与集成:与数据库进行交换
4、web与远程调用:除了提供面向用户的web应用,还提供了构建与其他应用交换的几种远程调用的选择。
5、测试:提供了一系列的模拟对象实现
6、instrumentation:(个人感觉是与服务器有关的)。
四、什么是控制反转
控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就有应用转移到外部容器。控制权的转移就是所谓反转。、
五、spring容器
Spring容器是spring的核心,它创建对象,并装配、配置他们和管理他们的整个生命周期。Spring容器使用依赖注入管理构成应用的组件,它会创建相互协作的组件之间的关联。Spring自带了多种容器实现,可以归为两类不同的类型:
1、Bean工厂:最简单的容器,提供基本的DI支持。
2、 应用上下文(3种):基于beanFactory之上构建,并提供面向应用的服务(如从属性文件解析问题信息的能力等)。
a、ClassPathXmlApplicationContext—从类路径下的XML配置文件中加载上下文定义,把应用上下文定义文件当作类资源
b、FileSystemXmlApplicationContext—读取文件系统下的XML配置文件并加载上下文定义
c、XmlWebApplicationContext—读取Web应用下的XML配置文件并装载上下文定义
注:我们可以通过getBean()方法从容器中获取bean
六、spring中实例化bean的三中方法
1、类构造器实例化
2、静态工厂方法实例化
3、实例工厂方法实例化
七、bean的作用域
1、singleton:单实例作用域,这是Spring容器默认的作用域,使用singleton作用域生成的是单实例,在整个Bean容器中仅保留一个实例对象供所有调用者共享引用。单例模式对于那些无会话状态的Bean(如辅助工具类、DAO组件、业务逻辑组件等)是最理想的选择。
2、prototype:原型模式,这是多实例作用域,针对每次不同的请求,Bean容器均会生成一个全新的Bean实例以供调用者使用。prototype作用域非常适用于那些需要保持会话状态的Bean实例,有一点值得注意的就是,Spring不能对一个prototype Bean的整个生命周期负责,容器在初始化、装配好一个prototype实例后,将它交给客户端,随后就对该prototype实例不闻不问了。因此,客户端要负责prototype实例的生命周期管理。
3、request:针对每次HTTP请求,Spring容器会根据Bean的定义创建一个全新的Bean实例, 且该Bean实例仅在当前HTTP request内有效,因此可以根据需要放心地更改所建实例的内部状态, 而其他请求中根据Bean定义创建的实例,将不会看到这些特定于某个请求的状态变化。 当处理请求结束,request作用域的Bean实例将被销毁。该作用域仅在基于web的Spring ApplicationContext情形下有效。
4、session:针对某个HTTP Session,Spring容器会根据Bean定义创建一个全新的Bean实例,且该Bean实例仅在当前HTTP Session内有效。 与request作用域一样,我们可以根据需要放心地更改所创建实例的内部状态,而别的HTTP Session中根据Bean定义创建的实例, 将不会看到这些特定于某个HTTP Session的状态变化。 当HTTP Session最终被废弃的时候,在该HTTP Session作用域内的Bean实例也会被废弃掉。该作用域仅在基于Web的Spring
ApplicationContext情形下有效。
5、global session:该作用域类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的Web应用中才有意义。portlet规范定义了全局Session的概念,它被所有构成某个portlet Web应用的各种不同的portlet所共享。在global session作用域中定义的Bean被限定于全局portlet Session的生命周期范围内。如果我们是在编写一个标准的基于Servlet的Web应用,并且定义了一个或多个具有global
session作用域的Bean,系统会使用标准的HTTP Session作用域,并且不会引起任何错误。该作用域仅在基于Web的Spring ApplicationContext情形下有效
八、bean什么时候实例化
默认情况下(单例)容器实例化时就被实例化,而scope=“prototype”时,只有调用getBean()方法是实例化。可以改变lazy-inti属性改变实例化时间(即将在单例情况是lazy-inti属性设置为true是,它也是在调用getBean()方法是实例化)。
九、Init-method=””与Destroy-method=””的运用
这两个属性分别是用于bean实例化后执行的方法和bean销毁前执行的方法。
十、在Spring装载配置文件后,Spring工厂实例化完成,开始处理
1)使用默认构造方法或指定构造参数进行Bean实例化。
2)根据property标签的配置调用Bean实例中的相关set方法完成属性的赋值。
3)如果Bean实现了BeanNameAware接口,则调用setBeanName()方法传入当前Bean的ID。
d829
4)如果Bean实现了BeanFactoryAware接口,则调用setBeanFactory()方法传入当前工厂实例的引用。
5)如果Bean实现了ApplicationContextAware接口,则调用setApplicationContext()方法传入当前ApplicationContext实例的引用。
6)如果有BeanPostProcessor与当前Bean关联,则与之关联的对象的postProcess-
BeforeInitialzation()方法将被调用。
7)如果在配置文件中配置Bean时设置了init-method属性,则调用该属性指定的初始化方法。
8)如果有BeanPostProcessor与当前Bean关联,则与之关联的对象的postProcess-
AfterInitialzation()方法将被调用。
9)Bean实例化完成,处于待用状态,可以被正常使用了。
10)当Spring容器关闭时,如果Bean实现了DisposableBean接口,则destroy()方法将被调用。
11)如果在配置文件中配置Bean时设置了destroy-method属性,则调用该属性指定的方法进行销毁前的一些处理。
12)Bean实例被正常销毁。
十一、Spring配置里,id不可以是特殊符号,name则可以含有特殊符号。如果没有特殊符号,一般用id表示bean的名称
十二、装配
创建应用对象之间的协作关系的行为通常称为装配。
十三、spring装配方式:
注入依赖对象有手工装配和自动装配两种方式。手工装配包含了:构造器注入、setter注入和注解注入。
十四、注解注入
Spring3支持@Atutowierd、@Inject、@Resource三种,但Spring容器默认禁用注解装配。启用注解的方式很简单,就是使用spring的context命名空间配置中的<context:annotation-config>元素。'
十五、@Atutowierd注解
@Atutowierd(默认按类型装配)除了可以标注在定义属性的地方,还可以标在需要装配bean引用的任意地方,比如setter、构造器(我标注构造器时,有两个参数时,会出错,不懂)。但如果只@Atutowierd时,缺点比较大,就是应用中必须只有一个bean合适装配到@Atutowierd标注的属性或参数中,否则就会出错。但同时他也为我们提供了两种解决方法:用required属性,如果将其赋值FALSE,那么找不到bean时赋予null值;用@Qualifier(“bean的名称”),以实现按名字装配。
十六、@Resource注解
@Resource默认按名称装配,当找不到与名称匹配的bean才会按类型匹配。
十七、@Inject注解
跟@Atutowierd也是默认根据类型装配,但该注解没有required属性,所以注解所标注的依赖关系必须存在,不过,对于有多个bean适合装配的时候,@Inject提供了@Named(“bean的名称”)。实际上,@Named就是一个使用@Qualifier注解所标注的注解。
十八、集合类型注入
Spring提供了急着集合类型的注入方法,有set、list、map、properties。
十九、自动装配
在xml的bean中添加autowire属性。byType:按类型装配;byName:按名称装配;constructor:与byType类型,不同之处在它采用构造器参数;autodect:自动决定采用byType还是constructor进行装配,如果发现默认构造器,那么将采用byType方式。
二十、自动扫描管理bean
通过在classpath自动扫描方式把组件纳入spring容器中管理,它可以在类路径底下寻找标注了@Component、@Service、@controler、@Repository注解的类,并把这些类纳入spring容器中管理,它的作用和在xml文件使用bean节点配置组件是一样的。其中,@Service用于标注业务层组件;@controler用于标注控制层组件(如struts中的action);@Repository用于标注数据访问层组件,即dao组件;@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。其实,目前四个注解是没有区别的。其实,spring也提供了其他注解为自动扫描,比如用@PostConstruct代替init-method="",用@PreDestroy代替destroy-method="",用@scope()设置单例或多例。
相关文章推荐
- Spring学习笔记一:基础概念
- 【学习笔记】分区表和分区索引——概念部分(一)
- 【SpringBoot学习笔记】SpringBoot_03_SpringData—JpaRepository部分字段查询功能
- SpringMVC + Spring + MyBatis 学习笔记:提交数据遭遇基础类型和日期类型报400错误解决方法
- [原]spring学习笔记9.1-Spring对Aop的支持-AOP基础篇
- 《Spring 3.x 企业应用开发实战》学习笔记 第三章 IoC容器概述 3.2 相关Java基础知识 类装载器 反射机制
- Spring 学习笔记(12)—— AOP 基础
- [好程序员训练营]----java基础之多线程部分学习笔记
- Beginning Spring学习笔记——第6章(一)Spring事务管理基础
- 汇编学习笔记001——基础概念和知识
- Zeroc Ice 学习笔记--基础部分
- NodeJS学习笔记--NodeJS+Express基础概念梳理记录
- Spring学习笔记-基础
- Java学习笔记-《Java程序员面试宝典》-第四章基础知识-4.1基本概念(4.1.10)
- Spring学习笔记:1、概念理解
- Spring基础笔记(一)--基本概念及模块
- java spring 基础 学习笔记
- Ext学习笔记(-)基础部分
- html学习笔记-基础概念
- C++ 第一章基础部分学习笔记