自用Spring学习笔记之IoC

1、Spring简介

  • Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。

2、Spring的优点

  • spring是一个开源免费的框架。
  • spring是一个轻量级的,非侵入式的框架
  • 控制反转IOC,面向切面AOP
  • 对事务的支持,对框架的支持

用一句话概括就是:Spring是一个轻量级的控制反转(IoC)面向切面(AOP) 的容器(框架)。

3、Spring之IoC

1、引例

IoC的本质,用一个例子来看

1.先创建一个空的项目

2.写一个技能Skill接口

public interface SkillDao {
    public void getSkill();
}

3.再去写实现类

public class SkillDaoImpl implements SkillDao{
    public void getSkill() {
        System.out.println("获取技能名称!");
    }
}

4.写SkillService的接口

public interface SkillService {
    public void getSkill();
}

5.写SkillService的实现类

public class SkillServiceImpl implements SkillService {
    private SkillDao skillDao = new SkillDaoImpl();

    public void getSkill() {
        skillDao.getSkill();
    }
}

6.最后去测试一下

public class DemoTest {
    @Test
    public void test(){
        SkillService skillService = new SkillServiceImpl();
        skillService.getSkill();
}

现在把Skill的实现类加上几个

public class SkillTwoDaoImpl implements SkillDao{
    public void getSkill() {
        System.out.println("获取技能2的名称!");
    }
}
public class SkillThreeDaoImpl implements SkillDao {
    public void getSkill() {
        System.out.println("获取技能3的名称!");
    }
}

加上了获取技能2和技能3的实现类。如果我需要获取技能2的名称,那么我就要去Service对应的实现类去修改,只有少数到还好,但是一旦数量多了起来,这就显得非常恐怖了。每一次需要变动,都要去修改大量的代码,耦合性高,牵一发动全身,十分不方便。

现在想想如何去解决

可以不去实现它,留一个接口,用到再去实现。利用set方法。

去实现类中用set方法实现

public class SkillServiceImpl implements SkillService {
    //private SkillDao skillDao = new SkillDaoImpl();
    private SkillDao skillDao;
    //写一个set方法
    public void setSkillDao(SkillDao skillDao) {
        this.skillDao = skillDao;
    }

    public void getSkill() {
        skillDao.getSkill();
    }
}

然后继续测试

public class DemoTest {
    @Test
    public void test(){
        SkillServiceImpl skillService = new SkillServiceImpl();
        skillService.setSkillDao(new SkillTwoDaoImpl());
        skillService.getSkill();
        //如果想获取技能3的名称,可以这样实现
        skillService.setSkillDao(new SkillThreeDaoImpl());
        skillService.getSkill();
    }
  • 现在已经发生了本质的变化。之前的东西都是由程序代码去创建,现在是调用者创建对象。就是说主动权已经到了调用者手中,程序已经不管对象的创建了。现在它只负责提供一个借口。
  • 这是一种思想,程序不去管对象的创建,就可以更多的去关注其他业务的一些实现,这样做可以降低耦合性。此上就为Ioc的原型。

2、IoC本质

  • 控制反转(Inversion of Control,缩写为IoC),就是一种设计思想。而依赖注入是实现IoC的一种方式之前没有IoC的程序中,对象的创建与对象间的依赖关系就是在程序中,对象的创建就是由程序控制。现在通过控制反转之后,将对象的创建交给了调用者。理解为获取依赖对象的方式反转了。

  • 技术描述:

    • Class A中用到了Class B的对象b,一般情况下,需要在A的代码中显式的new一个B的对象。

      采用依赖注入技术之后,A的代码只需要定义一个私有的B对象,不需要直接new来获得这个对象,而是通过相关的容器控制程序来将B对象在外部new出来并注入到A类里的引用中。而具体获取的方法、对象被获取时的状态由配置文件(如XML)来指定

  • IoC是Spring框架的核心,可以用很多方式去实现,比如xml配置或者注解Spring也可以零配置实现IoC

  • 注:采用XML方式配置Bean的时候,Bean的定义信息是和实现分离的,而采用注解的方式可以把两者合为一体,Bean的定义信息直接以注解的形式定义在实现类中,从而达到了零配置的目的。

  • 控制反转就是通过一定描述(XML文件或注解)并通过第三方去生产或者获取对象的方式。Spring中实现控制反转的是IoC容器,方式是DI(依赖注入)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值