Spring中IOC与ID入门

1,什么是IOC:

IOC是Inversion of Control的缩写,即“控制反转”,是一种设计思想,也是Spring框架的核心。在Java开发中,对象的创建和对象之间的调用关系是通过程序代码实现的,对象的创建和对象之间的调用过程由程序员来管理。而使用Spring框架后,对象的创建和对象之间的调用关系则由Spring容器来管理。这种将对象的创建和对象之间的调用过程交给Spring容器来管理的方式,就是控制反转。

IOC的主要解释:

IOC:控制反转,以前依赖的对象自己直接new,现在不需要new,框架会自动注入对象,创建对 象的权利转移给了框架; spring框架负责所有对象的创建、管理和依赖注入;所有的对象存储的容器叫做IOC容器;

IOC有什么作用:

在Spring中,IOC的主要作用是解耦。传统的Java开发中,对象之间的依赖关系是在代码中硬编码的,这样会导致代码的耦合度很高,一旦某个类发生了变化,就需要修改与之相关的所有代码。而使用IOC后,对象之间的依赖关系由Spring容器来管理,对象之间的耦合度降低了,代码的可维护性和可扩展性都得到了提高。此外,IOC还可以实现AOP(面向切面编程),可以在不修改原有代码的情况下,为程序添加新的功能

在Spring中的ID是什么意思:

DI:依赖注入,一个BookService类的功能需要依赖另外一个BookDao类配合,同时需要赋上一 个具体的对象,则成这种关系是依赖注入;

代码展示:

具体项目文件

 (1)创建项目导入spring的jar包注意这个jar包要在项目包中创建不用弄错了

 (2)根据目录中自己创建的结构创建接口及其实现类,做好准备工作

 dao层接口代码:

package com.li.dao;

public interface BookDao {
    void insert();
}

dao层实现类代码:

package com.li.dao.Imp;

import com.li.dao.BookDao;

public class BooksDaoImp implements BookDao {
    @Override
    public void insert() {
        System.out.println("BooksDaoImp......save");
    }
}

service层接口代码:

package com.li.service;

public interface BooksService {
    void save();
}

 service层实现类代码:

package com.li.service.Imp;

import com.li.dao.BookDao;
import com.li.service.BooksService;

public class BooksServiceImp implements BooksService {
    private BookDao bookDao;
    private String name;

    public void setName(String name) {
        this.name = name;
    }

    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }

    @Override
    public void save() {
        System.out.println("BooksServiceImp...save"+name);
        bookDao.insert();
    }
}

测试类代码:

package com.li.Test;

import com.li.service.BooksService;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test001 {
    BooksService booksService;
    @Test
    public void add(){
        System.out.println("Test001....add");
        ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("spring.xml");
        booksService = (BooksService) context.getBean("bookService");
        booksService.save();
    }

}

 

### 实现 PyQt5 中的 QProgressBar 并在主程序循环中更新 为了实现在 Python 的 PyQt5 项目中定义并更新 `QProgressBar`,可以按照以下方式构建代码逻辑。以下是详细的说明: #### 创建 QProgressBar 控件 通过继承 `QWidget` 类来创建一个窗口,并在其内部初始化 `QProgressBar` 控件[^2]。 #### 更新进度条的状态 可以通过信号槽机制或者定时器(如 `QBasicTimer` 或者 `QTimer`)定期调用函数以更新进度条的值[^4]。如果需要在一个独立的线程或函数中更新进度条,则应确保主线程不会被阻塞,通常会使用多线程技术[^1]。 下面是一个完整的示例代码,展示了如何在主程序的循环中动态更新进度条的状态: ```python import sys from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QProgressBar from PyQt5.QtCore import QTimer class MainWindow(QWidget): def __init__(self): super().__init__() self.init_ui() self.progress_value = 0 def init_ui(self): layout = QVBoxLayout() # 初始化进度条控件 self.progressBar = QProgressBar(self) self.progressBar.setValue(0) # 设置初始值为0 layout.addWidget(self.progressBar) # 添加按钮用于启动进度更新 button = QPushButton("Start Progress", self) button.clicked.connect(self.start_progress) layout.addWidget(button) self.setLayout(layout) def start_progress(self): """ 开始计时器以模拟主程序中的循环 """ self.timer = QTimer() # 创建一个定时器对象 self.timer.timeout.connect(self.update_progress_bar) # 连接超时信号到更新函数 self.timer.start(100) # 每隔100毫秒触发一次 def update_progress_bar(self): """ 更新进度条的值 """ if self.progress_value >= 100: self.timer.stop() # 当达到最大值时停止计时器 return self.progress_value += 1 # 增加进度值 self.progressBar.setValue(self.progress_value) if __name__ == "__main__": app = QApplication(sys.argv) window = MainWindow() window.setWindowTitle("PyQt5 QProgressBar Example") window.resize(300, 100) window.show() sys.exit(app.exec_()) ``` 上述代码实现了如下功能: - 使用 `QProgressBar` 显示当前任务的完成百分比。 - 利用 `QTimer` 来周期性地增加进度条的数值,从而模拟主程序中的长时间运行过程。 #### 多线程场景下的应用 当主程序涉及耗时操作时,为了避免 GUI 卡顿,建议将这些操作放入单独的工作线程中执行,并通过信号通知主线程更新 UI。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值