Spring概念入门

Spring是什么
spring是一个开源的java框架,集成了各种主流的技术包括web mvc,orm,ejb,rmi,javamail等
他就象一个粘合济,在实际项目中,将前后台程序粘合在一起,构建出一个完整的系统。

spring中的各个组件也可独立使用,你可以在你的项目中选择性的使用spring提供的某一部分功能

Spring的核心是ioc和aop

什么是IOC

Inversion of Control,控制反转或反转控制,其和另外一个概念DI-Dependency Injection依赖注入
等价。

到底如何来理解IOC?

IOC确切的说,他是一种思想、概念,跟OOP是一种编程思想一样,他是在大量的项目实践中总结出来了
的一种精妙地程序设计思想。在原先的程序设计中,我们通常是通过new XXX(),其中,XXX就是某个类
的名称,在没有ioc思想引入时,我们程序中大量充斥着new XXX()这样的代码。这些代码都需要我们程
序员手工编写。而引入了ioc思想之后,对象的管理全部交给Spring这个容器来管理,当我们程序需要
对应类的对象时,我们直接从Spring容器里面获取,换句话说,就是Spring容器把产生好的对象交给了
我们的程序,这种方式就叫做注入(就跟医生拿着可怕的针管将液体注入到我们的屁股上一样,为什么
要注入,还不是你的屁股需要嘛!因为你需要,所以我给你,这就是DI)

而IOC的深层含义就是,将原先对象产生的主动权交给了Spring容器,由Spring容器来为我们完成对象的
new的过程,并将对象在我们需要时交给我们。

Spring正是IOC思想的一个完美产物和实践者!

什么是aop

Aspect Oriented Programming,面向方面编程,它也是一种编程思想,它是对OOP编程思想的一种升华
OOP强调的是对象,而aop强调的是面(不是饺子)

那么,什么是面?

如果拿我们的教室做比方,那么教室的前门和后窗就是一个面,一个截面,通过这样的截面,将我们这块
空间分成了室内、窗外和门外三部分。

如果拿我们吃的汉堡做比方,那么汉堡的夹心的前后就是一个面,一个截面,通过这样的截面,将我们的
普通面包分成了面包上层、夹心、面包下层。

如果。。。

还是拿我们的程序代码来说,
如果我们的dao用jdbc实现,那么在dao的每一个方法里都充斥着这样的代码,
    打开连接
    执行sql语句
    关闭连接
那么,这时,我们就可以在执行sql前后做出一个截面,通过这样的截面,将我们的程序代码分开,将打开
连接和关闭连接交给AOP去做,我们程序员只关注执行不同sql语句部分,避免了在dao的每个方法中都要编
写重复的打开连接和关闭连接代码。

如果我们的dao用hibernate实现,那么在dao的每一个方法里都充斥着这样的代码
    打开session
    执行session动作
    关闭session

同理,我们就可以在执行session动作前后做出一个截面,通过这样的截面,将我们的程序代码分开,将打开
session和关闭session交给AOP去做,我们程序员只关注执行session动作,避免了代码的重复岂不更好

这就是AOP,好好理解吧,那可是个漫长的思想体验过程!祝你好运!

 

-----------------------------------------------------------------------------------------------------------------------------------------------

spring的另外一个入门概念

 

一、    Spring诞生
Spring是一个开源框架,目前在开源社区的 人气很旺,被认为是最有前途的开源框架之一。她是由Rod Johnson创建的,她的诞生是为了简化企业级系统的开发。说道Spring就不得不说 EJB,因为Spring在某种意义上是EJB的替代品,她是一种轻量级的容器。用过EJB的人都知道EJB很复杂,为了一个简单的功能你不得不编写多个 Java文件和部署文件,他是一种重量级的容器。也许你不了解EJB,你可能对“轻(重)量级”和“容器”比较陌生,那么这里我简单介绍一下。
1、什么是容器
“容 器”,这个概念困扰我好久。从学习Tomcat开始就一直对此感到困惑。感性的来讲,容器就是可以用来装东西的物品。那么在编程领域就是指用来装对象 (OO的思想,如果你连OO都不了解,建议你去学习OO先)的对象。然而这个对象比较特别,它不仅要容纳其他对象,还要维护各个对象之间的关系。这么讲可 能还是太抽象,来看一个简单的例子:
代码片断1:

  1. public  class  Container  
  2. {
  3.     public  void  init()
  4.     {
  5.     Speaker s = new  Speaker();
  6.     Greeting g = new  Greeting(s);
  7.     }
  8. }


可 以看到这里的Container类(容器)在初始化的时候会生成一个Speaker对象和一个Greeting对象,并且维持了它们的关系,当系统要用这 些对象的时候,直接问容器要就可以了。这就是容器最基本的功能,维护系统中的实例(对象)。如果到这里你还是感到模糊的话,别担心,我后面还会有相关的解 释。

2、轻量级与重量级
所谓“重量级”是相对于“轻量级”来讲的,也可以说“轻量级”是相对于重量级来讲的。在Spring出现 之前,企业级开发一般都采用EJB,因为它提供的事务管理,声明式事务支持,持久化,分布计算等等都“简化”了企业级应用的开发。我这里的“简化”打了双 引号,因为这是相对的。重量级容器是一种入侵式的,也就是说你要用EJB提供的功能就必须在你的代码中体现出来你使用的是EJB,比如继承一个接口,声明 一个成员变量。这样就把你的代码绑定在EJB技术上了,而且EJB需要JBOSS这样的容器支持,所以称之为“重量级”。
相对而言“轻量级”就是 非入侵式的,用Spring开发的系统中的类不需要依赖Spring中的类,不需要容器支持(当然Spring本身是一个容器),而且Spring的大小 和运行开支都很微量。一般来说,如果系统不需要分布计算或者声明式事务支持那么Spring是一个更好的选择。

二、    几个核心概念
在我看来Spring的核心就是两个概念,反向控制(IoC),面向切面编程(AOP)。还有一个相关的概念是POJO,我也会略带介绍。
1、POJO
我 所看到过的POJO全称有两个,Plain Ordinary Java Object,Plain Old Java Object,两个差不多,意思 都是普通的Java类,所以也不用去管谁对谁错。POJO可以看做是简单的JavaBean(具有一系列Getter,Setter方法的类)。严格区分 这里面的概念没有太大意义,了解一下就行。
2、    IoC
IoC的全称是Inversion of Control,中文翻译反向控 制或者逆向控制。这里的反向是相对EJB来讲的。EJB使用JNDI来查找需要的对象,是主动的,而Spring是把依赖的对象注入给相应的类(这里涉及 到另外一个概念“依赖注入”,稍后解释),是被动的,所以称之为“反向”。先看一段代码,这里的区别就很容易理解了。
代码片段2:

  1. public  void  greet()
  2. {
  3. Speaker s = new  Speaker();
  4. s.sayHello();
  5. }


代码片段3:

  1. public  void  greet()
  2. {
  3. Speaker s = (Speaker)context.lookup("ejb/Speaker" );
  4. s.sayHello();
  5. }


代码片段4:

  1. public  class  Greeting 
  2. {
  3.     public  Speaker s;
  4.     public  Greeting(Speaker s)
  5.     {
  6.         this .s = s;
  7.     }
  8.     public  void  greet()
  9.     {
  10.         s.sayHello();
  11.     }
  12. }

 

-----------------------------------------------------------------------------------------------------------------------------------------------

剖析Spring容器的作用及实现方式

,Spring在其中是一个非常重要的框架

,Spring在其中是一个非常重要的框架      们 在使用ssh整合项目的时候,Spring在其中是一个非常重要的框架,它在其中可以说是一个最核心的框架,提到spring我们不得不提它的IOC容器 的功能了!它是一个大工厂,可以在其中产生和管理很多的bean,下面,请随阿堂一起来好好看看spring的容器功能方面的介绍,这对于我们在解决 ssh框架整合中的问题,进行测试时是非常有用的!

bsp;我们在使用ssh整合项目的时候 1.spring容器
    Spring 有两个核心接口BeanFactory和ApplicationContext,其中ApplicationContext是BeanFactory的子 接口,它们代表了Spring容器,Spring容器是产生Bean的工厂,用于管理容器中的Bean。Bean是Spring管理的基本单位,在 spring的J2EE应用中,所有的组件都是Bean。Bean包括数据源、Hibernate的SessionFactory、事务管理器等。

,它在其中可以说是一个最核心的框架,提到

     应 用中的所有组件,都处于spring的管理下,都被spring以Bean的方式管理,spring负责创建Bean实例,并管理其生命周期。 Spring里的Bean是非常广义的概念,任何Java对象和Java组件都被当成Bean处理,甚至这些组件,并不是标准的JAVABEAN。
    Bean在spring容器中运行,无须感受Spring容器的存在,一样可以接受spring的信赖注入,包括Bean属性的注入、合作者的注入、信赖关系的注入等。
spring容器负责创建Bean实例,所以需要知道每个Bean的实现类,JAVA程序的实现面向接口编程,无须关心Bean实例的实现。但Spring容器必须能精确知道每个Bean的实现类,因此Spring配置文件必须精确配置Bean的实现类。

,Spring在其中是一个非常重要的框架

 

   Spring容器最基本的接口就是BeanFactory.BeanFactory负责配置、创建、管理Bean,它有一个子接口ApplicationContext,因此也称为Spring上下文。Spring容器负责管理Bean与Bean之间的信赖关系。

spring我们不得不提它的IOC容器的

BeanFactory接口包含如下基本的方法:
,它在其中可以说是一个最核心的框架,提到 public boolean containsBean(Stringname),判断Spring容器是否包含id为name的Bean定义
public Object getBean(String name)返回容器id为name的bean
public Object getBean(String name,ClassrequiredType)返回容器中id为name,并且类型为requiredType的Bean,它在其中可以说是一个最核心的框架,提到
public Class getType(String name)返回容器中id为name的Bean的类型

   调用者只需使用getBean方法即可获得指定Bean的引用,无须关心Bean的实例化过程,即Bean实例的创建过程完全透明。

   BeanFactory有很多实现类,通常使用spring我们不得不提它的IOC容器的 org.springframework.beans.factory.xml.XmlBeanFactory 类。但对于大部分J2EE应用而言,推荐使用ApplicationContext.ApplicationContext是BeanFactory的子接口,其常用实现类是

org.springframework.context.support.FileSystemXmlApplicationContext和

,Spring在其中是一个非常重要的框架

org.springframework.context.support.ClassXmlAplicationContext.

    创 建 BeanFactory实例时,必须提供Spring容器管理的Bean的详细配置信息。Springr的配置信息通常采用XML配置文件来设置,因此, 创建BeanFactory实例时,应该提供XML配置文件作为参数。XML配置文件通常使用Resource对象传入

   &n

 

Resource接口用于访问配置文件资源
,它在其中可以说是一个最核心的框架,提到     大部分j2ee应用,可在启动web应用时自动加载ApplicationContext实例,接受Spring管理的Bean无须知道ApplicationContext的存在,一样可以利用ApplicationContext的管理。

,它在其中可以说是一个最核心的框架,提到 对于独立的应用程序,也可以通过如下方法来实例化BeanFactory

 

,Spring在其中是一个非常重要的框架 //搜索当前文件路径下的beans.xml文件创建Resource对象
InputStreamResource isr=new FileSystemResource(is);
//以Resource对象作为参数,创建BeanFactory的实例   &n
XmlBeanFactory factory=new XmlBeanFactory(isr);

 

spring我们不得不提它的IOC容器的 或者采用如下方法

   &n
//搜索CLASSPATH路径,以CLASSPATH路径下的beans.xml文件创建Resource对象
ClassPathResource res=new ClassPathResource("beans.xml");bsp;我们在使用ssh整合项目的时候
//以Resource 对象作为参数,创建BeanFactory实例
XmlBeanFactory factory=new XmlBeanFactory(res);

 

,它在其中可以说是一个最核心的框架,提到

    如果应用里有多个属性配置文件,则应该采用BeanFactory的子接口ApplicationContext来创建BeanFactory的实例,ApplicationContext通常采用如下两个实现类。

,它在其中可以说是一个最核心的框架,提到

FileSystemXmlApplicationContext,以指定路径的XML配置文件创建ApplicationContext
ClassPathXmlApplicationContext,以CLASSPATH路径下的XML配置文件创建ApplicationContext

,Spring在其中是一个非常重要的框架

 

bsp;我们在使用ssh整合项目的时候 如果需要同时加载多个XML配置文件,可以采用如下方式

//搜索CLASSPATH路径,以CLASSPATH路径下的applicationContext.xml 和service.xml文件创建ApplicationContext   &n
ClassPathXmlApplicationContext appContext=newClassPathXmlApplicationContext(
 new String[]{"applicationContext.xml","service.xml"});

spring我们不得不提它的IOC容器的 //事实上,ApplicationContext是BeanFactory的子接口,支持强制类型转换
BeanFactory factory=(BeanFactory) appContext;

 

,Spring在其中是一个非常重要的框架

当然,也可以支持从指定的路径来搜索特定文件加载:

spring我们不得不提它的IOC容器的


//以指定路径下的applicationContext.xml和service.xml文件创建Applicationcontext   &n
FileSystemXmlAplicationContext appContext=new
FileSystemXmlApolicationContext(
 new String[]{"applicationContext.xml","service.xml"},Spring在其中是一个非常重要的框架
)
//事实上,ApplicationContext是BeanFactory的子接口,支持强制类型转换
BeanFactory factory=(BeanFactory) appContext;

spring我们不得不提它的IOC容器的


,Spring在其中是一个非常重要的框架 2.使用ApplicationContext
   很 多时候,并不是直接使用BeanFactory实例作为Spring容器,而是使用ApplicationContext实例。因此,有时候也称 Spring容器为Spring上下文。ApplicationContext是BeanFactory接口的子接口,它增强了BeanFactory的 功能。
   ApplicationContext允许以声明方式操作容器,无须手动创建它。可利用如ContextLoader的支持类,在web应用启动自动创建ApplicationContext。当然,也可以采用编程方式创建ApplicationContext

,Spring在其中是一个非常重要的框架

 

ApplicationContext继承MessageSource接口,因此提供国际化支持资源访问,比如URL和文件,Spring在其中是一个非常重要的框架
事件传递
载入多个配置文件

   ApplicationContext包括 BeanFactory的全部功能,因此建议优先使用ApplicationContext,除了对于某些内存非常关键的作用,才考虑使用BeanFactoryspring我们不得不提它的IOC容器的

 

你可能感兴趣的:(spring,bean,框架,session,ejb,IOC)