Spring快速入门

简介: Spring提供一个容器,称为IOC容器,用来充当IOC思想中的“外部”IOC容器负责对象的创建,初始化等一系列工作,被创建或被管理的对象在IOC容器中统称为bean

Spring核心概念

IOC(Inversion of Control)控制反转

  • 使用对象那个时,由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权转移到外部,思想称为控制反转

Spring技术对IOC思想进行了实现

  • Spring提供一个容器,称为IOC容器,用来充当IOC思想中的“外部”
  • IOC容器负责对象的创建,初始化等一系列工作,被创建或被管理的对象在IOC容器中统称为bean

IOC入门案例思路分析

  1. 管理什么?(Service和Dao)
  2. 如何将被管理的对象告知IOC容器?(配置)
  3. 被管理的对象交给IOC容器,如何获取到IOC容器?(接口)
  4. IOC容器得到后,如何从容器中获取bean?(接口方法)
  5. 使用Spring导入哪些坐标?(pom.xml)

IOC入门案例实现

  1. 导入spring坐标

<dependency>

           <groupId>org.springframework</groupId>

           <artifactId>spring-context</artifactId>

           <version>5.2.10.RELEASE</version>

       </dependency>

  1. 定义Spring管理的类(接口)

publicinterfaceBookService {

   publicvoidsave();

}

publicclassBookServiceImplimplementsBookService {

   privateBookDaobookDao= (BookDao) newBookDaoImpl();

   publicvoidsave(){

       System.out.println("book service save....");

       bookDao.save();

   }

}

  1. 创建Spring配置文件,配置对应类作为Spring管理的bean

<?xmlversion="1.0" encoding="UTF-8"?>

<beansxmlns="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">

<!--    1.导入spring的坐标。spring-context 对应版本5.2.10Release..-->

<!--    2.配置bean

           id属性标识起名

           class属性表示给bean定义类型-->

   <beanid="BookDao"class="com.wangxh.dao.impl.BookDaoImpl"/>

   <beanid="bookService"class="com.wangxh.service.impl.BookServiceImpl"/>

</beans>

  1. 初始化IOC容器(spring核心容器/spring容器)通过获取bean

publicclassApp2 {

   publicstaticvoidmain(String[] args) {

       //3.获取IOC容器

       ApplicationContextctx=newClassPathXmlApplicationContext("applicatonContext.xml");

       //4.获取bean

       BookDaobookDao= (BookDao) ctx.getBean("BookDao");

       bookDao.save();

   }

}

DI(Dependency injection)依赖注入

  • 在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入

DI入门案例思路分析

  1. 基于IOC管理bean、
  2. service中使用new形式的Dao对象保留?(否)
  3. service中需要的Dao对象如何进入到service中?(提供方法)
  4. service与dao间的关系如何描述(配置)

DI入门案例

  1. 删除使用new的形式创建对象的代码

publicclassBookServiceImplimplementsBookService {

   privateBookDaobookDao;

   publicvoidsave(){

       bookDao.save();

   }

}

  1. 提供依赖对象对应的setter方法

//6.提供setter方法

publicvoidsetBookDao(BookDaobookDao) {

   this.bookDao=bookDao;

}

  1. 配置service与dao之间的关系

<?xmlversion="1.0" encoding="UTF-8"?>

<beansxmlns="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">

<!--    1.导入spring的坐标。spring-context 对应版本5.2.10Release..-->

<!--    2.配置bean

           id属性标识起名

           class属性表示给bean定义类型-->

   <beanid="BookDao"class="com.wangxh.dao.impl.BookDaoImpl"/>

   <beanid="BookService"class="com.wangxh.service.impl.BookServiceImpl">

<!--        7.配置service与dao的关系-->

<!--        property标签表示配置当前bean的属性

           name属性表示配置哪一个具体的属性

           ref表示参照哪一个bean-->

       <propertyname="bookDao"ref="BookDao"></property>

</bean>

</beans>

Bean

bean基础配置

bean别名配置

bean作用范围配置

  • 作用范围说明
  1. 为什么bean默认为单例?
  2. 适合交给容器进行管理的bean(适合造单例)
  • 表现层对象
  • 业务层对象
  • 数据层对象
  • 工具对象
  1. 不适合交给容器进行管理的bean
  • 封装实体的域对象

bean实例化

bean是如何创建出来的,实例化bean的三种方式

  1. 使用构造方法来实例化bean(常用)

publicclassBookDaoImplimplementsBookDao {

   publicvoidsave(){

       System.out.printin("book dao save...")

   }//这里需要使用无参构造器,如果不存在则会抛出BeanCreationException

}

  1. 配置

<bean>

   id="bookDao"

   class="com.wangxh.com.impl.BookDaoimpl"/>

  1. 使用静态工厂来实例化bean(了解 )
  • 静态工厂

publicclassOrderDaoFactory{

   publicstaticOrderDaogeOrdereDao(){

       returnnewOrderDapImpl();

   }

}

  • 配置

<bean

   id="orderDao"

   factory-method="getOrderDao"

   class="com.wangxh.factory.OrderDaoFactory"/>

  1. 使用FactoryBean实例化Bean

publicclassUserDaoFactoryBeanimplementsFactoryBean<UserDao> {

   publicUserDaogetObject() throwsException {

       returnnewUserDaoImpl();

   }

   publicClass<?>getObjectTyoe(){

       returnUserDao.class

   }

}

  1. 配置

<bean

   id="userDao"

   class="com.wangxh.factory.UserDaoFactoyBean"/>

bean的生命周期

  • 1提供生命周期控制方法

publicclassBookDaoImplimplementsBookDao {

   publicvoidsave(){

       System.out.println("book dao save...");

   }

   publicvoidinit(){

       System.out.println("book dao save...");

       publicvoiddestory(){

       System.out.println("book dao save...");

}

  • 配置生命周期控制方法

<beanid="bookDao"class="com.wangxh.dao.impl.BookDaoimpl"init-method="init"destory-method="destory"/>

  • 2实现InitializingBean,DisprosableBean接口(了解有这个即可)
  • 初始化容器
  1. 创建对象(内存分配)
  2. 执行构造方法
  3. 执行属性注入(set操作)
  4. 执行bean初始化方法
  • 使用bean
  1. 执行业务操作
  • 关闭/销毁容器
  1. 执行bean销毁方法
  2. 关闭容器方式
  • 手工关闭容器

ConfigurableApplicationContext接口close()操作

  • 注册关闭钩子,在虚拟机退出前关闭容器再退出虚拟机

ConfigurableApplicationContext接口registerShutdownHook()操作

相关文章
|
7月前
|
存储 缓存 NoSQL
快速入门:Spring Cache
快速入门:Spring Cache
55 0
|
8月前
|
安全 Java 数据安全/隐私保护
Spring Security快速入门
Spring Security快速入门
119 0
|
8月前
|
存储 Java 数据库
Spring快速入门
Spring快速入门
|
8月前
|
JSON Java API
Spring Boot之Jackson快速入门,你必须得会!
在上一期《SpringBoot之Jackson配置全局时间日期格式》文中提到Jackson,了解到有很多小伙伴对它很感兴趣;顾这一期,我就重点带着大家以最基础的教学方式领大家入门,废话不多说,咱们这就开始。
|
8月前
|
Java API Spring
spring快速入门
spring快速入门
51 0
|
9月前
|
前端开发 安全 Java
Spring Boot介绍--快速入门--约定优于配置
Spring Boot介绍--快速入门--约定优于配置
78 0
|
11月前
|
SQL Java 程序员
Spring事务管理 -- Spring快速入门保姆级教程(五)(2)
Spring事务管理 -- Spring快速入门保姆级教程(五)
|
11月前
|
SQL Java 数据库连接
Spring事务管理 -- Spring快速入门保姆级教程(五)(1)
Spring事务管理 -- Spring快速入门保姆级教程(五)
|
11月前
|
Java 数据库连接 程序员
Spring 整合 Mybatis -- Spring快速入门保姆级教程(四)
Spring 整合 Mybatis -- Spring快速入门保姆级教程(四)
127 0
|
11月前
|
XML druid Java
Spring注解开发 -- Spring快速入门保姆级教程(二)
Spring注解开发 -- Spring快速入门保姆级教程(二)