Spring笔记一

来源:互联网 发布:淘宝买到盗版书怎么办 编辑:程序博客网 时间:2024/06/05 03:11

Spring笔记一

Spring的两个核心特性

  • 依赖注入(dependency injection,DI)

  • 面向切面编程(aspect-oriented programming,AOP)

为了降低Java开发的复杂性,Spring采取了一下四种关键策略:

  1. 基于POJO(Plain Ordinary Java Objects,实际就是普通javabeans,使用pojo名称是为了避免和ejb混淆起来)的轻量级和最小侵入性编程
  2. 通过依赖注入和面向接口实现松耦合
  3. 基于切面和惯例进行声明式变成
  4. 通过切面和模版减少样板式代码

    public class BravaKnight implements Knight{private Quest quest;public BraveKnight(Quest quest) {<----- Quest被注入进来    this.quest=quest;}public void embarkOnQuest(){    quest.embark(); }      

上述方法是依赖注入的一种方式,即构造器注入(constructor injection).

BraveKnight没有与任何特定的Quest实现发生耦合,这是一种松耦合。
一个对象只通过接口(而不是具体实现或者初始化过程)来表明依赖关系,那么这种依赖就能够在对象本身毫不知情的情况下,用不同的具体实现进行替换

    import java.io.PrintStream;    public class SlayDragonQuest implements Quest{    private PrintStream stream;    public SlayDragonQuest(PrintStream stream){    this.stream=stream;    }    public void embark(){    stram.println("slaydragonquest");

将SlayDragonQuest交给BraveKnight,将PrintStream交给SlayDragonQuest
创建应用组件之间协作的行为称为装配(wiring)

  • xml配置方式

    <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"        xmls:xsi="http://www.w3.org/2001/XMLSchema-instance"        xmls:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="knight" class="com.srpinginaction.knights.BraveKnight"><!--注入Quest Bean  在创建时传入了SlayDragonQuest Bean的引用,将其作为构造参数--><constructor-arg ref="quest"/></beans><!--创建SlayDragonQuest --><bean id="quest" class="com.springinaction.knights.SlayDragonQuest"><!--使用了Spring表达式语言(Spring Expression Language),将System.out(这是一个PrintStream)传入到了SlayDragonQuest的构造器中 --><constructor-arg value="#{T(System).out}" /></bean>
  • java的配置方式

    @Configurationpublic class KnightConfig{@Beanpublic Knight knight(){return new BraveKnight(quest());}@Bean public Quest quest(){    return new SlayDragonQuest(System.out);}
原创粉丝点击