小记:dagger

本文深入探讨Dagger2依赖注入框架的使用方法,通过具体示例讲解如何避免类之间的直接依赖,降低代码耦合度。文章展示了如何在A类中注入依赖的B和C类,其中C类采用Model注入法,通过Module提供实例,最终在MainActivity中绑定并调用A类的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

dagger

就是一个依赖注入,有时候我们不希望出现这样的情况 a类依赖于B类 一般都是在A类中去new B
类 但是这样有问题,玩意B类的构造函数改了,那么就要去改A类中的代码 是不符合标准的

创建一个A类

import javax.inject.Inject;

public class A {
    @Inject
    B b;
    @Inject
    C c;
    @Inject
    public A (){}
    //此处应该将结果回调,为了简单不写了
    public void xxoo(){
        System.out.println("翠花,关灯。。。");
        b.birthSon();
    }
    public void appointment(){
        System.out.println("上官无雪,晚上一起去看看月亮聊聊理想啊?");
        c.turnDown();
    }
}

inject就是注入的意思 A类依赖于B和C类,所以需要注入他们,但是想注入的话B类中就必须把构造函数也加这个注释

public class B {
    @Inject
    public B(){}

    public void birthSon(){
        System.out.println("我王二狗的儿子王不二降临人世了!");
    }
}

但是C类我们不去用一般注入方法,
用model注入法

C类是一个没有使用@Inject注解其构造函数的类,而且我们也无法加上,可能由于它是一个第三方类,或者其他原因。那我们想要使用dagger2将其注入到A类中就需要使用到Module。Module负责提供C类的实例对象,当Component发现了使用 @Inject注解的C类属性时,先去Module中查找,没有的话再去看其构造函数是不是使用@Inject标记了,如果都没有,注入失败。

public class C {
    public void turnDown(){
        System.out.println("癞蛤蟆想吃天鹅肉,滚!");
    }
}

写了一个module类 标记了@module的注解 其实就是去这个里面找他所想要依赖的类 给他返回就行了

@Module
public class DaggerModule {
    //此处为了尽量简单,其实这边可以有很多种写法
    @Provides
    public C providerC(){
        return new C();
    }


}
@Component(modules = {DaggerModule.class})
public interface MatchComponent {
    //添加被注入的东西,他会生成方法去注入你要发东西
    void mainActivityInject(MainActivity activity);

}

这给就是一个绑定类
放入mainactivity因为我们最后需要去里面去调用A类的方法,就是绑定他们在mainactivity里添加A类的依赖
当调用了 component.mainActivityInject(this);后就把mainactivity和A类绑定了也算一种依赖把

public class MainActivity extends AppCompatActivity {
    @Inject
    A a;
    @Inject
    B b;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        MatchComponent component= DaggerMatchComponent.builder().build();
        component.mainActivityInject(this);
        findViewById(R.id.button1).setOnClickListener(v->{a.xxoo();});
        findViewById(R.id.button2).setOnClickListener(v->{a.appointment();});
    }
}
管理后台HTML页面是Web开发中一种常见的实践,主要用于构建企业或组织内部的管理界面,具备数据监控、用户管理、内容编辑等功能。本文将探讨一套美观易用的二级菜单目录设计,帮助开发者创建高效且直观的后台管理系统。 HTML5:作为超文本标记语言的最新版本,HTML5增强了网页的互动性和可访问性,提供了更多语义元素,如<header>、<nav>、<section>、<article>等,有助于清晰地定义网页结构。在管理后台中,HTML5可用于构建页面布局,划分功能区域,并集成多媒体内容,如图像、音频和视频。 界面设计:良好的管理后台界面应具备清晰的导航、一致的布局和易于理解的图标。二级菜单目录设计能够有效组织信息,主菜单涵盖大类功能,次级菜单则提供更具体的操作选项,通过展开和折叠实现层次感,降低用户认知负担。 CSS:CSS是用于控制网页外观和布局的语言,可对HTML元素进行样式设置,包括颜色、字体、布局等。在管理后台中,CSS能够实现响应式设计,使页面在不同设备上具有良好的显示效果。借助CSS预处理器(如Sass或Less),可以编写更高效、模块化的样式代码,便于维护。 文件结构: guanli.html:可能是管理页面的主入口,包含后台的主要功能和布局。 xitong.html:可能是系统设置或配置页面,用于管理员调整系统参数。 denglu.html:登录页面,通常包含用户名和密码输入框、登录按钮,以及注册或忘记密码的链接。 image文件夹:存放页面使用的图片资源,如图标、背景图等。 css文件夹:包含后台系统的样式文件,如全局样式表style.css或按模块划分的样式文件。 响应式设计:在移动设备普及的背景下,管理后台需要支持多种屏幕尺寸。通过媒体查询(Media Queries)和流式布局(Fluid Grids),可以确保后台在桌面、平板和手机上都能良好展示。
双闭环直流电机调速系统是一种高效且应用广泛的直流调速技术。通过设置转速环和电流环两个闭环,系统能够对电机的转速和电流进行精准控制,从而提升动态响应能力和稳定性,广泛应用于工业自动化领域。 主电路设计:主电路采用三相全控桥整流电路,将交流电转换为可调节的直流电,为电机供电。晶闸管作为核心元件,通过调节控制角α实现输出电压的调节。 元部件设计:包括整流变压器、晶闸管、电抗器等元件的设计与参数计算,这些元件的性能直接影响系统的稳定性和效率。 保护电路:设计过载保护、短路保护等保护电路,确保系统安全运行。 驱动电路:设计触发电路和脉冲变压器,触发电路用于触发晶闸管导通,脉冲变压器用于传递触发信号。 控制器设计:系统核心为转速调节器(ASR)和电流调节器(ACR),分别对转速和电流进行调控。检测电路用于采集实际转速和电流值并反馈给调节器。 仿真分析:利用MATLAB/SIMULINK等工具对系统进行仿真分析,验证其稳定性和性能指标是否达标。 方案确定与框图绘制:明确系统构成及各模块连接方式。 主电路设计:选择整流电路形式,设计整流变压器、晶闸管等元部件并计算参数。 驱动电路设计:设计触发电路和脉冲变压器,确保晶闸管准确触发。 控制器设计: 转速调节器(ASR):根据转速指令调整实际转速。 电流调节器(ACR):根据ASR输出指令调整电流,实现快速响应。 参数计算:计算给定电压、调节器、检测电路、触发电路和稳压电路的参数。 仿真分析:通过软件模拟系统运行状态,评估性能。 电气原理图绘制:完成调速控制电路的电气原理图绘制。 双闭环控制策略:转速环在外,电流环在内,形成嵌套结构,提升动态响应能力。 晶闸管控制角调节:通过改变控制角α调节输出电压,实现转速平滑调节。 仿真分析:借助专业软件验证设计的合理性和有效性。 双闭环直流电机调速系统设计涉及主电路、驱动电路和控制器设计等多个环节,通过仿
电池管理系统(Battery Management System,简称BMS)是电动汽车及储能系统的关键部件,主要负责监控、保护、控制和优化电池组性能。本文重点探讨基于Simulink构建的BMS模型。Simulink是Matlab环境下一款强大的数学建模工具,广泛应用于工程仿真与控制设计,其可视化平台让复杂系统如电池BMS的设计和测试更加直观。 电池均衡是BMS的核心功能之一,旨在确保电池组中各单体电池电压和容量一致,避免因个别电池过充或过放影响系统性能。在Simulink模型中,电池均衡可通过电流注入或能量转移实现,涉及电流控制电路和算法的建模,例如电阻分压、电感平衡或开关电容等方法。 SOC计算(State of Charge,即电池荷电状态)也是BMS的重要功能,它是评估电池剩余能量的关键指标。在BMS模型中,SOC估算通常基于电池的电压、电流、温度数据以及特定电池模型,如阶跃响应模型、等效电路模型或基于物理的模型。这些模型能够精准跟踪电池状态,为充电策略和故障检测提供依据。 在相关文件中,“license.txt”可能包含Simulink模型的使用许可信息,这对于模型的商业应用和合规性至关重要。“batteryBalancing”文件可能是电池均衡模块的具体实现,详细描述了Simulink构建的均衡算法,包括均衡触发条件、控制逻辑及电路模型等。 一个完整的BMS Simulink模型还应涵盖电池健康状态(SOH,State of Health)估计、热管理、安全保护(如过压、欠压、过流保护等)以及通信接口(用于与车辆其他系统交互)等功能模块。这些模块需要精心设计和参数校准,以确保BMS在各种工况下保持稳定性和准确性。 在开发BMS模型时,用户可以借助Matlab的Simulink库,如控制库、信号处理库和电力电子库,并结合电池特性的实验数据进行模型搭建和仿真验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值