《Spring in action》——学习总结(一)

在网上学的很吃力,可能是前面的Java没学好吧,遂在图书馆找了本《Spring in action》看看,刚开始看,感觉还行。

Spring 简述

通过面向POJO编程、依赖注入、AOP和模板技术四个方面来简化Java开发的复杂性。

Tips:
POJO,Plain Ordinary Java Object的缩写,但是它通指没有使用Entity Beans的普通java对象,可以把POJO作为支持业务逻辑的协助类。POJO实质上可以理解为简单的实体类,
顾名思义POJO类的作用是方便程序员使用数据库中的数据表,对于广大的程序员,可以很方便的将POJO类当做对象来进行使用,当然也是可以方便的调用其get,set方法。

AOP,Aspect Oirented Programming的缩写,即面向切面编程,特质与依赖注入相似,帮助应用对象解耦。借助于AOP,可以将遍布应用的关注点(例如事务和安全)从他们所应用的对象中解耦出来。

Spring自带两种容器的实现,Bean工厂(bean factoried,由org.springframework.beans.factory.BeanFactory定义)是最简单的容器,提供基本的DI支持和应用上下文(application context,由org.springframmework.context.ApplicationContext接口定义)基于BeanFactory之上构建,并提供面向应用的服务。
注:Bean工厂对于大多数应用来说往往太低级,因此应用上下文更收欢迎。

应用上下文的类型,下面是三种最常见的类型
1、ClassPathXmlApplicationContext——从类的路径下的XML配置文件中加载上下文定义,把应用上下文定义文件当做类资源。
2、FileSystemXmlApplicationContext——读取文件系统下的XML配置文件并加载上下文定义。
3、XmlWebApplicationContext——读取Web应用下的XML配置文件并装载上下文定义。

装配Bean

装配,创建应用对象之间协作关系的行为,也是依赖注入的本质。

声明Bean

Spring 容器提供了两种配置Bean的方式。传统上,Spring使用一个或多个XML文件作为配置文件,而Spring3.0中提供了基于Java注解的配置方式(先不了解)。

Spring的核心框架自带了10个命名空间配置包括aop(声明切面)、beans(声明bean和装配bean)、context(为配置Spring应用上下文提供了配置元素)、jee、jms、lang、mvc、oxm(支持Spring的对象到XML的映射)、tx(声明式事务配置)、util(提供工具类元素)。

以下为一个典型的SpringXMl配置文件:


<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns:p="http://www.springframework.org/schema/p"  
    xsi:schemaLocation="  
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">  

      
      
    <bean id="userDao" class="cn.ywq.ioc.UserDao">bean>   

    <bean id="userService" class="cn.ywq.ioc.UserService">   
          

        <property name="userDao" ref="userDao">property>  
    bean>   

beans>  

Bean的作用域

当在Spring中配置元素时,我们可以为Bean声明一个作用域。只需配置Bean的scope属性。
Spring提供的几种作用域选项:

  • singleton,在每个Spring容器中,一个Bean定义总有一个对象实例(默认)
  • prototype,允许Bean的定义可以被实例化多次(每次调用都创建一个实例)
  • request,在一次HTTP请求中,每个Bean定义对应一个实例。
  • session,在一个HTTP Session中,每个Bean定义对应一个实例。
  • global-session,在一个全局HTTP Session中,每个Bean定义对应一个实例。

初始化和销毁Bean

为Bean定义初始化好销毁操作,只需要使用init-method和destroy-method参数来配置元素。
代码实例,我们设想一个叫Auditorium的Java类,它代表表演大厅。这个要实现两件非常重要的事情:在表演前开灯和在表演结束后关灯。
为支持这两项活动,Auditoium类需要编写turnOnLights()和turnOffLights()方法:

public class Auditorium{
    public void turnOnLights(){
    ...
    }
    public void tuenOffLights(){
    ...
    }
}

这两个方法的实现细节并不是特别重要,重要的是在开始前必须调用turnOnLights()方法,在结束后调用turnOffLights()方法。为实现需求,我们可以使用init-method和destroy-method属性来声明Auditorium Bean:

"auditorium"
        class = "com.springinaction.springidol.Autorium"
        init-methd = "turnOnLights"
        destroy-method = "turnOffLights"/>

为Bean定义初始化和销毁方法的另一种可选的方式是让Bean实现Spring的InitializingBean和DisposableBean接口。

注入Bean属性

Spring中使用元素配置Bean的属性。在许多方面都与类似,只不过一个是通过构造参数来注入值,另一个是通过调用属性的setter方法来注入值。

Instrumentalist类

package com.springinaction.springidol;
public class Instrumentalist implements Performer{
    public Instrumentalist(){
    }
    public void perform() throws PerformanceException{
        System.out.print("Playing"+song+":");
        instrument.play();
    }
    private String song;
    public void setSong(String song){ //注入歌曲
        this.song = song;
    } 

    public Stirng getSong(){
        return song;
    }
    public String screamSong(){
        return song;
    }

    private Instrument instrument;

    public void setInstrument(Instrument instrument){                 //注入乐器
        this.instrument = instrument;
    }

}

以上代码可以看出Instrumentalist有两个属性:song和instrument。song属性持有演奏家的歌曲名字,而且会在perform()方法中被用到。

Instrument接口

package com.springinaction.springidol;

public interface Instrument{
    public void play();
}

XML配置文件部分

id = "kenny"
class = "com.springinaction.springidol.Instrumentalist">
    <property name = "song" value = "Jingle Bells"/>

为了让kenny顺利演出,还要让这个乐器实现Instrument接口。

Tip:依赖注入不仅仅只是装配硬编码的值,它真正的价值子在于把相互协作的对象装配在一起,而不需要这些对象自己负责装配。

sax0phone实现了Instrument接口

package com.springinaction.springidol;

public class Saxophone implements Instrument{
    public Saxophone(){
    }
    public void play(){
        System.out.println("TOOT TOOT TOOT...");
    }
}

在kenny演奏萨克斯之前,我们必须在Spring中将它声明为一个Bean。如以下XML代码所示:

id = "saxophone"
class = "com.springinaction.springidol.Saxophone"/>

修改kenny Bean的配置。使用setter注入为instrument属性设值:

id = "kenny2"
class = "com.springinaction.springidol.Instrumentalist">
<property name = "song" value = "Jingle Bells" />
<property name = "instrument" ref = "saxophone" />

现在kenny Bean已经注入了所有的属性,并且可以准备演出了。

你可能感兴趣的:(Spring)