程序员

Spring框架介绍

2020-08-22  本文已影响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 管理。

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);
    }
}
测试结果如下:
测试结果
上一篇下一篇

猜你喜欢

热点阅读