Spring笔记一

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的配置方式

    @Configuration
    public class KnightConfig{
    
    @Bean
    public Knight knight(){
    return new BraveKnight(quest());
    }
    
    @Bean 
    public Quest quest(){
        return new SlayDragonQuest(System.out);
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值