3.1 案例的前期准备

1.使用的案例是:账户的业务层和持久层的依赖关系解决(就是有两个账户实现转账之类的事情,后期继续用这个案例)
2.准备环境:在开始 spring 的配置之前,我们要先准备一下环境。(由于这里是使用 spring 解决依赖关系,并不是真正的要做增删改查操作,所以此时没必要写实体类。并且在此处使用的是 java 工程,不是 java web 工程。)

3.1.1 准备 spring 的开发包

官网:http://spring.io/
下载地址:http://repo.springsource.org/libs-release-local/org/springframework/spring
解压:(Spring 目录结构:)

    • docs :API 和开发规范.
    • libs :jar 包和源码.
    • schema :约束.
      我们使用的版本是 spring5.0.2。
      • 特别说明:
        spring5 版本是用 jdk8 编写的,所以要求我们的 jdk 版本是 8 及以上。同时 tomcat 的版本要求 8.5 及以上。(maven项目)

3.1.2 创建业务层接口和实现类

/**
* 账户的业务层接口
*/
public interface IAccountService {
/**
* 保存账户(此处只是模拟,并不是真的要保存)
*/
void saveAccount();
}
/**
* 账户的业务层实现类
*/
public class AccountServiceImpl implements IAccountService {
private IAccountDao accountDao = new AccountDaoImpl();//此处的依赖关系有待解决
@Override
public void saveAccount() {
accountDao.saveAccount();
}
}

3.1.3 创建持久层接口和实现类

/**
* 账户的持久层接口
*/
public interface IAccountDao {
/**
* 保存账户
*/
void saveAccount();
}
/**
* 账户的持久层实现类
*/
public class AccountDaoImpl implements IAccountDao {
@Override
public void saveAccount() {
System.out.println("保存了账户");
}
}

3.2 基于 XML 的配置(入门案例)[掌握]

3.2.1 第一步:拷贝必备的 jar 包到工程的 lib 目录中

3.2.2 第二步:在类的根路径下创建一个任意名称的 xml 文件(不能是中文)


接着给配置文件导入约束:
/spring-framework-5.0.2.RELEASE/docs/spring-framework-reference/html5/core.html
(这个是xml配置文件开头约束网页,介意在浏览器添加书签收藏查的时候比较方便。进去网页后点击Core然后Ctrl+F搜索你要的相关约束。)

比如这个时候需要的:

<?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>

3.2.3 第三步:让 spring 管理资源,在配置文件中配置 service 和 dao

(1)配置文件里的三个标签:
bean 标签:用于配置让 spring 创建对象,并且存入 ioc 容器之中
id 属性:对象的唯一标识。
class 属性:指定要创建对象的全限定类名

<!-- 配置 service -->
<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl">
</bean>
<!-- 配置 dao -->
<bean id="accountDao" class="com.itheima.dao.impl.AccountDaoImpl"></bean>

3.2.4 测试配置是否成功

(后期学MyBatis就用test注解来测试)

/**
* 模拟一个表现层
*/
public class Client {
/**
* 使用 main 方法获取容器测试执行
*/
public static void main(String[] args) {
//1.使用 ApplicationContext 接口,就是在获取 spring 容器
//后面会介绍ApplicationContext 接口
ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
//2.根据 bean 的 id 获取对象
IAccountService aService = (IAccountService) ac.getBean("accountService");
System.out.println(aService);
IAccountDao aDao = (IAccountDao) ac.getBean("accountDao");
System.out.println(aDao);
}
}

运行结果·:成功

Spring入门之使用 spring 的 IOC 解决程序耦合(Spring环境搭建)(03-01)的更多相关文章

  1. Spring(一)--作用、IOC容器细节、搭配环境、Spring实验

    1.Spring作用:      1.生态体系庞大,全能型选手![springmvc是其一个子模块,jdbcTemplate能直接操作数据库!]      2.将其他组件粘合在一起      比如将S ...

  2. 《Node.js入门》CentOS 6.5下Node.js Web开发环境搭建笔记

    近期想尝试一下英特尔的基于WebRTC协同通信开发套件,所以须要在本地搭建Node.js Web的开发測试环境. 这里讲的是CentOS 下的搭建方法.使用Windows的小伙伴请參考: <No ...

  3. Spring注解@Resource和@Autowired区别对比、spring扫描的默认bean的Id、程序获取spring容器对象

    -------------------------注解扫面的bean的ID问题-------------------------- 0.前提需要明白注解扫描出来的bean的id默认是类名首字母小写,当 ...

  4. Ionic 入门与实战之第二章第二节:Ionic 环境搭建之 Ionic Lab 使用

    原文发表于我的技术博客 本文是「Ionic 入门与实战」系列连载的第二章第二节,主要对 Ionic Lab 工具作了介绍,并讲解了其使用方法,这也是一个开发 Ionic 比较好的调试工具. 原文发表于 ...

  5. Ionic 入门与实战之第二章第一节:Ionic 环境搭建之开发环境配置

    原文发表于我的技术博客 本文是「Ionic 入门与实战」系列连载的第二章第一节,主要对 Ionic 的开发环境配置做了简要的介绍,本文介绍的开发环境为 Mac 系统,Windows 系统基本类似,少许 ...

  6. 解决cocos2dx 打包lua环境搭建问题( ImportError: No module named Cheetah.Template)

    将c++ 封装成lua调用时,显示一下错误: PYTHON_BIN not defined, use current python. generating userconf.ini... Genera ...

  7. spring 入门篇

    spring 入门篇         相对于Hibernate(冬眠),Spring(春天),具有更多的诗意与希望的感觉,是为了解决传统J2EE开发效率过低.开发商之间不统一.没有真正实现“写一次到处 ...

  8. SSM(spring mvc+spring+mybatis)学习路径——1-1、spring入门篇

    目录 1-1 Spring入门篇 专题一.IOC 接口及面向接口编程 什么是IOC Spring的Bean配置 Bean的初始化 Spring的常用注入方式 专题二.Bean Bean配置项 Bean ...

  9. Spring入门之生命周期

    好几日没有读东西了,今天本来要读mybatis原理部分,但是看到作者讲,只是学会用不用学那么深,遂直接开干spring,工作中一直用springboot,框架都是领导搭好的,每天的任务就是增删改查,挺 ...

  10. 【Spring】Spring 入门

    Spring 入门 文章源码 Spring 概述 Spring Spring 是分层的 Java SE/EE 应用全栈式轻量级开源框架,以 IOC(Inverse Of Control,反转控制)和 ...

随机推荐

  1. 一、100ASK_IMX6ULL嵌入式裸板学习_LED实验(下)

    自己尝试通过C语言方式驱动LED:

  2. What does int main(int argc, char *argv[]) mean?

    忽然发现自己不理解许多代码中这行的含义是什么...(汗颜) 下面贴一段stackoverflow上面的回答: argv and argc are how command line arguments ...

  3. vue相关组件用法

    <el-checkbox v-model="checkbox.checkModel" :label="index":disabled="chec ...

  4. MySQL连接提示 public key retrieval is not allowed

    使用DBeaver连接mysql数据提示public key retrieval is not allowed 修改DBeaver的驱动属性中的allowPublicKeyRetrieval

  5. top单核与32C--CPU爆表

    linux的cpu使用频率是根据cpu个数和核数决定的 top, 然后你按一下键盘的1,这就是单个核心的负载,不然是所有核心的负载相加,自然会超过100 单核为100%,服务器是32核的,下面基本用了 ...

  6. ansible笔记第三章(Ansible--tasks任务控制)

    (1)when判断语句 实践案例一.根据不同操作系统,安装相同的软件包 [root@m01 project1]# cat tasks_1.yml - hosts: oldboy tasks: - na ...

  7. 关于import-route static 和default-route-advertise区别知识总结

    关于import-route static 和default-route-advertise区别知识总结 一.相关解释 import-route static  命令不能引入外部路由的默认路由,OSP ...

  8. Unity Profiler真机调试

    1.在BuildSetting面板中勾选DevelopmentBuild 2. .cmd命令: adb forward tcp:34999 localabstract:com.CompanyName. ...

  9. JS基础笔记汇总

    JS基础笔记最全的汇总 javascript介绍以及起源目录1.变量和常量的知识2.基本数据类型3.运算符4.基本数据类型间的转换5.流程控制语句 一.javascript介绍以及起源 js一种直译型 ...

  10. node_modules修改?

    1.直接改node_modules的内容..... 但是下次npm i之后那个包的代码又恢复原状 2.独立维护需要改的包 把需要改的包复制下来,修改,推送到npm上. 项目里用新包即可,但是增加了维护 ...