Day1 Spring 概述 & IOC

本文内容纲要:

- Spring是什么?

- 主要特性

- Spring环境配置&入门

- IOC

- 什么是IOC

- 使用IOC的好处

- DI

- 什么是DI

Spring是什么?

Spring名称指:

  1. Spring家族,包括Spring整个生态,Spring Framework、Spring MVC等;
  2. 特指Spring Framework;

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

Spring(Spring Framework)是什么?

Spring是一个轻量级的IOC容器框架,简化Java企业级应用开发,使得开发者更聚焦于业务逻辑。同时Spring集成了许多优秀的第三方框架。

Spring提供的核心功能:

  1. IOC(Inversion of Control,控制反转)容器;
  2. AOP(Aspect-Oriented Programming,面向切面编程);

主要特性

Core

IOC容器、DI(Dependency Injection)、AOP、事件处理、资源管理、国际化、校验、数据绑定、类型转换、SpEL表达式;

重点掌握:

  1. IOC/DI
  2. AOP

数据访问

事务,DAO(Data Access Object,数据访问对象),JDBC(Java DataBase Connectivity,Java数据库连接),ORM(Object Relational Mapping,对象关系映射),XML

重点掌握:

  1. 事务
  2. JDBC

Spring MVC

Spring MVC & Spring WebFlux(响应式Web框架)

重点掌握Spring MVC。Spring MVC在整个Spring Framework学习完之后,再单独学习。

其他

Testing:测试集成;

多语言支持:除了Java,还支持Kotlin、Groovy;

集成:远程调用、邮件、消息队列、调度、缓存等;

Spring环境配置&入门

  1. 使用Idea新建Maven工程;

  2. 导入Spring-Context jar包;

    org.springframework

    spring-context

    5.2.1.RELEASE

spring-context: Spring上下文包,包含Spring核心的spring-core、spring-beans等jar包;

5.2.1.RELEASE: 当前Spring最新发布版本;

  1. 创建示例类

    1. UserDao,及其实现类

      public interface UserDao {

      void addUser(User user);

      }

      public class UserDaoImpl implements UserDao {

      @Override

      public void addUser(User user) {

      System.out.println("添加成功:" + user);

      }

      }

    2. UserService,及其实现类

      public interface UserService {

      void add(User user);

      }

      public class UserServiceImpl implements UserService {

       private UserDao userDao;

      public void setUserDao(UserDao userDao) {

      this.userDao = userDao;

      }

      @Override

      public void add(User user) {

      userDao.addUser(user);

      }

      }

    3. Client类

      public class Client {

       private UserService userService;

      public void setUserService(UserService userService) {

      this.userService = userService;

      }

      public static void main(String[] args) {

      }

      }

  2. 配置xml文件

    <bean id="userDao" class="com.bailiban.day1.dao.impl.UserDaoImpl" />

    <bean id="userService" class="com.bailiban.day1.service.impl.UserServiceImpl">

    <property name="userDao" ref="userDao" />

    </bean>

    <bean id="client" class="com.bailiban.day1.Client">

    <property name="userService" ref="userService" />

    </bean>

说明

beans标签: Spring IOC容器,包含Spring创建和管理的对象;

bean标签: 描述对象的类型和属性(用于创建);

当我们使用Spring时,不再需要自己创建对象,而是将我们需要的对象类型,及对象属性告诉Spring,由Spring帮我们创建和管理。

当我们使用对象时,直接从Spring容器获取即可。

  1. 使用Spring容器访问对象

    public class Client {

    private UserService userService;

    public void setUserService(UserService userService) {

    this.userService = userService;

    }

    public static void main(String[] args) {

    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

    Client client = (Client) context.getBean("client");

    client.userService.add(new User(1001, "Jim"));

    }

    }

说明:

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

通过xml文件,获取Spring容器上下文

Client client = (Client) context.getBean("client");

使用Spring提供的getBean方法,从Spring容器中获取对象;

client.userService.add(new User(1001, "Jim"));

我们并没有给Client对象设置userService属性,userService的创建是由Spring帮我们完成的;

运行结果:

用户添加成功:User{id=1001, name='Jim'}

IOC

什么是IOC

IOC:Inversion of Control,即控制反转。

控制:主要指对“对象”的控制,包括对象创建、对象间的依赖关系、对象的生命周期等;

反转:将控制权从开发者转变为Spring,即开发者不需要管理对象的创建、依赖、生命周期等,而是有Spring帮我们创建和管理。

示例:

  1. 不使用IOC,程序中硬编码

    public class UserServiceImpl implements UserService {

    private UserDao userDao = new UserDaoImpl();

    public void setUserDao(UserDao userDao) {

    this.userDao = userDao;

    }

    @Override

    public void add(User user) {

    userDao.addUser(user);

    }

    }

  2. 使用IOC,在xml配置文件里告诉spring:我需要什么对象,让spring帮我们创建。

使用IOC的好处

降低类与类之间的耦合度,提高应用程序的灵活性和可维护性。

理解:

  1. 从设计模式的角度看

    上面示例中,UserServiceImpl只需要一个能够操作user数据库表,并包含addUser方法的类,而并不关注这个类具体是如何实现的。

  2. 从代码变更的角度看

    如果UserDao的实现类变化了,或者需要使用其他的实现类,此时必须修改所有“new UserDaoImpl();”的代码:

    例如:

    public class UserServiceImpl implements UserService {

    private UserDao userDao = new UserDaoAnotherImpl();

    如果使用IOC,则代码不需要任何变化,只需要变更XML配置文件即可。

    <bean id="userDao" class="com.bailiban.day1.dao.impl.UserDaoAnotherImpl" />

  3. 从代码编写的角度看

    使用Spring注解,可以极大的简化开发

    public class UserServiceImpl implements UserService {

    @Autowired

    private UserDao userDao;

DI

什么是DI

DI: Dependency Injection, 依赖注入

  1. DI和IOC的关系

    IOC是一种设计思想,用于降低程序见的耦合度。DI是IOC的一种实现,IOC的另一常见的实现方式是DL(Dependency Lookup,依赖查找)。

    Spring使用的是DI。

  2. 依赖

    主要类之间的依赖, 例如下面代码,我们可以认为UserDao是UserServiceImpl的一个依赖:

    public class UserServiceImpl implements UserService {

    private UserDao userDao;

  3. 注入

    不需要从容器获取,Spring已经帮我们处理好所有依赖对象了。

例如,订购报纸或者牛奶,我们只需要告诉订购商需要什么,然后每天早上家门口就会放好报纸或者牛奶。

与“注入”相对应的是“查找”,每天早上需要自己去附近的订购点取报纸或者牛奶。

本文内容总结:Spring是什么?,主要特性,Spring环境配置&入门,IOC,什么是IOC,使用IOC的好处,DI,什么是DI,

原文链接:https://www.cnblogs.com/cheng18/p/12051504.html

以上是 Day1 Spring 概述 & IOC 的全部内容, 来源链接: utcz.com/z/296566.html

回到顶部