spring 框架精读—坚持更新中

来源:互联网 发布:天刀太白捏脸数据 编辑:程序博客网 时间:2024/06/06 01:18

     

1.1、Spring简介

     Spring Framework是一个开源的JavaJava EE全功能栈(full-stack)的应用程序框架,以Apache许可证形式发布,也有.NET平台上的移植版本。该框架基于 Expert One-on-One Java EE Design and DevelopmentISBN 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底层原理


不适用 Spring 框架解析图


使用 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

        在Spring中,那些组成应用的主体(backbone)及由Spring IoC容器所管理的对象被称之为bean。简单地讲,bean就是由Spring容器初始化、装配及被管理的对象,除此之外,bean就没有特别之处了(与应用中的其他对象没有什么区别)。而bean定义以及bean相互间的依赖关系将通过配置元数据来描述。
            
     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属性注入三种方式












0 0
原创粉丝点击