入门案例:IoC【掌握】

1.1 导入jar

. 4 + 1  : 4个核心(beans、core、context、expression) + 1个依赖(commons-loggins...jar)

1.2 目标类

. 提供UserService接口和实现类

. 获得UserService实现类的实例

之前开发中,直接new一个对象即可。

学习spring之后,将由Spring创建对象实例--> IoC 控制反转(Inverse of  ControlIOC创建对象的权限由自己反转给了spring)

之后需要实例对象时,从spring工厂(容器)中获得,需要将实现类的全限定名称配置到xml文件中

public interface UserService {

public void addUser();

}

public class UserServiceImpl implements UserService {

@Override

public void addUser() {

System.out.println("a_ico add user");

}

}

1.3 配置文件

.位置:任意,开发中一般在classpath下(src)

.名称:任意,开发中常用applicationContext.xml(在公司中看见项目里有这个名肯定就是用了spring)

.内容:添加schema约束

约束文件位置:spring-framework-3.2.0.RELEASE\docs\spring-framework-reference\html\ xsd-config.html

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

<!-- 配置service

<bean> 配置需要创建的对象

id :用于之后从spring容器获得实例时使用的

class :需要创建实例的全限定类名

-->

<bean id="userServiceId" class="com.itheima.a_ioc.UserServiceImpl"></bean>

</beans>

1.4 测试

public class TestIoc {

/**

@Test

public void demo01() {

//之前的开发

UserService userService=new UserServiceImpl();

userService.addUser();

} **/

@Test

public void demo02() {

//从spring容器获得

//1 获得 容器

String xmlPath="com/itheima/a_ioc/beans.xml";

ApplicationContext applicationContext=new ClassPathXmlApplicationContext(xmlPath);

//2 获得内容(不需要自己new,都是从spring容器中获得)

UserService userService=(UserService) applicationContext.getBean("userServiceId");

userService.addUser();

}

}

入门案例:DI【掌握】

. DI Dependency Injection ,依赖注入

is a :是一个,继承。

has a:有一个,成员变量,依赖(拥有使用权)。

class B {

private A a;   //B类依赖A类

}

依赖:一个对象需要使用另一个对象

注入:通过setter方法进行另一个对象实例设置。

. 例如:

class BookServiceImpl{

//之前开发:接口 = 实现类  (service和dao耦合)

//private BookDao bookDao = new BookDaoImpl();

//spring之后 (解耦:service实现类使用dao接口,不知道具体的实现类)

private BookDao bookDao;

setter方法

}

模拟spring执行过程

创建service实例:BookService bookService = new BookServiceImpl() -->IoC  <bean>

创建dao实例:BookDao bookDao = new BookDaoImpl() -->IoC

将dao设置给service:bookService.setBookDao(bookDao); -->DI   <property>

2.1 目标类

.创建BookService接口和实现类

. 创建BookDao接口和实现类

.将dao和service配置 xml文件

.使用api测试

2.1.1 dao

public interface BookDao {

public void addBook();

}

public class BookDaoImpl implements BookDao {

@Override

public void addBook() {

System.out.println("di  add book");

}

}

2.1.2 service

public interface BookService {

public abstract void addBook();

}

public class BookServiceImpl implements BookService {

// 方式1:之前,接口=实现类

// private BookDao bookDao = new BookDaoImpl();

// 方式2:接口 + setter

private BookDao bookDao;

public void setBookDao(BookDao bookDao) {

this.bookDao = bookDao;

}

@Override

public void addBook(){

this.bookDao.addBook();

}

}

2.2 配置文件

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

<!--

模拟spring执行过程

创建service实例:BookService bookService = new BookServiceImpl() IoC  <bean>

创建dao实例:BookDao bookDao = new BookDaoImpl() IoC

将dao设置给service:bookService.setBookDao(bookDao); DI   <property>

<property> 用于进行属性注入

name: bean的属性名,通过setter方法获得

setBookDao ##> BookDao(去掉set)  ##> bookDao(首字母小写)

ref :另一个bean的id值的引用

-->

<!-- 创建service -->

<bean id="bookServiceId" class="com.itheima.b_di.BookServiceImpl">

<property name="bookDao" ref="bookDaoId"></property>

</bean>

<!-- 创建dao实例 -->

<bean id="bookDaoId" class="com.itheima.b_di.BookDaoImpl"></bean>

</beans>

2.3 测试

@Test

public void demo01(){

//从spring容器获得

String xmlPath = "com/itheima/b_di/beans.xml";

ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);

BookService bookService = (BookService) applicationContext.getBean("bookServiceId");

bookService.addBook();

}

寒假day02-spring框架的更多相关文章

  1. spring框架入门day02

    0. 绪论 在第二天的学习中的学习JdbcTemplate之前,想要下载最新版本的mysql server8.0.11 结果在将所有的东西配置好后,发现报错, · Establishing SSL c ...

  2. spring框架入门day01

    struts:web层,比较简单(ValueStack值栈,拦截器) hibernate:dao层,知识点杂 spring:service层,重要,讲多少用多少  --> [了解] spring ...

  3. Spring框架 --- 深入

    1.Spring IOC IOC技术: 控制反转,也叫(依赖注入) 控制反转:Bean的生命周期不受你控制,而是交给Spring容器管理. Spring框架如何利用IOC ?:        实现了控 ...

  4. Spring框架概述

    Spring是最流行的Java企业级应用开发框架,全球数以百万的开发者在使用Spring框架创建高性能.易测试.可重用的代码. Spring框架的核心特性可以应用于任何Java应用,但扩展的JavaE ...

  5. 初识Spring框架实现IOC和DI(依赖注入)

    学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的, IoC是 ...

  6. Spring 框架的架包分析、功能作用、优点,及jar架包简介

    Spring 框架的架包详解    Spring的作用     Spring的优势  由于刚搭建完一个MVC框架,决定分享一下我搭建过程中学习到的一些东西.我觉得不管你是个初级程序员还是高级程序员抑或 ...

  7. 最新 Eclipse IDE下的Spring框架配置及简单实例

    前段时间开始着手学习Spring框架,又是买书又是看视频找教程的,可是鲜有介绍如何配置Spring+Eclipse的方法,现在将我的成功经验分享给大家. 本文的一些源代码来源于码农教程:http:// ...

  8. spring框架学习(三)

    一.Spring自动组件扫描 Spring 提供组件扫描(component scanning)功能.它能从指定的classpath里自动扫描.侦测和实例化具有特定注解的组件. 基本的注解是@Comp ...

  9. Spring框架学习(一)

    一. spring概述 Spring 框架是一个分层架构,由 7 个定义良好的模块组成.Spring 模块构建在核心容器之上,核心容器定义了创建.配置和管理 bean 的方式,如图 1 所示. 图 1 ...

  10. Spring 系列: Spring 框架简介 -7个部分

    Spring 系列: Spring 框架简介 Spring AOP 和 IOC 容器入门 在这由三部分组成的介绍 Spring 框架的系列文章的第一期中,将开始学习如何用 Spring 技术构建轻量级 ...

随机推荐

  1. T_SQL 将一列多行数据合并为一行

    SQL Server在进行数据迁移和报表处理的时候会遇到将一列多行数据拼接为一个字符串的情况,为了处理这个问题,在网上找了一些相关的资料,提供两种方法,供遇到类似问题的朋友们参考,也借此加深自己的印象 ...

  2. 【NOIP2009】Hankson的趣味题

    题意:给出 \(a_0\), \(a_1\), \(b_0\), \(b_1\), 求出正整数 \(x\) 的个数,\(x\) 满足: \(gcd(x,a_0)=a_1\) , \(lcm(x, b_ ...

  3. JAVA程序中常用概念介绍

    一.关键字.引用.直接量.变量.长量概念 1.关键字 java内部定义的java语言专用的单词,这些单词具有特殊含义,开发人员在定义自己声明的名称时,应该避开这些专用的单词.这些专用的单词也就称之为j ...

  4. java基础源码 (4)--reflect包-AnnotatedElement接口

    接口:AnnotatedElement * Represents an annotated element of the program currently running in this * VM. ...

  5. Arduino - ( Uno、Nano、Promini)针脚示意图

    Uno针脚示意图 Nano针脚示意图 Promini针脚示意图

  6. java课程之团队开发冲刺阶段2.6

    总结昨天进度: 1.总体的思路已经完成,代码也差不多了,只剩下对闹钟activity的设置 遇到的困难: 1.在设置震动的时候,对方法有点不太理解,所以使用的时候产生了错误,没有达到预期的效果 今天的 ...

  7. Resource interpreted as Stylesheet but transferred with MIME || DevTools failed to parse SourceMap:

    最近在学SpringBoot,在整合Thymeleaf的时候,配置拦截器.教学上讲SpringBoot已经做好了静态资源映射,所以不需要特地去做排除拦截 以下代码就是我在做登录拦截的时候配置的拦截. ...

  8. expresscache和primocache加速资料整理-centos7缓存加速

    expresscache和primocachehttp://www.360doc.com/content/16/0111/17/256680_527142090.shtml 安装expresscach ...

  9. 标准JAVA工程结构

  10. WordPress站点绑定多个域名

    refer to https://blog.csdn.net/wzl505/article/details/54970321 打开根目录下的 wp-config.php 文件,找到 require_o ...