自学spring

Spring最基本的功能就是ioc容器,什么是ioc容器。
一般说道容器,我们都会想到一些高大上的东西,比如tomcat等等这些web容器,docker,甚至有些人将某些数据结构(List,Set,Map)也称为容器。可以说容器这个词已经被用烂了。
那就讲解一下容器最本质的意思,就是放东西的东西。所以上面的这些东西都可以被称之为容器。那么什么是ioc容器,ioc是控制反转的意思,也有人讲ioc称之为依赖注入,我们只将他们称为专有名词,就和迭代器一样,谁能从它的名字里面猜出它的功能。ioc容器的意思就是,我们将实例化好的对象,存到ioc容器当中,没当我们需要某种类型,或者某个对象的时候,我们可以通过唯一标识符,或者id,来获取这个对象。

可能有人会说,这很麻烦。的确,这很麻烦。但是比如碰到某些场景,比如,我们需要平凡的实例化某些实例,就拿web应用来说,比如数据访问,我们需要频繁的创建数据访问的对象,一般情况下,不同的数据类型都会创建不同的数据访问对象,比如访问teacher表,和访问student表用的就不同一种数据访问对象。比如StudentDao,teacherDao。有人说那我每次都写一个new,把数据访问对象实例化不就可以了嘛。的确可以,而且也不会出错。比如我们可能会用到一堆数据访问对象,好啊,我们可以将这些对象都在构造函数中实例化了,用到用不到也浪费不了多少资源。这意味着我们每个处理不同请求的类,都有一个非常大的构造函数,里面用new实例化了非常多的相同的简单的数据访问对象。我不知道你写完这样的代码作何感想,你也许你突然会发现自己写好一个处理请求的构造函数之后,发现其他的构造函数都在复制和粘贴,在做一些没用的重复劳动,写的都是无用new代码。
public class StudyController{
    StudentDao studentDao;
TeachaerDao teacherDao;
HeadMasterDao teacherDao;

    public StudentController(){
        studentDao = new StudentDao();
        teacherDao = new TeacherDao();
        teacherDao = new HeadMasterDao();
        .....
    }
}

那我们可不可以不这样做呢,可以那就是采用ioc容器。比如你new了一个ioc容器,把要实例化的对象都通过配置文件告诉了ioc容器,而且你采用类型来当做唯一标识符,当然你也可以采用其他的,比如这个对象的id就是1,那个对象的id就是2,这样同种类型就可以建立不同的对象了。到时候我们只需要实例化以ioc容器(当然这时候人们都爱叫它上下文Context),StudyController就可以这样写了。

public class StudyController{
StudentDao studentDao;
TeachaerDao teacherDao;
HeadMasterDao teacherDao;
    public StudentController(){
        ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
        studentDao = context.get(1);
        teacherDao = context.get(2);
        teacherDao = context.get(3);
        .....
    }

}

看完这些有人要骂我sb了,这不比刚刚还复杂。
但是考虑一下在web应用的时候,我们给这个web应用建立一个全局ioc容器,通过静态方法来实现,那么代码会这样:

public class StudyController{
StudentDao studentDao;
TeachaerDao teacherDao;
HeadMasterDao teacherDao;

    public StudentController(){
        StudentDao studentDao = MyApplicationContext.get(1);
        TeachaerDao teacherDao = MyApplicationContext.get(2);
        HeadMasterDao teacherDao = MyApplicationContext.get(3);
        .....
    }
}

这样就和最开始一样复杂。
那么spring想了一下,其实这些只是语法上的重复,正在不重复的是id的值。于是spring通过annotation(注解,和注释有相同的目的,只不过,注释是给人看的,注解是给ioc容器看的)来改进语法。

public class StudyController{
@Annotation(1)
StudentDao studentDao;
@Annotation(2)
TeachaerDao teacherDao;
@Annotation(3)
HeadMasterDao teacherDao;
}

这样看一下,是不少写了很多。好了又的人可能会说,spring就是帮助我们通过它的注解,来改善我们少些代码。这就错了,spring的功能很强大,非常强大,但是它对我们最直观的感受,就是我们可以通过注解来少写代码。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值