Spring 思想入门学习笔记

Spring 思想入门

Spring主要有2个重点思想:

      1、DI (Dependency Injection):依赖注入思想。又名“控制反转”。

      2、AOP:面向切面编程。



一、依赖注入思想

假设有一个业务逻辑实现的是 “人吃饭” 这个功能。

1、硬编码方法实现:

public classPeopleEatFood {
   
    public void eat(){
        Foodf= new Egg();
        f.eaten();
    }
 
}


 

 

2、工厂模式实现:

    工厂模式就是定义一个工厂类,这个类的职责就是创建实现了某个接口的类的对象。比如“食品工厂”。

    这里把表示食物的字符串写到配置文件(food.prop)中,这样就不需要在eaten中硬编码了,实现了“解耦合”。

 
public classFoodFactory {
   
   
    public void eat() throwInvalidPropertiesFormatException,IOException{
       
        FoodFactoryfc=newFoodFactory();
        Propertiesp=newFoodFactory();
        p.loadFromXML(newFileInputStream(food.prop));
        Foodf=fc.getFood(p.getProperty("food"));
        f.eaten();
       
    }
   
 
}


 

3、“食品工厂”的反射机制实现

      想要动态的添加或者停产某些商品,用反射机制实现——“动态更新”和“配置式开发”。

      现在比较提倡:将所有的功能开发为组件,组件之间通过配置文件松耦合,也可以通过配置文件装配软件的功能。

public classFoodFactoryByReflect{
   
    punlicFood getFood(String name){
        Foodf=null;
   
        try{
            f=(Food)Class.forName(name).newInstance();
        }catch(Exception){
            e.printStackTrace();
        }
    return f;
    }
   
   
}


     

4、吃饭问题的反转控制:

      Person不再关心吃什么食物,将控制权交给别人,自己只关心自己逻辑的思路称为“控制反转”(Inversion of Control, IoC)。Person依赖的食物交给框架管理,所以控制反转也称为依赖注入(DependencyInjection, DI),由框架将对象依赖的类注入给它。

public classPerson{
   
    private String name="XiaoMing";
    private Food food=null;
   
    public void setFood(Food f){
        food=f;
    }  
   
    public void eat(){
        food.eaten();
    }
}
 


二、面向切面的编程

1、在软件开发中通常需要多个模块,每个模块负责一向功能。 但有的模块作为辅助性质,它与其他所有模块相关,导致了严重的耦合。

 

2、面向切面的编程思想,这个功能是横跨整个软件的。所有模块仅关心自己的事情,所有的记录应由日志模块来完成。

      解耦合的编程实现,C和C++较难实现。而JAVA使用的方法是:截获一个方法的调用,通过java.lang.reflect.Proxy调用(反射机制的包库)。

      面向切面这种机制需要从外部对每个模块的方法进行监控,用Proxy实现。

3、Spring中的面向切面编程:

      在applicationContext.xml中天剑Father的bean定义后,继续定义切面:

切面使用<aop:config>标签描述。

切面处理的类用<aop.aspect>声明。

定义切入点:<aop:pointcut>,就是要监听的对象。

定义一个具体事件 <aop.before>

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值