【Spring01】Spring 概述

1 原生Web开发中存在的问题

  • 传统Web开发存在硬编码所造成的程序过度耦合,例如:Service中作为属性的Dao对象

  • 部分Java EE的API较为复杂,使用效率低,例如:JDBC开发步骤

  • 侵入性强,移植性差,例如:Dao实现的更改,需要从Connection到SqlSession

2 什么是Spring

Spring的官网:https://spring.io/

Spring makes programming Java quicker, easier, and safer for everybody. Spring’s focus on speed, simplicity, and productivity has made it the world's most popular Java framework.

如官网所示:Spring是一款轻量级开源Java框架,其使用Java语言开发,可以帮助开发者高效开发Java SE/EE项目。

  • Spring是一个项目管理框架。同时也是一套Java EE解决方案

  • Spring是众多优秀设计模式的组合(工厂、单例、代理、适配器、包装器、观察者、模板、策略)

  • Spring并未替代现有的框架产品,而是将众多的框架进行有机整合,简化企业级开发,俗称“胶水框架”

Spring又称为容器,作为容器Spring装载的是Java对象;我们可以让Spring创建Java对象、给属性赋值。

在深入学习Spring之前需要牢牢记住两个概念:IoC(控制反转)AOP(面向切面编程)

3 Spring架构组成

  • Core Container : Spring的核心容器(核心工厂),Spring的一些功能需要有核心容器的支持才能正常运作

    • Beans

    • Core

    • Context

    • SpEL

  • AOP、Aspects : 面向切面编程

  • Web

    • Servlet : SpringMVC

4 自定义工厂

Spring的Core Container模块践行的是工厂设计模式。会搭建并管理一个核心的工厂,工厂中可以生产并管理项目中的一个一个对象,进而可以将项目中对象的协作关系、运行模式加以调整优化,从而优化整个项目。

因此,工厂是Spring学习和使用的核心,此处展示如何搭建一个自定义工厂。

搭建一个自定义工厂的核心步骤为:

  • 创建一个配置文件,按类名=类的全路径的形式记录需要工厂创建对象的类

  • 读取配置文件

  • 通过反射创建对象

4.1 创建配置文件

UserDao=com.qianglj.test1.dao.UserDaoImpl
UserService=com.qianglj.test1.service.UserServiceImpl

4.2 创建自定义工厂

public class MyFactory {
    private Properties properties = new Properties();

    public MyFactory() throws IOException {
        InputStream resourceAsStream = MyFactory.class.getResourceAsStream("/myfactory.properties");
        //properties 读取配置文件
        properties.load(resourceAsStream);
    }

    public Object getBean(String beanName) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
        //1. 通过beanName获取类路径
        String classPath = properties.getProperty(beanName);
        //2. 通过反射构建对象
        return Class.forName(classPath).newInstance();
    }
}

4.3 测试

        MyFactory myFactory = new MyFactory();
        UserDao userDao = (UserDao)myFactory.getBean("UserDao");
        userDao.queryAllUsers();

其中,UserDaoImpl:

public class UserDaoImpl implements UserDao{
    @Override
    public void queryAllUsers() {
        System.out.println("UserDao----queryAllUsers");
    }
}

测试结果:

UserDao----queryAllUsers

 

版权声明:
作者:jackqiang
链接:http://www.jackqiang.com/framework/spring/1957/introduction/
来源:JackQiang's
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录