美文网首页程序员
Spring框架介绍

Spring框架介绍

作者: 凡哥爱丽姐 | 来源:发表于2020-08-22 16:13 被阅读0次

    1、Spring介绍

    Spring框架主页:http://spring.io
    Spring资源地址:http://repo.spring.io/release/org/springframework/spring

    2、Spring的作用

        Spring是一个非常活跃的开源框架, 基于IOC和AOP来构架多层JavaEE系统,以帮助分离项目组件之间的依赖关系。它的主要目地是简化企业开发。

    3、Spring的意义

         方便解耦,简化开发:Spring 就是一个大工厂,可以将所有对象创建和依赖关系维护,交给 Spring 管理。
    • AOP 编程的支持:Spring 提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能。
    • 声明式事务的支持:只需要通过配置就可以完成对事务的管理,而无需手动编程。
    • 方便程序的测试:Spring 对 Junit4 支持,可以通过注解方便的测试 Spring 程序。
    • 方便集成各种优秀框架:Spring 不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz 等)的直接支持。
    • 降低 JavaEE API 的使用难度:Spring对 JavaEE 开发中非常难用的API(JDBC、JavaMail、远程调用等),都提供了封装,使这些 API 应用难度大大降低。

    4、常见的业务层调用数据访问层以实现持久化操作

    UserDao接口和UserDaoImpl实现类
    package com.fan.dao;
    
    public interface UserDao {
        public void show();
    }
    
    package com.fan.dao.Impl;
    
    import com.fan.dao.UserDao;
    
    public class UserDaoImpl implements UserDao {
        public void show() {
            System.out.println("这是UserDao里面的show方法");
        }
    }
    
    UserService接口和UserServiceImpl实现类
    package com.fan.service;
    
    public interface UserService {
        public void show();
    }
    
    package com.fan.service.Impl;
    
    import com.fan.dao.Impl.UserDaoImpl;
    import com.fan.dao.UserDao;
    import com.fan.service.UserService;
    
    public class UserServiceImpl implements UserService {
        private UserDao userDao=new UserDaoImpl();//多态?
        public void show() {
            System.out.println("这是UserService里面的show方法");
            userDao.show();
        }
    }
    
    UserServlet实现类
    package com.fan.servlet;
    
    import com.fan.service.Impl.UserServiceImpl;
    import com.fan.service.UserService;
    
    public class UserServlet {
        private UserService userService=new UserServiceImpl();
    
        public void show(){
            System.out.println("这是UserServlet里面的show方法");
            userService.show();
        }
    }
    
    测试类
    import com.fan.servlet.UserServlet;
    
    public class Test1 {
        public static void main(String[] args) {
            UserServlet userServlet=new UserServlet();
            userServlet.show();
        }
    }
    
    测试结果如下:
    测试结果
        如上代码所示,UserServlet对UserServiceImpl存在依赖关系,UserServiceImpl对UserDaoImpl存在依赖关系。这样的代码很常见,但是存在一个严重的问题,即UserServlet和UserServiceImpl高度耦合,UserServiceImpl和UserDaoImpl高度耦合,如果因为需求变化需要替换UserDao的实现类,将会导致UserServiceImpl中的代码随机发生改变,依次类推。如此,程序将不具备优良的可扩展性和可维护性,甚至在开发中难以测试。

    5、Spring中的IOC概念

         IOC是 Inverse of Control 的简写,意思是控制反转,是降低对象之间的耦合关系的设计思想。
         DI是Dependency Injection的缩写,意思是依赖注入, 是创建对象实例时,为这个对象注入它所依赖的属性。

    6、实现过程:

    6.1、添加Spring所需的jar包
    <!-- Spring的核心工具包-->
    <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-core</artifactId>
          <version>5.0.8.RELEASE</version>
    </dependency>
    
    <!--在基础IOC功能上提供扩展服务,还提供许多企业级服务的支持,有邮件服务、任务调度、远程访问、缓存以及多种视图层框架的支持-->
    <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>5.0.8.RELEASE</version>
    </dependency>
    
    <!-- Spring IOC的基础实现,包含访问配置文件、创建和管理bean等 -->
    <dependency>
           <groupId>org.springframework</groupId>
           <artifactId>spring-beans</artifactId>
           <version>5.0.8.RELEASE</version>
    </dependency>
    
    <!-- Spring context的扩展支持,用于MVC方面 -->
    <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>5.0.8.RELEASE</version>
    </dependency>
    
    <!-- Spring表达式语言 -->
    <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
             <version>5.0.8.RELEASE</version>
    </dependency>
    
    6.2、创建配置文件applicationContext.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans 
                               http://www.springframework.org/schema/beans/spring-beans.xsd">
    
    </beans>
    
    6.3、在配置文件中创建需要的对象
    <bean id="对象名" class="类的完整路径">
          <property name="属性名" ref="对象的id值"></property>
    </bean>
    
    6.4、加载配置文件,获取对象
    ApplicationContext app= new ClassPathXmlApplicationContext("applicationContext.xml");
    UserServlet userServlet =(UserServlet)applicationContext.getBean("servlet");
    

    7、利用Spring中 控制反转 和 依赖注入 解决上述问题

    7.1添加Spring所需的jar包
    7.2创建配置文件applicationContext.xml
    7.3UserDao接口和UserDaoImpl实现类
    package com.fan.dao;
    
    public interface UserDao {
        public void show();
    }
    
    package com.fan.dao.Impl;
    
    import com.fan.dao.UserDao;
    
    public class UserDaoImpl implements UserDao {
        public void show() {
            System.out.println("这是UserDao里面的show方法");
        }
    }
    
    7.4、UserService接口和UserServiceImpl实现类
    package com.fan.service;
    
    public interface UserService {
        public void show();
    }
    
    package com.fan.service.Impl;
    
    import com.fan.dao.UserDao;
    import com.fan.service.UserService;
    
    public class UserServiceImpl implements UserService {
        private UserDao userDao;
    
        public void setUserDao(UserDao userDao) {
            this.userDao = userDao;
        }
    
        public void show() {
            System.out.println("这是UserService里面的show方法");
            userDao.show();
        }
    }
    
    7.5、UserServlet实现类
    package com.fan.servlet;
    
    import com.fan.service.UserService;
    
    public class UserServlet {
        private UserService userService;
    
        public void setUserService(UserService userService) {
            this.userService = userService;
        }
    
        public void show(){
            System.out.println("这是UserServlet里面的show方法");
            userService.show();
        }
    }
    
    7.6、在配置文件applicationContext.xml中创建对象
        <!--使用bean标签创建对象:id属性="对象名" class属性="类的完整路径"
        等价于: UserDaoImpl dao=new UserDaoImpl()
    
        将对象再返回给java代码,使用DI,property标签会调用name属性中制定属性的set方法
      
       <bean>相当于IOC  <property>相当于DI
    -->
        <bean id="dao" class="com.fan.dao.Impl.UserDaoImpl"></bean><!--创建对象-->
        <bean id="service" class="com.fan.service.Impl.UserServiceImpl">
            <property name="userDao" ref="dao"></property><!--通过set方法赋值,所以UserServiceImpl类中需要有一个setUserDao方法-->
        </bean>
        <bean id="servlet" class="com.fan.servlet.UserServlet">
            <property name="userService" ref="service"></property><!--通过set方法赋值,所以UserServlet类中需要有一个setUserService方法-->
        </bean>
    
    7.7、创建测试类
    import com.fan.servlet.UserServlet;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class Test1_1 {
        public static void main(String[] args) {
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
            UserServlet userServlet =(UserServlet)applicationContext.getBean("servlet");
            userServlet.show();
            System.out.println(userServlet);
        }
    }
    
    测试结果如下:
    测试结果

    相关文章

      网友评论

        本文标题:Spring框架介绍

        本文链接:https://www.haomeiwen.com/subject/wnseohtx.html