使用myeclipse开发spring一个Demo。

第一步:新建一个web project。

第二步:安装spring开发的支持包。

安装后多了这几个东西

3,定义一个操作接口:

  1. package com.Spring.Demo;
  2.  
  3. public interface IFruit {
  4.  
  5. public void eat();
  6.  
  7. }

4,定义接口操作子类。

  1. package com.Spring.Demo;
  2.  
  3. public class Apple implements IFruit {
  4.  
  5. @Override
  6. public void eat() {
  7.  
  8. System.out.println("吃苹果");
  9. }
  10.  
  11. }

随后不提供有工厂的操作类,因为spring本身就有工厂类。在之后的工作就不应该出现工厂类。

5,修改applicationContext.xml文件。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans
  3. xmlns="http://www.springframework.org/schema/beans"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xmlns:p="http://www.springframework.org/schema/p"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd">
  7.  
  8. <bean id="apple" class="com.Spring.Demo.Apple"></bean>
  9.  
  10. </beans>

6,随后通过特定模式启动spring容器。

找到子类操作接口。

  1. package com.Spring.Demo;
  2.  
  3. import org.springframework.context.ApplicationContext;
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;
  5.  
  6. public class TestApple {
  7.  
  8. public static void main(String[] args) {
  9.  
  10. ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
  11. IFruit fruit=ctx.getBean("apple",Apple.class);
  12. fruit.eat();
  13. }
  14. }

整个代码操作过程中无法发现工厂设计模式的明确使用,因为所有的工厂都由spring帮助用户处理了。而且在

applicationContext.XML配置文件里,都在spring容器启动时候默认实例化好了所有的对象。

使用的时候,根据ID名称取出即可。

使用过程中的类:

1,应用上下文类:ApplicationContext

所有配置的信息都需要通过此类读取。

常用方法:getBean(String name,Class<T> requireType)。取得指定名称的bean对象,并且设置泛型为指定操作的bean类型,避免向下转型

2,由于资源控制文件可能在任意位置上,例如CLASSPATH或者磁盘中,那么必须使用相关子类:

 ClassPathXmlApplicationContext("ClassPath");表示在CLASSPATH中读取资源文件。

所有spring配置的<bean>元素都表示在spring容器启动的时候自动初始化,所以在使用对象之前已经准备好了供用户使用的实例,

用户在使用的时候,只需要通过bean的ID,获取对象实例,赋值给对象声明。

如果有更严格的配置也可以把接口配置上去(不过没啥用)

  1. <bean id="fruit" class="com.Spring.Demo.IFruit" abstract="true"></bean>
  2. <bean id="apple" class="com.Spring.Demo.Apple" parent="fruit"></bean>

由于接口是抽象的,那么表示接口对象不会进行实例化。而在编写apple元素的时候加上的parent 也只是说明而已。

总结

spring是一个非常庞大的工厂,所有对象的实例化等赋值部分,不需要用户赋值处理了,全部交给spring完成。

用户只需要根据需求引用对象实例即可。

04-spring-控制反转的更多相关文章

  1. Spring 控制反转

    Spring 控制反转 具体内容 Spring 开发框架之中有几个概念DI&IOC.AOP.那么要想理解Spring就必须首先理解控制反转的核心意义是什么? 对于IOC来讲如果直接进行文字的描 ...

  2. Spring 控制反转容器(Inversion of Control – IOC)

    系列教程 Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of Contro ...

  3. Spring 04: IOC控制反转 + DI依赖注入

    Spring中的IOC 一种思想,两种实现方式 IOC (Inversion of Control):控制反转,是一种概念和思想,指由Spring容器完成对象创建和依赖注入 核心业务:(a)对象的创建 ...

  4. 尚学堂Spring视频教程(二):Spring控制反转

    用Spring来实现IOC 在上节中我们自定义了一个接口BeanFactory和类ClassPathXmlApplicationContext来模拟Spring,其实它们在Spring中确实是存在的, ...

  5. Spring控制反转(IOC)和依赖注入(DI),再记不住就去出家!

    每次看完spring的东西感觉都理解了,但是过了一段时间就忘,可能是不常用吧,也是没理解好,这次记下来. 拿ssh框架中的action,service,dao这三层举例: 控制反转:完成一个更新用户信 ...

  6. Spring控制反转(依赖注入)的最简单说明

    1.常规方式实现实例化 1.1已有角色如下: 一个接口Interface,两个接口实现类InstatnceA.InstanceB,一个调用类User 1.2当前实例化InstanceA如下: Inte ...

  7. spring 控制反转与依赖注入原理-学习笔记

    在Spring中有两个非常重要的概念,控制反转和依赖注入:控制反转将依赖对象的创建和管理交由Spring容器,而依赖注入则是在控制反转的基础上将Spring容器管理的依赖对象注入到应用之中: 所谓依赖 ...

  8. 对spring控制反转以及依赖注入的理解

    一.说到依赖注入(控制反转),先要理解什么是依赖. Spring 把相互协作的关系称为依赖关系.假如 A组件调用了 B组件的方法,我们可称A组件依赖于 B组件. 二.什么是依赖注入. 在传统的程序设计 ...

  9. Spring 控制反转和依赖注入

    控制反转的类型 控制反转(IOC)旨在提供一种更简单的机制,来设置组件的依赖项,并在整个生命周期管理这些依赖项.通常,控制反转可以分成两种子类型:依赖注入(DI)和依赖查找(DL),这些子类型各自又可 ...

  10. Spring控制反转与依赖注入(IOC、DI)

    IOC: 反转控制   Inverse Of Control DI:依赖注入 Dependency Injection 目的:完成程序的解耦合 解释:在应用系统的开发过程中,有spring负责对象的创 ...

随机推荐

  1. [Codeforces #211] Tutorial

    Link: Codeforces #211 传送门 一套非常简单的题目,但很多细节都是错了一次才能发现啊…… 还是不能养成OJ依赖症,交之前先多想想corner case!!! A: 模拟,要特判0啊 ...

  2. [USACO] 2017 DEC Bronze&Silver

    link:http://www.usaco.org/index.php?page=dec17results Problem A(Bronze) 这是一道非常简单的判断重叠面积的题目,但第一次提交仍会出 ...

  3. BZOJ 2888 资源运输(启发式合并LCT)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2888 [题目大意] 不断加边,问每个连通块的重心到其它点的距离和的和 [题解] 启发式 ...

  4. 监控RTSP 流

    rtsp://admin:admin12345@192.168.0.100/live1.sdp

  5. Matlab横坐标从特定值开始

    set(gca,'XTick',1:1:length(x)); set(gca,'XTickLabel',{'15','20','25','30','35','40','45','50','55',' ...

  6. 【redis】在spring boot2.0中使用redis的StringRedisTemplate 自动注入@Autowired

    1.使用opv.increment 达到增量的效果[判断某个用户 是第几次做这种操作] @RequestMapping("createCode") @RestController ...

  7. 粗览Activiti Modeler操作和源代码

    Activiti Model Editor组件 我的 了解ActivitiExplorer及其Vaadin实现方式博文里提到ActivitiExplorer使用的是Vaadin架构,但是Activit ...

  8. 方差分析anova

    方差分析 参考:http://wiki.mbalib.com/wiki/%E6%96%B9%E5%B7%AE%E5%88%86%E6%9E%90  方差分析(Analysis of Variance, ...

  9. mac远程链接 windows

    https://bbs.feng.com/read-htm-tid-10516042.html 一.利用电脑系统自带的远程(喜欢懒人版的方法,或者小白用户,可以跳过这个方法看下一个) 1.打开mac, ...

  10. JQUERY中的事件处理:RETURN FALSE、阻止默认行为、阻止冒泡以及兼容性问题

    return false 在jQuery中,我们常用return false来阻止浏览器的默认行为,那"return false"到底做了什么? 当你每次调用"retur ...