下载Spring jar包

Sping核心jar包

IOC简介

IOC:控制反转,指以前程序自己创建对象,现在将创建对象的控制权交给了第三方(Spring)了

IoC底层实现:工厂(设计模式)+反射(机制) + 配置文件(xml)

IOC是一种思想,是控制反转的思想、是一种解耦合的思想,Spring是该思想的一种实现。因此Spring容器也通常称之为IoC容器

IOC控制反转的实现

第一步:在src下建立applicationContext.xml (或者放在资源目录下)

applicationContext.xml核心配置文件编写:

<?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
https://www.springframework.org/schema/beans/spring-beans.xsd"> <!--bean:告诉Spring容器,哪些对象(bean)需要交给Spring容器进行管理
id/name:该bean的“唯一”标识符
class:该bean的完整类名(spring容器底层可以使用反射创建对象)
-->
<bean id="userDao" class="com.igeekhome.dao.impl.UserDaoImpl"></bean>
</beans>

第二步:通过Spring的工厂获取Bean完成相关操作

public class UserServiceImpl implements IUserService {
@Override
public User get(Integer id) {
/**
从Spring容器中获取userDao对象(保证容器中已经配置了该对象,applicationContext.xml)即可
获取Spring容器(基于spring配置文件创建)
*/
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
//容器中获取“指定”对象(根据id获取)
IUserDao userDao = (UserDaoImpl)ac.getBean("userDao");
System.out.println("UserService...userDao--->"+userDao);
System.out.println("UserService...get...执行了...");
return userDao.select(id);
}
}

DI简介

Dependency Injection: 依赖注入,在Spring框架负责创建Bean对象时,动态的将依赖对象注入到Bean组件(简单的说,可以将另外一个bean对象动态的注入到另外一个bean中)

耦合代码变成依赖注入代码的方法:

<?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">     <bean id="userDao"  class="com.igeek.spring.UserDaoImpl"/>
    <!--
    service :必须双方都是bean:在创建service的时候,主动将dao的依赖对象注入交给serivce
     -->
    <bean name="userService" class="com.igeek.spring.UserServiceImpl">
       <!-- property:
       setter属性注入
           * name:setter属性的名字,和类一致。如果setXxx,则这里为xxx,如果setUserDAO,则这里为userDAO
            spring会自动调用setUserDao(IUserDao userDao)方法
           * ref:spring容器中定义的bean(对象)的名字
        -->
       <property name="userDao" ref="userDao"/>
    </bean>
</beans>
//业务层实现
public class UserServiceImpl implements IUserService{
    //定义属性
    private IUserDao userDao;     //提供set方法,使用setXxx方法完成属性的注入
    public void setUserDao(IUserDao userDao) {
       this.userDao = userDao;
    }        //使用依赖注入的方式获取dao
    public void login() {
       System.out.println("UserServiceImpl-service层被调用了。。。");
       userDao.findByUsernameAndPassword();
    }
} //测试
public class SpringTest {     @Test
    //模拟表现层
    public void test(){
       //spring的配置方式,IOC控制反转
       //构建一个spring的工厂,使用applicationContext.xml(spring的核心配置文件)获取对象
       ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
       //从spring工厂中使用对象的标识获取对象
       IUserService userService = (IUserService) ac.getBean("userService");
userService.login();
    }
}

简单分析:

Spring的工厂

ApplicationContext直译为应用上下文,是用来加载Spring框架配置文件,来构建Spring的工厂对象,它也称之为Spring容器的上下文对象,也称之为Spring的容器

ApplicationContext 只是BeanFactory(Bean工厂,Bean就是一个java对象) 一个子接口

为什么不直接使用顶层接口对象来操作呢?
  • BeanFactory 采取延迟加载,第一次getBean时才会初始化Bean

  • Beanfactory的用法:

     BeanFactory ac = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));

     BeanFactory ac = new XmlBeanFactory(new FileSystemResource("D:\\applicationContext.xml"));
  • ApplicationContext是对BeanFactory扩展,提供了更多功能

    1.国际化处理

    2.事件传递

    3.Bean自动装配

    4.各种不同应用层的Context实现

Spring工厂的直接获取(两种方式)

方法一:从classpath路径加载,在类路径下寻找配置文件来实例化容器

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
//可以加载多个Spring配置文件
ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml"});

可以在整个类路径中寻找xml文件

  • 通过这种方式加载。需要将spring的配置文件放到当前项目的classpath路径下

    *  classpath路径指的是当前项目的src目录,该目录是java源文件的存放位置

方法二:从磁盘路径加载,在文件系统路径下寻找配置文件来实例化容器

ApplicationContext ctx = new FileSystemXmlApplicationContext("d:\\applicationContext.xml");
ApplicationContext ctx = new FileSystemXmlApplicationContext(new String[]{"d:\\applicationContext.xml"});
  • Spring的配置文件可以指定多个,可以通过String数组传入。
  • 通过getBean方法获得Spring容器管理Bean对象

Spring 之初识IOC和DI的更多相关文章

  1. Spring核心思想——IOC和DI

    基本概念 IOC是什么?     IOC(Inversion of Control)控制反转,IOC是一种新的Java编程模式,目前很多轻量级容器都在广泛使用的模式. IOC解决了什么问题?      ...

  2. 用IDEA详解Spring中的IoC和DI(挺透彻的,点进来看看吧)

    用IDEA详解Spring中的IoC和DI 一.Spring IoC的基本概念 控制反转(IoC)是一个比较抽象的概念,它主要用来消减计算机程序的耦合问题,是Spring框架的核心.依赖注入(DI)是 ...

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

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

  4. spring.net中间IoC、DI和MVC

    轮廓 spring.net它是开源的业务层框架,功能很强大,它归结到什么都有3能:面向切面编程:IoC和DI:提供综合型的框架支持,本片博客主要说一下IoC和DI.和其提供的对MVC框架的支持. Io ...

  5. Spring自学教程-IOC、DI、AOP(二)

    一.spring的IOC-就是怎样使用spring来创建对象 二.springDI(依赖注入)-就是怎样给属性赋值 通过set方式赋值 以下我们只需要记住两点的赋值,基本类型和引用类型的赋值 基本类型 ...

  6. Spring 简单使用IoC与DI——XML配置

    目录 Spring简介 导入jar包 Spring配置文件 Spring的IoC IoC简介 快速使用IoC Spring创建对象的三种方式 使用构造方法 使用实例工厂 使用静态静态工厂 Spring ...

  7. Spring系列(1)--IOC 和 DI

    IOC 和 DI IOC 原理 xml 配置文件配置 bean dom4j 读取配置文件 工厂设计模式 反射机制创建对象 applicationContext.xml 配置文件,该配置文件名可自定义: ...

  8. 理解Spring中的IoC和DI

    什么是IoC和DI IoC(Inversion of Control 控制反转):是一种面向对象编程中的一种设计原则,用来减低计算机代码之间的耦合度.其基本思想是:借助于"第三方" ...

  9. 学习Spring5必知必会(3)~Spring的核心 IoC 和 DI

    一.Spring的核心 IoC(基于XML) 1.IoC容器 (1)BeanFactory容器创建对象: //使用BeanFactory @Test void testBeanFactory() th ...

随机推荐

  1. (十二)golang--进制和位运算

    1.基本进制 (1)二进制:0,1,满2进1 在golang中,不能直接使用一个二进制表示一个整数,可以用八进制.十进制和十六进制表示 (2)十进制:0-9,满10进1 (3)八进制:0-7,满8进1 ...

  2. 1. 彤哥说netty系列之开篇(有个问卷调查)

    你好,我是彤哥,本篇是netty系列的第一篇. 欢迎来我的公从号彤哥读源码系统地学习源码&架构的知识. 简介 本文主要讲述netty系列的整体规划,并调查一下大家喜欢的学习方式. 知识点 ne ...

  3. python之变量名

    在python中,变量不需要提前声明,创建时直接对其赋值即可,变量类型由赋给变量的值决定.值得注意的是,一旦创建了一个变量,就需要给该变量赋值. 变量名应严格遵守以下规则: 1.变量名只能包含:字母/ ...

  4. PHP关于access_token失效问题

    PHP关于access_token失效问题 有时候PHP设置了缓存 明明就是没有过期 但却提示失效这情况一般就是1 多个appid和secrete 生成的access_token互相覆盖了 所以 这种 ...

  5. docker项目——搭建飞机大战小游戏

    项目2:搭建打飞机小游戏,验证数据持久化(最底下有链接) 第一步:拉取镜像 [root@localhost docker-image]# docker load < httpd_img.tar. ...

  6. Spring 框架常用语法进行总结

    Spring 框架常用语法进行总结: spring框架的二大主要的功能就是IOC和AOP. IOC: 控制反转(依赖注入) AOP: 面向切面编程 学习spring最好的方法就是去看官网,里面有详细的 ...

  7. flink 流式处理中如何集成mybatis框架

    flink 中自身虽然实现了大量的connectors,如下图所示,也实现了jdbc的connector,可以通过jdbc 去操作数据库,但是flink-jdbc包中对数据库的操作是以ROW来操作并且 ...

  8. 如何在 PHP 和 Laravel 中使用 Traits

    事实上,PHP 作为一门编程语言存在的问题之一,就是你只能使用单继承.这意味着一个类只能从另一个类中继承.例如,可能希望从几个不同的类继承方法,以防止代码重复.在 PHP 5.4 中 一个新的语言特性 ...

  9. Fuzzy模糊推导(Matlab实现)

    问题呈述 在模糊控制这门课程中,学到了与模糊数学及模糊推理相关的内容,但是并不太清楚我们在选择模糊规则时应该如何处理,是所有的规则都需要由人手工选择,还是仅需要选择其中的一部分就可以了.因此,在课程示 ...

  10. nyoj 72-Financial Management (求和 ÷ 12.0)

    72-Financial Management 内存限制:64MB 时间限制:3000ms 特判: No 通过数:7 提交数:12 难度:1 题目描述: Larry graduated this ye ...