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

news2024/11/24 10:48:22

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/beans
           http://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.coloradmin.cn/o/1422015.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用Eclipse搞Android项目报错

相信现在都没什么人还会用Eclipse来开发的了。 不过安装完后&#xff0c;打开Eclipse会提示我的Jdk版本不符合 --------------------------- Incompatible JVM --------------------------- Version 1.8.0_391 of the JVM is not suitable for this product. Version: 17 or g…

2024年热销游泳耳机推荐,主流游泳耳机哪个品牌更好?

游泳作为一项全面锻炼身心的运动&#xff0c;长期参与对个人健康大有裨益。被誉为“运动之王”的游泳&#xff0c;不仅能避免常规运动可能带来的关节损伤&#xff0c;而且无需高超的专业姿势和健身技巧&#xff0c;适合各年龄段的人群。然而&#xff0c;在现今的游泳运动中&…

通过Nacos权重配置,实现微服务金丝雀发布效果(不停机部署)

在微服务项目迭代的过程中&#xff0c;不可避免需要上线&#xff1b;上线对应着部署&#xff0c;或者升级部署&#xff1b;部署对应着修改,修改则意味着风险。 传统的部署都需要先停止旧系统&#xff0c;然后部署新系统&#xff0c;之后需要对新系统进行全面的功能测试&#xf…

TensorFlow2实战-系列教程6:猫狗识别3------迁移学习

&#x1f9e1;&#x1f49b;&#x1f49a;TensorFlow2实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Jupyter Notebook中进行 本篇文章配套的代码资源已经上传 猫狗识别1 数据增强 猫狗识别2------数据增强 猫狗识别3------迁移学习 1、迁移学习 …

java基础(面试用)

一、基本语法 1. 注释有哪几种形式&#xff1f; //单行注释&#xff1a;通常用于解释方法内某单行代码的作用。 //int i 0;//多行注释&#xff1a;通常用于解释一段代码的作用。 //int i 0; //int i 0;//文档注释&#xff1a;通常用于生成 Java 开发文档。 /* *int i 0; …

Springboot项目启动后浏览器不能直接访问接口,而postman可以访问?

在云服务器上部署springboot后端时&#xff0c;项目启动后浏览器不能直接访问接口,而postman可以访问。这是当时困扰了我大半天的小问题&#xff0c;在我打开防火墙和阿里云安全组之后还是没解决。然后在网上搜了很多很多资料&#xff0c;以为是浏览器访问权限或者是https什么证…

Oracle 的闪回技术是什么

什么是闪回 Oracle 数据库闪回技术是一组独特而丰富的数据恢复解决方案&#xff0c;能够有选择性地高效撤销一个错误的影响&#xff0c;从人为错误中恢复。闪回是一种数据恢复技术&#xff0c;它使得数据库可以回到过去的某个状态&#xff0c;可以满足用户的逻辑错误的快速恢复…

Walrus 实用教程|Walrus + Gitlab,打通CI/CD 自动化交付!

Walrus file 是 Walrus 0.5 版本推出的新功能&#xff0c;用户可以通过一个非常简洁的 YAML 描述应用或基础设施资源的部署配置&#xff0c;然后通过 Walrus CLI 执行 walrus apply或在 Walrus UI 上进行import&#xff0c;将 Walrus file 提交给 Walrus server&#xff0c;由 …

N65总账凭证管理凭证查询(sql)

--核算账簿 select code , name , pk_setofbook from org_setofbook where ( pk_setofbook in ( select pk_setofbook from org_accountingbook where 1 1 and ( pk_group N0001A11000000000037X ) and ( accountenablestate 2 ) ) ) order by code;--核算账簿 select code …

60、Flink CDC 入门介绍及Streaming ELT示例(同步Mysql数据库数据到Elasticsearch)-完整版

Flink 系列文章 一、Flink 专栏 Flink 专栏系统介绍某一知识点&#xff0c;并辅以具体的示例进行说明。 1、Flink 部署系列 本部分介绍Flink的部署、配置相关基础内容。 2、Flink基础系列 本部分介绍Flink 的基础部分&#xff0c;比如术语、架构、编程模型、编程指南、基本的…

Spring MVC-01

关于Spring MVC Spring MVC是基于Spring框架基础之上的&#xff0c;主要解决了后端服务器接收客户端提交的请求&#xff0c;并给予响应的相关问题。 MVC Model View Controller&#xff0c;它们分别是&#xff1a; - Model&#xff1a;数据模型&#xff0c;通常由业务逻辑层…

TypeScript(七) 函数

1. TypeScript 函数 1.1. 函数的定义 函数就是包裹在花括号中的代码块&#xff0c;前面使用关键字function。 语法&#xff1a; // An highlighted block function function_name() {// 执行代码 }实例&#xff1a; function test() { // 函数定义console.log("我就是…

Linux系统——文本三剑客

目录 一、grep 1.格式 2.选项 2.1 grep重定向 2.2grep -m 匹配到几次停止 2.3grep -i 忽略大小写 2.4grep -n 显示行号 2.5grep -c 统计匹配行数 2.6grep -A 后几行 2.7grep -C 前后三行 2.8grep -B 前三行 2.9grep -e 或 2.10grep -w 匹配整个单词 2.11grep -r…

聊聊百度造车

10月27日&#xff0c;极越-01上市&#xff0c;一个月后大幅降价&#xff0c;时至今日距离发布已经过去了两个月&#xff0c;官方迟迟不肯公布销量&#xff0c;实际情况大家也都心知肚明。 如今小米汽车技术发布会风头无两&#xff0c;而同一年宣布造车的极越却无人问津&#x…

ElementUI安装与使用指南

Element官网-安装指南 提醒一下&#xff1a;下面实例讲解是在Mac系统演示的&#xff1b; 一、开发环境配置 电脑需要先安装好node.js和vue2或者vue3 安装Node.js Node.js 中文网 安装node.js命令&#xff1a;brew install node node.js安装完后&#xff0c;输入&#xff1…

界面控件DevExtreme v23.2新版亮点 - 全新的Fluent主题

DevExtreme拥有高性能的HTML5 / JavaScript小部件集合&#xff0c;使您可以利用现代Web开发堆栈&#xff08;包括React&#xff0c;Angular&#xff0c;ASP.NET Core&#xff0c;jQuery&#xff0c;Knockout等&#xff09;构建交互式的Web应用程序。从Angular和Reac&#xff0c…

[力扣 Hot100]Day18 矩阵置零

题目描述 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 出处 思路 在原数组上直接操作势必会出现“冗余”的0&#xff0c;即原本[i,j]处不是0&#xff0c;例如由于i行的其他位置有0导致[i,j]…

【深度学习每日小知识】Precision 精度

Precision 精度 精度是机器学习 &#xff08;ML&#xff09; 中分类器或预测器准确性的度量。它被定义为分类器做出的真正正预测数与分类器所做的正预测总数之比。换句话说&#xff0c;真正正确的是正面预测的比例。 精度是机器学习中的一个关键参数&#xff0c;因为它量化了…

Adobe Photoshop 2024 v25.4.0 - 专业的图片设计软件

Adobe Photoshop 2024 v25.4.0更新了&#xff0c;从照片编辑和合成到数字绘画、动画和图形设计&#xff0c;任何您能想象到的内容都能通过PS2024轻松实现。 利用人工智能技术进行快速编辑。学习新技能并与社区分享您的工作。借助我们的最新版本&#xff0c;做令人惊叹的事情从未…