spring 框架精读—坚持更新中
来源:互联网 发布:天刀太白捏脸数据 编辑:程序博客网 时间:2024/06/06 01:18
1.1、Spring简介
Spring Framework是一个开源的Java/Java EE全功能栈(full-stack)的应用程序框架,以Apache许可证形式发布,也有.NET平台上的移植版本。该框架基于 Expert One-on-One Java EE Design and Development(ISBN 0-7645-4385-7)一书中的代码,最初由Rod Johnson和Juergen Hoeller等开发。Spring Framework提供了一个简易的开发方式,这种开发方式,将避免那些可能致使底层代码变得繁杂混乱的大量的属性文件和帮助类。
spring官方模块结构图
1.2、Spring是轻量级、一站式的开源框架
- 轻量级:从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。
- 一站式:spring提供javaEE三层结构、每一层都有不同的技术支持。
1.3、Spring的基本核心概念
- AOP:面向切面编程、遵守开闭原则OCP(Open-Close Principle)、是扩展功能而不是修改源代码来实现。
- IOC:控制反(IOC)| 【别名】依赖注入(DI-Dependency Injection)、Spring通过控制反转(IoC)的技术促进了低耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。
1.3.1、Spring中的IOC底层原理
1.3.2、IOC入门案例
package spring.ioc;/** * @auther 陈郑游 * @create 2016-12-01-20:31 * @功能描述 * @公司地址 */public class User {void getAdd(){System.out.println("User getAdd IOC 测试! ! !");}}
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"><!--上面的schema约束没必要那么多--><bean id="user" class="spring.ioc.User"></bean></beans>
package spring.ioc;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.ConfigurableApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;/** * @auther 陈郑游 * @create 2016-12-01-20:36 * @功能描述 IOC入门测试 * @公司地址 */public class UserTest {@Testpublic void userTest(){//1、加载配置文件ApplicationContext context = newClassPathXmlApplicationContext("spring/spring-bean.xml");//2、得到实例User user = (User)context.getBean("user");user.getAdd();//关闭资源((ConfigurableApplicationContext)context).close();}}
1.4、Spring容器
spring容器最基本的接口就是BeanFactor。BeanFactory负责配置、创建、管理Bean,它有一个子接口:ApplicationContext,因此也称之为Spring上下文。Spring容器负责管理Bean与Bean之间的依赖关系。
BeanFactory接口包含以下几个基本方法:
- Boolean containBean(String name):判断Spring容器是否包含id为name的Bean实例。
- <T> getBean(Class<T> requiredTypr):获取Spring容器中属于requiredType类型的唯一的Bean实例。
- Object getBean(String name):返回Sprin容器中id为name的Bean实例。
- <T> T getBean(String name,Class requiredType):返回容器中id为name,并且类型为requiredType的Bean
- Class <?> getType(String name):返回容器中指定Bean实例的类型。
调用者只需使用getBean()方法即可获得指定Bean的引用,无须关心Bean的实例化过程。即Bean实例的创建过程完全透明。
在使用BeanFactory接口时,我们一般都是使用这个实现类:org.springframework.beans.factory.xml.XmlBeanFactory。然而ApplicationContext作为BeanFactory的子接口,使用它作为Spring容器会更加方便。它的实现有:
- FileSystemXmlApplicationContext
- ClassPathXmlApplicationContext
- AnnotationConfigApplicationContex
创建Spring容器实例时,必须提供Spring容器管理的Bean的详细配置信息。Spring的配置信息通常采用xml配置文件来设置,因此,创建BeanFactory实例时,应该提供XML配置文件作为参数。
XML配置文件通常使用Resource对象传入。Resource接口是Spring提供的资源访问接口,通过使用该接口,Spring能够以简单、透明的方式访问磁盘、类路径以及网络上的资源。
对于Java EE应用而言,可在启动Web应用时自动加载ApplicationContext实例,接受Spring管理的Bean无须知道ApplicationContext的存在。一般使用如下方式实例化BeanFactory。
//1、加载配置文件ApplicationContext context = newClassPathXmlApplicationContext("spring/spring-bean.xml");
1.5、Bean
- id属性:不能包含特殊字符(如&…#等)、根据id配置属性。
- name属性:功能跟id一样、但name属性包含特殊字符(如&…#等)、根据id配置属性。
- class属性:创建对象的路径。
- scope属性:作用域属性。
singleton
在每个Spring IoC容器中一个bean定义对应一个单实例对象(默认)。
prototype
一个bean定义对应多个对象实例。
request
在一次HTTP请求中,一个bean定义对应一个实例;即每次HTTP请求将会有各自的bean实例,它们依据某个bean定义创建而成。该作用域仅在基于web的Spring ApplicationContext
情形下有效。
session
在一个HTTP Session
中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext
情形下有效。
global session
在一个全局的HTTP Session
中,一个bean定义对应一个实例。典型情况下,仅在使用portlet context的时候有效。该作用域仅在基于web的Spring ApplicationContext
情形下有效。
1.5.1、Bean属性注入三种方式
- spring 框架精读—坚持更新中
- Spring 框架面试题总结(待续更新中...)
- 框架整合--更新中---
- 坚持中...
- 框架整合 FAQ 更新中。。。
- spring+hibernate整合,更新中。。。
- 带病坚持更新……
- Git操作总结(坚持更新)
- Struts学习体验【坚持更新】
- 802.11协议精读18:协议族框架简介
- 关于框架中核心的spring框架
- Spring框架中配置数据库
- Spring框架中调用问题
- Spring框架中使用注解
- Spring框架中七大模块
- Spring MVC 框架中Spring扫描问题
- LevelDB:Cache源码精读——缓存
- LevelDB:Bloom源码精读——数据结构
- 把已经存在的volume挂载到instance
- PHP基础
- Sigar的配置与使用
- FutureTask(Runnable runnable, V result) 中的result
- 记录帖(持续更新):httpclient post 读取数据不全的原因汇总
- spring 框架精读—坚持更新中
- 二叉树问题总结(三)
- VC6.0编程常见错误汇总
- MessagePack介绍
- 两种网络协议的比较(TCP&UDP)
- JSF参数传递方式之f:param标签和f:attribute区别
- 我为什么烧钱让孩子上全英语幼儿园
- 关于RStudio3.2.2 安装包失败
- Loan Amortization Application in WPF using VC++