【java核心-IoC(控制反转)和DI(依赖注入)及AOP(面向切面编程)】

java核心-IoC(控制反转)和DI(依赖注入)及AOP(面向切面编程)

    • 控制反转(IoC)
    • 依赖注入(DI)
    • 面向切面编程(AOP
    • AOP的应用场景包括但不限于:
    • 以下是实现IoC和DI的步骤和示例代码:

在这里插入图片描述

Spring框架是一个轻量级的开源框架,用于开发企业级Java应用程序。它提供了一种便捷的方式来管理应用程序的依赖关系,实现松耦合和可维护性。

控制反转(IoC)

是Spring框架的核心思想之一。它通过将创建和管理对象的责任交给容器,实现了软件组件之间的松耦合。传统开发模式中,对象需要自己创建和管理它们所依赖的其他对象。而在Spring中,对象只需要声明它们所依赖的其他对象,而不需要负责创建和管理这些对象。这样,当需要某个对象时,Spring容器会自动将其注入到需要的位置,称为依赖注入(DI)。

依赖注入(DI)

是IoC的具体实现方式之一。通过DI,对象的依赖关系不是在对象内部进行硬编码,而是通过外部的配置文件或注解来声明和配置。Spring容器会根据这些配置,在需要的时候将依赖注入到对象中,从而实现对象之间的解耦。

面向切面编程(AOP

)是Spring框架的另一个重要特性。AOP允许开发者将与业务逻辑无关,但又必要的功能(例如日志记录、事务管理等)从应用程序的核心业务逻辑中分离出来。通过定义切面(Aspect),开发者可以将这些横切关注点(Cross-cutting Concerns)在需要的地方进行统一配置和管理,而不需要在每个业务逻辑代码中都去编写这些功能。这样可以提高代码的可维护性和可重用性,同时降低代码的复杂性。

AOP的应用场景包括但不限于:

  1. 日志记录:可以在方法执行前后记录方法的入参、出参和执行时间等信息。
  2. 事务管理:可以在方法执行前开启事务,方法正常执行后提交事务,方法抛出异常后回滚事务。
  3. 安全检查:可以在方法执行前进行权限检查,确保只有具有特定权限的用户才能访问敏感资源。
  4. 缓存管理:可以在方法执行前先检查缓存中是否存在结果,避免重复计算。
  5. 异常处理:可以在方法执行过程中捕获并处理异常,避免异常导致系统崩溃。

通过AOP,可以将这些横切关注点与核心业务逻辑进行隔离,提高代码的可维护性和可测试性,同时降低代码的重复性和复杂性。

以下是实现IoC和DI的步骤和示例代码:

  1. 引入Spring依赖:在Maven或Gradle配置文件中添加Spring相关依赖。

  2. 创建POJO类:定义需要被管理的Java类,包括类的属性和方法。

public class UserService {private UserRepository userRepository;public void setUserRepository(UserRepository userRepository) {this.userRepository = userRepository;}public void saveUser(User user) {userRepository.save(user);}
}
  1. 创建依赖类:定义被依赖的Java类,例如UserRepository。
public class UserRepository {public void save(User user) {// 保存用户数据的逻辑}
}
  1. 创建Spring配置文件:创建一个XML文件,用于配置Spring容器和对象的依赖关系。
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="userService" class="com.example.UserService"><property name="userRepository" ref="userRepository" /></bean><bean id="userRepository" class="com.example.UserRepository" /></beans>
  1. 创建Spring容器:在Java代码中加载Spring配置文件,创建Spring容器。
public class Main {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");UserService userService = context.getBean("userService", UserService.class);User user = new User("John");userService.saveUser(user);}
}

在上述代码中,UserService类通过setter方法将UserRepository对象注入进来,实现了依赖注入。通过Spring容器的getBean方法,可以从容器中获取已经创建好的对象,然后使用它们。

以上是一个简单的示例,演示了如何使用Spring实现IoC和DI。实际应用中,可能会涉及更复杂的配置和对象关系。但基本的原则是一致的:通过容器管理对象的创建和依赖关系,实现松耦合和可维护性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/442254.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安装和启动berTopic,hdbscan和importlib.metadata

1. 安装问题&#xff1a;hdbsacn 安装berTopic的时候&#xff0c;包 hdbsacn一直安装失败&#xff0c;报出以下错误&#xff1a; 尝试了很多办法&#xff1a;① 下载hdbscan的tar.gz文件安装&#xff0c;安装失败&#xff1b;② 安装*.whl文件&#xff0c;安装成功&#xff…

【C++初阶】C++入门(2)

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 文章目录 一、函数重载1.1 函数重载的概念1.2 函数重载的种类1.3 C支持函数重载的原理 二…

海外短剧系统国际短剧源码h5多语言版app挂载tiktok油管ins

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目 前言 一、海外短剧系统是什么&#xff1f; 二、海外短剧系统功能与运营方式介绍 1.系统功能 2.短剧APP运营方式 总结 前言 本文简单介绍海外短剧系统的功能&#xff…

Flutter的安装与环境配置

一、下载安装Futter&#xff1a; 1、Flutter中文文档&#xff1a; 安装和环境配置 - Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 2、下载 Futter SDK&#xff1a; Flutter中文文档 里面有&#xff0c;下载完成之后找个文件夹解压出来&#xff0c;最好不要将 Flu…

asp.net core监听本地ip地址

开发asp.net core的时候遇到一个问题我想提供访问供其他同事测试&#xff0c;但是默认都是localhost或者127.0.0.1。我想换成我的Ip地址访问但是不行&#xff0c;百度搜索需要更换监听的地址即修改launchSettings.json&#xff0c;修改为0.0.0.0:5248&#xff0c;这样不管local…

Enlight官方第三届“金融帝国杯”玩家游戏视频邀请赛《获奖者名单公布》

Enlight官方第三届“金融帝国杯”玩家游戏视频邀请赛 《获奖者名单公布》 ————————————— Ⅰ〖公布单位〗 金融之路CapLab官方中文社群竞赛委员会 ————————————— Ⅱ〖公布时间〗 2024年01月31日 ————————————— Ⅲ〖获奖结果〗 一等奖1名…

gdp调试—Linux

目录 介绍 使用 介绍 代码分为debug模式和release模式 如果一份代码要被调试&#xff0c;这份代码必须是debug Linux下编译代码默认是是release模式 如果你想代码是debug模式 必须加上 - g 小提&#xff1a; vim默认&#xff1a;命令模式 gcc默认&#xff1a;releas…

比Filebeat更强大的日志收集工具-Fluent bit的http插件实战

文章目录 1.前言2. fluent bit http插件配置以及参数详解3. Http 接口服务3.1 开发Http 接口服务3.2 重启fluent bit向http web服务发送数据 1.前言 Fluent Bit 的 HTTP 插件提供了一种灵活而通用的机制&#xff0c;可用于将日志数据 从各种环境中传输到指定的远程服务器&#…

【JVM】类加载流程

目录 1.加载 2.链接 &#xff08;1&#xff09;校验 &#xff08;2&#xff09;准备 &#xff08;3&#xff09;解析 3.初始化 4.使用 5.卸载 1.加载 加载阶段&#xff0c;简言之&#xff0c;查找并加载类的二进制数据&#xff0c;生成 Class 的实例 在加载类时&#x…

5. Threejs案例-制作半色调和旋转效果

5. Threejs案例-制作半色调和旋转效果 实现效果 代码 <!DOCTYPE html> <html lang"en"> <head><title></title><meta charset"UTF-8"><script src"ThreeJS/three.js"></script><script sr…

X-tile的使用选择最适cut-off值

数据准备&#xff1a; 将此数据存成txt&#xff08;文本文件&#xff0c;制表符分隔&#xff09;。 打开x-tile并点击分析&#xff1a; 然后File-open-选择数据导入。 Censor对应OS即生存状态&#xff0c;Survivaltime对应OS.time生存时间&#xff0c;marker1就是要研究的变量…

房屋租赁系统-java

思维导图&#xff1a;业务逻辑 类的存放&#xff1a; 工具类 Utility package study.houserent.util; import java.util.*; /***/ public class Utility {//静态属性。。。private static Scanner scanner new Scanner(System.in);/*** 功能&#xff1a;读取键盘输入的一个菜单…