控制反转:控制了对象的创建,反转:反转的是获取对象的方式,从自己创建对象变为由Spring工厂推送

1. 搭建Spring环境,导入依赖

  • spring-aop:开发AOP特性时需要的JAR
  • spring-beans:处理Bean的jar
  • spring-context:处理spring上下文的jar
  • spring-core.jar:spring核心jar
  • spring-expression:spring表达式

还要导入:

  • mysql-connection-java
  • druid
  • mybatis
  • mybatis-spring
  • log4j

2. application-Context.xml配置文件

先导入模板

<?xml version="1.0" encoding="utf8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:p="http://www.springframework.org/schema/p"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/phttp://www.springframework.org/schema/p/spring-p.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd "
></beans>

3. 详解Spring原理

新建Student类

public class Student {private Integer stuno;private String stuname;private Integer stuage;public Integer getStuno() {return stuno;}public void setStuno(Integer stuno) {this.stuno = stuno;}public String getStuname() {return stuname;}public void setStuname(String stuname) {this.stuname = stuname == null ? null : stuname.trim();}public Integer getStuage() {return stuage;}public void setStuage(Integer stuage) {this.stuage = stuage;}@Overridepublic String toString() {return "Student{" +"stuno=" + stuno +", stuname='" + stuname + '\'' +", stuage=" + stuage +'}';}}

写个测试类test.java

来看以前的做法:先新建对象,在通过set()属性赋值

再来用IOC方法

1. 在application-context.xml文件中写bean,通过property标签设置属性

  2. 回到test测试类

现在怎么创建student对象?

第一步:获取Spring上下文对象context

                第二步:通过 context.getBean()获取刚刚在Spring配置文件application-context.xml文件中的bean(id="Student")

对象的创建和对象的赋值全部交给IOC容器 

 下面的代码,执行从springIOC容器中获取一个id为student的bean对象,该对象的类型为对应bean标签class的值

Student student = (Student)context.getBean("student");

理解工厂的概念:

创建一个ICourse接口:课程

public interface ICourse {public void learn();
}

不同课程例如JavaCourse、MybatisCourse实现这个接口

public class JavaCourse implements ICourse {@Overridepublic void learn() {System.out.println("learning Java...");}
}
public class MybatisCourse implements ICourse {@Overridepublic void learn() {System.out.println("learning Mybatis...");}
}

学生可以学习课程:为Student类添加方法 learnJava()、learnMybatis()

   public void learnJava(){ICourse iCourse = new JavaCourse();iCourse.learn();}public void learnMybatis(){ICourse iCourse = new MybatisCourse();iCourse.learn();}

测试一下:

 上面是我们原始的开发方式

每次需要课程都要在Student类里面写一个learnXxx(),

如果要学习20个课程,就要20个方法,且每个方法里面都要创建一个课程的实现类对象

 这种方式创建对象new非常零散,造成后期维护较为麻烦

创建工厂,由工厂统一的创建对象

根据名称创建课程对象

public class CourseFactory {public static ICourse getCourse(String name){if(name.equalsIgnoreCase("java")){return new JavaCourse();}else {return new MybatisCourse();}}
}

把Student中的learnJava()、learnMybatis()方法统一写在learn方法中,并给形参String name,并把name交给工厂CourseFactory来创建对象 

测试:

现在要学习不同课程只需要改参数值就可以了,通过简单的工厂,可以将创建课程new 集中起来操作,方便后期维护

所以SpringIOC容器就是一个工厂,不需要我们去写CourseFactory,由SpringIOC容器为我们创建

我们只需要通过调用

为了更方便理解控制反转,我们也可以把这种方式叫做依赖注入

在spring配置文件中把Course的两个实现类设置bean

如下代码:在需要创建JavaCourse对象的地方通过spring上下文context调用getBean()方法拿对象,不需要自己创建

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class CourseFactory {public static ICourse getCourse(String name) {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");if (name.equalsIgnoreCase("java")) {return (ICourse) context.getBean("javaCourse");} else {return (ICourse) context.getBean("mybatisCourse");}}
}

对比之前自己new对象

public class CourseFactory {public static ICourse getCourse(String name){if(name.equalsIgnoreCase("java")){return new JavaCourse();}else {return new MybatisCourse();}}
}

Spring,搭建Spring环境相关推荐

  1. 手把手教你安装Spring+搭建Spring开发环境

    为了让新手安装Spring时少走弯路,小编写下详细步骤(以win8,64位为例). 请系好安全带,坐好扶稳. 一:安装eclipse 如果已经安装请忽略此步. 官网下载地址(64位):https:// ...

  2. 利用Maven搭建Spring开发环境 【转】

    2019独角兽企业重金招聘Python工程师标准>>> 一.   概要说明 最近几天在测试Spring3.0的AOP功能,在测试功能之前,首先是要搭建出Spring3.0的开发功能. ...

  3. java mvc 小程序_[Java教程]Spring MVC 的环境搭建和入门小程序

    [Java教程]Spring MVC 的环境搭建和入门小程序 0 2017-02-17 00:00:16 1.1.下载spring框架包. 1.1.1百度搜索Spring Framework. 进入s ...

  4. effective java英文版pdf_Java之Spring1:Spring简介、环境搭建、源码下载及导入MyEclipse...

    框架学习前言 这个模块是面向Spring的,Spring的学习我是这么想的: 1.简单介绍Spring,主要是从网上借鉴一些重点 2.尽量说明清楚Spring的使用方法以及细节点 3.尽量以自己的理解 ...

  5. irule jar包无法导入_Java之Spring1:Spring简介、环境搭建、源码下载及导入MyEclipse...

    框架学习前言 这个模块是面向Spring的,Spring的学习我是这么想的: 1.简单介绍Spring,主要是从网上借鉴一些重点 2.尽量说明清楚Spring的使用方法以及细节点 3.尽量以自己的理解 ...

  6. 搭建spring boot环境并测试一个controller

    Idea搭建spring boot环境 一.新建项目 二.起步依赖 三.编写SpringBoot引导类 四.编写Controller 五.热部署 一.新建项目 1.新建project 2.选择Spri ...

  7. 搭建Spring MVC 4开发环境八步走

    Spring MVC作为SpringFrameWork的产品,自诞生之日,就受到广泛开发者的关注,如今Spring MVC在Java中的发展可谓是蒸蒸日上,如今如果再有开发者说,不了解Spring M ...

  8. 基于mysql搭建框架环境搭建_Maven+Spring+Spring MVC+MyBatis+MySQL,搭建SSM框架环境

    项目建设完成之后的结构: 数据库的表结构如下: 环境建设:搭建Maven环境.Tomcat环境.需要MySql 数据库支持,使用的编程工具Eclipse (这些是前期准备): 开始创建工程: 1.创建 ...

  9. 搭建Spring开发环境并编写第一个Spring小程序

    一.前面,我写了一篇Spring框架的基础知识文章,里面没讲到如何配置Spring开发环境,今天就来讲一下,如果大家不知道怎么下载Spring软件包的话,可以看我那篇文章: http://blog.c ...

  10. 从零搭建一个 Spring Boot 开发环境!Spring Boot+Mybatis+Swagger2 环境搭建

    从零搭建一个 Spring Boot 开发环境!Spring Boot+Mybatis+Swagger2 环境搭建 本文简介 为什么使用Spring Boot 搭建怎样一个环境 开发环境 导入快速启动 ...

最新文章

  1. android 释放so,在安卓项目里部署so文件你需要知道的知识
  2. redis中的intset
  3. 免费下载来自阿里巴巴 双11 的《云原生大规模应用落地指南》
  4. JLINK与JTAG的区别
  5. nodejs express
  6. 从0到1带你手撸一个请求重试组件,不信你学不会!
  7. win7 OEM设置工具
  8. 客户端压测server端计算qps以及不同延迟时间下响应数量所占百分比
  9. activiti流程消息事件触发messageEventReceived,MessageCatchingEvent 及消息启动流程
  10. Julia: 奇技淫巧......
  11. Kotlin习惯用语和编码风格[转自Kotlin中文文档]
  12. SSM项目实战之十:用户信息查询
  13. JS对象定义和基本方法
  14. 走进MyBatis源码一探Spring扩展点「知识点多多」「扩展点实战系列」- 第449篇
  15. EXECUTE IMMEDIATE用法小结
  16. 【万字长文】2022年最全的搭建Web自动化测试框架教程
  17. RTL8723BU BTwifi
  18. java对接阿里云短信平台
  19. CentOS下连VisualSVN服务器时报SSL handshake failed: SSL error: Key usage violation in certificate has been d
  20. 人工智能AI系列 - 人脸识别套件列表,包括人脸检测,人脸识别,人脸关键点,人脸比对,人脸搜索等等。

热门文章

  1. v割与邮票孔_PCB中邮票孔(半孔)与V-cut原理分析与设计
  2. 健身教练学习书籍推荐-结合知乎
  3. 名创优品营收增速再下降:年收入和豪言还差900亿,高瓴抄底失败
  4. 安全基础--23--应急响应(上)
  5. excel转换成PDF的软件
  6. 计算机画画作品 人物 游泳,幼儿人物画图片游泳的人
  7. 【论文翻译】HCL2000—A Handwritten Chinese Character Database
  8. 生活随记 - 立冬 暖阳高照
  9. 搜狗输入法语音转文字体验报告
  10. 《UnityAPI.Input输入》(Yanlz+Unity+SteamVR+云技术+5G+AI+VR云游戏+Input+anyKey+gyro+GetAxis+GetKey+立钻哥哥++OK++)