当前位置: 首页 > news >正文

J2EE框架技术 第四章 J2EE的IOC

    序:本章将叙述在项目完成完成基本的增删改查后,融入了项目的重要思想之一,控制翻转。其主要目的是为了降低程序的耦合性,使项目使用起来更加灵活。

第一节:IOC的概念

一、什么是IOC?

概念:

Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。如何理解好Ioc呢?理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”

核心思想:

●谁控制谁,控制什么:传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对 象的创建;谁控制谁?当然是IoC 容器控制了对象;控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。

●为何是反转,哪些方面反转了:有反转就有正转,传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象;为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;哪些方面反转了?依赖对象的获取被反转了。

二、容器

概念:

容器知道对哪些对象进行实例化,配置和组装。配置元数据可以通过 XML,Java 注释或 Java 代码来表示。下图是 Spring 如何工作的高级视图。Spring IoC 容器利用 Java 的 POJO 类和配置元数据来生成完全配置和可执行的系统或应用程序。

IOC 容器具有依赖注入功能的容器,它可以创建对象,IOC 容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。通常new一个实例,控制权由程序员控制,而"控制反转"是指new实例工作不由程序员来做而是交给Spring容器来做。在Spring中BeanFactory是IOC容器的实际代表者。

类型:

1.BeanFactory容器:

    在 Spring 中,有大量对 BeanFactory 接口的实现。其中,最常被使用的是 XmlBeanFactory 类。这个容器从一个 XML 文件中读取配置元数据,由这些元数据来生成一个被配置化的系统或者应用。

    在资源宝贵的移动设备或者基于 applet 的应用当中, BeanFactory 会被优先选择。否则,一般使用的是 ApplicationContext,除非你有更好的理由选择 BeanFactory。

源码实现

    首先,在项目中建立个utils工具包,然后在工具包下写入下列程序:

package utils;public class ResultMsg {
      private String message;    public void setMessage(String message){
          this.message  = message;    }    public void getMessage(){
          System.out.println("Your Message : " + message);    }}

    然后,在resource资源目录下建立beanfactory.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"
 
http://www.dtcms.com/a/99968.html

相关文章:

  • 19840 Dijkstra求最短路2
  • 文件上传存储安全OSS 对象分站解析安全解码还原目录执行
  • React编程的核心概念:数据流与观察者模式
  • POSIX 和 System V IPC的区别
  • 微信小程序(下)
  • 02_MySQL安装及配置
  • 去中心化金融的基石——以太坊
  • OSPF协议(1)
  • 海洋大地测量基准与水下导航系列之七我国海洋水下定位装备发展现状(下)
  • 耘想WinNAS:重新定义Windows电脑的存储革命
  • 一文速通Python并行计算:05 Python多线程编程-线程的定时运行
  • 查看达梦数据库对象
  • 信号与系统(郑君里)第一章-绪论 1-24 课后习题解答
  • C++学习之Linux文件编译、调试及库制作
  • 【AI论文】LeX-Art:通过可扩展的高质量数据合成重新思考文本生成
  • 命令窗口tuna.tsinghua.edu.cn,清华镜像源坏了,如何换成阿里源
  • codeformer论文学习
  • 三、分类模块,通用组件顶部导航栏Navbar
  • AireOS WLC安装License报错
  • Pytorch中torch.nn的学习
  • ‌19.思科路由器:OSPF协议引入直连路由的实验研究
  • keil自学笔记3(按键)
  • sqli-labs靶场 less 11
  • Qt warning LNK4042: 对象被多次指定;已忽略多余的指定
  • 机器学习的一百个概念(3)上采样
  • 创作领域“<em >一</em><em>分</em><em>快</em><em>3</em><em>官</em><em>网
  • Java 8 时区与历法处理指南:跨越全球的时间管理
  • Day50 单词规律
  • 小智机器人相关函数解析,BackgroundTask::Schedule (***)将一个回调函数添加到后台任务队列中等待执行
  • 多人协同进行qt应用程序开发应该注意什么?