J2EE框架技术 第四章 J2EE的IOC

embedded/2025/4/2 5:52:20/

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

第一节: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,建立方法如下图所示:

在该文件中写入下列代码:

java"><?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.ppmy.cn/embedded/178192.html

相关文章

LangChain4j 入门(二)

LangChain 整合 SpringBoot 下述代码均使用 阿里云百炼平台 提供的模型。 创建项目&#xff0c;引入依赖 通过 IDEA 创建 SpringBoot 项目&#xff0c;并引入 Spring Web 依赖&#xff0c;SpringBoot 推荐使用 3.x 版本。 引入 LangChain4j 和 WebFlux 依赖 <!--阿里云 D…

鸿蒙学习手册(HarmonyOSNext_API16)_数据持久化②:键值型数据库

概述 键值型数据库就像一个大抽屉柜&#xff0c;每个抽屉都有一个唯一的标签&#xff08;键&#xff09;&#xff0c;里面可以放任何东西&#xff08;值&#xff09;。当你需要存或取东西时&#xff0c;直接看标签拿对应的抽屉就行&#xff0c;不用管其他抽屉里有什么。这种简…

C++ STL常用算法之常用排序算法

常用排序算法 学习目标&#xff1a; 掌握常用的排序算法。 算法简介&#xff1a; sort //对容器内元素进行排序 random_shuffle //洗牌&#xff0c;指定范围内的元素随机调整次序 merge //容器元素合并&#xff0c;并存储到另一容器中 reverse //反转指定范围的元素 so…

[Linux]解决虚拟机 ubantu系统下网络的问题

问题来源&#xff1a;打开ubantu发现网络连接标识消失 解决步骤&#xff1a; 重新安装&#xff0c;前面操作无效 切换桥接模式、直连手机网络 已解决&#xff1a;

OpenCV基础——轮廓检测、模板匹配、图像均衡化

接上期继续归纳&#xff1a; OpenCV基础——梯度计算、边缘检测、图像金字塔-CSDN博客 一.轮廓检测 1.实现 从边界中找出整体的、连在一起的轮廓~ cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE) mode参数为轮廓检索模式&#xff0c;这里一般选择下面的第四…

uniapp选择文件使用formData格式提交数据

1. Vue实现 在vue项目中,我们有个文件,和一些其他字段数据需要提交的时候,我们都是使用axios 设置请求头中的Content-Type: multipart/form-data,然后new FormData的方式来进行提交。方式如下: const sendRequest = () => {const formData = new FormData()formData…

RCE(自增、取反、异或)

自增: 也就是说&#xff0c;a > b&#xff0c;b > c... 所以&#xff0c;我们只要能拿到一个变量&#xff0c;其值为a&#xff0c;通过自增操作即可获得a-z中所有字符。 无字母数字构造&#xff1a; 所有敏感字符串&#xff08;ASSERT、_POST&#xff09;通过自增动态生…

github匿名链接获取方法

参考链接&#xff1a;https://blog.csdn.net/weixin_39278265/article/details/104300819 Anonymous GitHub 打开网址&#xff1a;https://anonymous.4open.science/登录自己的github账号 构建匿名仓库 这张图片显示的是一个代码托管平台&#xff08;可能是GitHub、GitLab或…