【框架专题】管理型容器——SpringIOC——启示录

SpringIOC启示录

【框架专题】管理型容器——SpringIOC——启示录_第1张图片
如果你有一定的开发基础,相信你一定看得懂这张图;没错这就是分层思想
Servlet阶段
在以前复杂的socket连接和http细节以及线程池和IO处理,都需要人为手动完成,而tomcat容器出现了,解决了这个问题,所以tomcat被称之为通讯容器,一种相对来讲比较底层的容器;数据处理好被封装成request和response传到servlet,程序员只需要针对请求路径,写好servlet就能完成业务;
我们可以看到tomcat帮我们做了这么多事情:
【框架专题】管理型容器——SpringIOC——启示录_第2张图片
【框架专题】管理型容器——SpringIOC——启示录_第3张图片
【框架专题】管理型容器——SpringIOC——启示录_第4张图片
SpringIOC阶段
当servlet程序员经过了大量的代码实践后发现,利用现有的设计思想,不同servlet之间想有复用功能以及共享数据显得非常困难以及有些时候一些复杂的场景,比如在不同情况,可能某个封装好的对象是不同的实例对象以及需要对实例进行加工得到我们想要的实例,想要实现这些必须专门抽象出一个去管理对象的框架,这就是SpringIoc的诞生
IOC控制反转思想(白话):
利用某些方式,事先声明我们要创建那些对象(利用注解标记或者是xml指定)
利用某些方式,声明我们要对对象进行那些架构(比如注入容器中的其他对象,或者创建对象的时候,对对象执行一些初始化处理)
IOC控制反转思想(定义):
以前需要我们手动在一个对象中new另外一个对象,才能用这个对象的属性和方式,现在我们只需要用注解就能实现这种关系,且创建对象的过程由spring自动帮我们完成,我们只需要做声明即可;
【框架专题】管理型容器——SpringIOC——启示录_第5张图片
IOC控制反转思想(举例):

告诉Spring我要创建这个对象,@Component注解标记
@Component
public class ShiroHashedCredentialsMatcher extends HashedCredentialsMatcher  {
     
    private  final static String PASSWORD_ALGORITHM=Sha256Hash.ALGORITHM_NAME;//密码加密算法
    private  final static int HASH_ITERATIONS = 2;//密码散列迭代次数
    /**
     * @shiro密码匹配器
     */
    public ShiroHashedCredentialsMatcher(){
     
        super();
        setHashAlgorithmName(PASSWORD_ALGORITHM);  // 散列算法,这里使用更安全的sha256算法
        setHashIterations(HASH_ITERATIONS);
        setStoredCredentialsHexEncoded(true);  //密码加密用的是Hex编码;false时用Base64编码,默认true
    }
    /**
     * @利用同样的算法获取加密的结果
     */
    public String getMd5Hash(String pwd,String pwdSalt){
     
        SimpleHash simpleHash=(SimpleHash)super.hashProvidedCredentials(pwd,pwdSalt,getHashIterations());
        return simpleHash.toHex();
    }
}
拿到这个对象,利用autoWise引入这个对象
@Component
public class ShiroUserRealm extends AuthorizingRealm {
     
    @Resource
    private LoginConsumer loginConsumer;
    @Autowired
    AuthUitls authUitls;
    /**
     * @注入密码匹配器
     */
    public ShiroUserRealm(@Autowired
                                  ShiroHashedCredentialsMatcher shiroCredentialMatcher) {
     
        super();
        super.setCredentialsMatcher(shiroCredentialMatcher);//配置使用哈希密码匹配
    }
}
在以前我们相对于要不断的在各种代码里new这个对象,导致多个实例,而如果自己实现单实例代码当然要写多余的代码,然而spring却帮你做好了,直接用注解实现依赖关系的管理并决定配置如何,spring还有一个好处,就是你可以注入接口,这个接口你可以指定多个实现类,不同环境下也许实现类不一样,有一定开发经验的同学肯定知道,这种业务场景经常出现;

SpringMVC阶段(本章不做Mvc思想的深究,可略过)
基于Spring作为对象管理容器,原生的servlet写业务难免显得有些吃力,于是spirngMVC诞生;SpringMvc在tomcat容器的基础上利用他封装好的通讯机制,只写了一个Servlet-DisPathSevlet,这个servlet就拦截了所有请求,SpringMvc依据请求选择相应于的处理对象和处理方法去处理他,这些处理归由Spring管理,显然结合了Spring的优势又利用了Tomcat封装好的通讯机制;

经典总结
说了这么多,其实只需要理解一点,SpringIoc帮我们高效的实现了对象管理、对象加工,开发人员只需要利用注解做好配置,一切对象加工和对象创建由ioc内部自动完成,真正走向声明式编程的风格(只需要配置,内部自动完成),至于如何配置和加工我们后续章节陆续推出

那么今天的文章就到这里,后续我们陆续分享,本篇文章作为启示录,让大家了解Spring的诞生意义这样我们也可能在今后也因为一些启发而迭代出下一个框架的想法呢?

后续Spring专题
SpringIOC——入门
SpringIOC——XML管理全套
SpringIOC——注解管理全套
SpringIOC——内部工具全套
SpringIOC——核心源码剖析

【框架专题】管理型容器——SpringIOC——启示录_第6张图片
GodSchool
致力于简洁的知识工程,输出高质量的知识产出,我们一起努力

你可能感兴趣的:(Java框架专题,spring,ioc)