关于Spring框架注解及解耦的问题

我想问一下,本来使用spring框架的IOC是准备来降低耦合度,实现java代码被编译成class文件后想要修改调整代码活更新代码可以通过spring框架的xml配置文件来修改bean标签id实现代码的修改,但如果使用注解方式,所有创建对象及引用加载对象放在了java代码中还如何实现spring框架方便修改的功能,使用了注解之后解耦体现在了什么地方?虽然使用注解让java代码中没有明确的指明包含关系,而是通过spring来管理创建对象并进行分配的,可是修改不了,成为了死代码,那意义在哪里?

1个回答

1.编译之后生成的class文件,是在硬盘的,此时还没有加载到内存。而spring做的是当程序启动时把需要的对象给放到spring容器中。getBean()的时候
根据名字(beanName)获取。就是配置文件中的id。使用注解默认是类名的首字母小写,当然可以在使用注解时更改@Service(“xxxx”)就可以更改了。
2.配置文件有的功能,都有相应的注解与其对应。
3.IOC包含两个内容。就是如何实例化bean。一个是xml方式,一个是注解方式。拿j2ee来说。
4.从xml形式或者注解形式。一般需要三个步骤。第一步把相应的描述转化成一个beanDefinition。第二步反射进行实例化。第三步给属性赋值。
5.可以实现spring的不同接口在4点的时候执行我们让spring执行的逻辑。具体看一下spring的生命周期。

wu546547
wu546547 回复zwdzdy: 是的,我也有这种疑惑,修改注解也还是算修改了代码,不知道哪里算省事了?
2 个月之前 回复
zwdzdy
zwdzdy 回复lppzyt: 你说的后面我理解,就是前面修改的时候我的意思是比如我出去做个项目,那我给的文件肯定是字节码.class文件啊,这样的话客户如果要改东西没法在class文件中进行更改和删除注释的意思,如果要是在xml文件的话,即使是交class文件给客户,客户想要进行更改只需要自己重新写一个类编译成class文件然后该xml文件就可以更改引用,我是这个意思,那这样的话注解虽然方便了代码的编写,但不是相当于失去了最大的优势吗?
8 个月之前 回复
lppzyt
lppzyt 没有spring的时候比如我们想在bean赋值完属性之后,执行一段代码,之前是没法做的,现在实现spring的特定接口就行了
8 个月之前 回复
lppzyt
lppzyt 回复zwdzdy: 一样的啊,你把相应的注解去掉就ok了,一个是改配置文件,一个是去除注解。无论哪种都需要重启服务。解耦的本身是说原本需要在自建的类中去new对象的,现在交给了spring。就是你说的第三方转一次手。但是好处在启动程序的时候一定程度能判断对错,配置错误的话启动时spring会报错。第二个好处是不需要处处修改。比如有五个类用到了Cuscom类现在要改类名需要五处更改,使用spring则改一处(配置文件或者注解)。第三个若是单例的则只创建一次。
8 个月之前 回复
zwdzdy
zwdzdy 我明白在xml文件中配置根据id进行更改对于程序的好处,我就是不明白原本在xml文件写id,如果程序想要更新可以直接添加class文件,将路径更改就会抛弃旧的方法使用心得方法来完成不更改代码用配置文件更新的操作,但是用了注解,所有的注解引用不论是根据type还是根据注解自定义的id都是在java中写死的,那么还怎么做更新操作?如果不能完成不改代码,只修改外部文件进行更新,那这种解耦的意义在哪儿?感觉就像只是用第三方转了一次手
8 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于使用消息系统解耦系统集成的问题

[img]http://dl.iteye.com/topics/download/23950cd8-c6a7-3d94-9583-6481738b92d8[/img] 假使现在系统结构如图: 1. Main App 发条TOPIC消息给各个应用系统; 2. 收到后开始处理具体的业务,并将结果通过短信回复的方式返给main app; 3. main app等待所有信息都返回成功结果,开始提交事务; 现在主要的问题: 1. 事务在什么时候提交? 是每个app自身处理业务的时候就提交,还是等main app再发消息去提交? 2. 假使App1成功,App2,app3都失败了怎么处理? 2. 假使app1, app2, app3都成功了,main app发送事务提交,然后有失败怎么处理? 是通过JTA的方式去处理吗。。? 这样的速度能忍受么? 求指点, 有相关资料最好! 谢谢!

常用的javaWeb持久层框架有哪些

除了:hibernate,ibatis,jdo,ejb entiy bean [zai xian deng ha]

Java框架关于分层的构造我一直好蒙,求助

目前我所知道的信息中Hibernate和Mybatis是持久层框架 然后我想问的是 1.Spring有人说只是为了解耦以及提供一系列辅助功能(说业务层是按照自己的需求写的,和Spring没关系),但是又有人说它是业务层框架的说法,我有些懵逼,求大神解释。所以我想问它到底是不是业务层框架? 2.Spring MVC和Struts2 是表示层框架吗?有说法说Spring MVC是三层架构,不仅仅是表示层,还可以是模型层和控制层,作用很大,而Struts仅仅是表示层,这里我更懵逼了。 3.如果2中的框架真的是表示层框架的吗,那么JSP就是啥,我一直以为它是代表表示层的。求解各路大神

在spring中如何实现工作流

想问下,在spring中不通过整合其他工作流引擎(如jbpm等)是否能够实现工作流,如果能够实现的话,具体的配置是怎么样的?希望能够有具体的示例,谢谢!

java 代码解耦 注册机制

我想写一个服务,这个服务接受信息,如果有另外的服务想得到我的信息,只需要向我注册一下,给我一个接口,我就把服务转发给他,我接受信息的服务不用做任何改变,这样的东西应该用什么技术实现?

有关.net 三层架构如何解耦,或者转MVC是否合适?

之前写的三层架构的程序,主要用于公司内部各种表单的申请,然后各层级签核,还有员工四季考核功能,车辆保管功能等等,用的版本是VS2010 sql2000,因为写的比较早,在使用过程中又一直根据需求经常更改,程序里比较乱,数据库存储过程也比较乱,有很多复杂的业务逻辑,现想改写成MVC结构的,不知是否合适?或者在三层架构的基础上修改的更加解耦,请高手们给写意见,谢谢!

来谈谈你们结合ssm或者是ssh框架后对mvc层次的理解。。。。。看图

![图片说明](https://img-ask.csdn.net/upload/201709/21/1505961295_940945.png) 我有点不明白。为什么spring容器是指向servlet和dao层呢?spring不是容器吗?为什么会指向他们俩个而不是其他呢?

MVVM中FlowDocument的使用和解耦相关问题

背景:我们开发了一个在线聊天程序,在做聊天历史纪录的呈现的时候我们用到了FlowDocument。 关于数据:MessageModel 聊天消息实体 MessageModelList 聊天消息实体集合 现阶段解决方案:我们为MessageModelList定义了一个监听事件,如果MessageModelList发生变化(Add,Remove),就执行这个事件---为MessageModelList中新增的MessageModel new一个Paragraph来接收这个MessageModel,然后把这个Paragraph加到Document中。但是这种办法不能实现View与ViewModel之间的解耦。 我想到的解决方法:用ListBox,把MessageModelList binding到ItemSource中,但我们历史消息框只是为了呈现消息而已,不需要ListBox那么多功能,感觉用ListBox有点大材小用了。而且ListBox的机制应该是(我目前理解)当 MessageModelList发生变化时ListBox会重新生成一次ListBoxItem,这样是否会耗费资源? 我的问题: 1. 使用ListBox是否合适?能不能把我不需要的ListBox的功能屏蔽掉,能不能把我新增的MessageModelList中的MessageModel生成一个新的ListBoxItem直接加到Document中,而不是重新生成一次ListBoxItem?(如果我对ListBox没有理解错误的话。) 2. 如果我继续使用FlowDocument是否能实现直接一个Source来banding MessageModelList,而不需要我在ViewModel里面去New Paragraph? 3. 有没有更好的解决方案或其他控件符合我所需要的特性。

Spring

求关于这句话的解释~~ 《精通Spring2.x》第八章中的一句话:Spring面向DAO制定了一个通用的异常体系,屏蔽具体持久化技术的异常,是业务层和具体的持久化技术达到解耦。 本人不知道这里怎么就实现解耦了。。。 谢谢!

通过Go中的接口解耦…接口实现器的一部分?

<div class="post-text" itemprop="text"> <p>OK. I know this is a FAQ, and I think the answer is "give up, it doesn't work that way", but I just want to make sure I'm not missing something.</p> <p>I am still wrapping my head around best practices and rules for use of interfaces. I have code in different packages that I'd prefer to keep decoupled, something like so (doesn't work, or I wouldn't be here):</p> <pre><code>package A type Foo struct {} func (f *Foo) Bars() ([]*Foo, error) { foos := make([]*Foo, 0) // some loop which appends a bunch of related *Foo to foos return foos, nil } </code></pre> <hr> <pre><code>package B type Foolike interface { Bars() []Foolike } func DoSomething(f Foolike) error { // blah } </code></pre> <p>With this, the compiler complains:</p> <pre><code>cannot use f (type *A.Foo) as type Foolike in argument to B.DoSomething: *A.Foo does not implement Foolike (wrong type for Bars method) have Bars() ([]*A.Foo, error) want Bars() ([]Foolike, error) </code></pre> <p>Now, I grok that []Foolike is <em>not an interface signature</em> itself; it's the signature for a slice of Foolike interfaces. I think I also grok that the compiler treats []*A.Foo and []Foolike as different things because ... (<em>mumble</em> memory allocation, strict typing <em>mumble</em>).</p> <p>My question is: Is there a correct way to do what I ultimately want, which is to let B.DoSomething() accept an *A.Foo without having to import A and use *A.Foo in B.DoSomething()'s function signature (or worse, in the interface definition)? I'm not hung up on trying to trick the compiler or get into crazy runtime tricks. I understand that I could probably change the implementation of Foo.Bars() to return []Foolike, but that seems stupid and wrong (Why should A have to know anything about B? That breaks the whole point of decoupling things!).</p> <p><strike>I guess another option is to remove Bars() as a requirement for implementing the interface and rely on other methods to enforce the requirement. That feels less than ideal, though (what if Bars() is the only exported method?).</strike> Edit: No, that won't work because then I can't use Bars() in DoSomething(), because it's not defined in the interface. Sigh.</p> <p>If I'm just Doing It Wrong™, I'll accept that and figure something else out, but I hope I'm just not getting some aspect of how it's supposed to work.</p> </div>

如何将复杂的业务逻辑放在一个Service层方法中?

按照 Spring 事务管理的要求,事务都是加在 Service 层上,Controller 层只调用一个 Service 方法处理业务。 现在我比较疑惑的是,比如我某个业务,需要在 用户、组织机构、商品 等不同的 Service 方法上分别进行处理,这种该如何放在同一个 Service 方法中? 如果我在同一个 Service 类中注入这多个模块的 Service ,岂不是又增加了代码的耦合度?感觉很矛盾。

数据库设计范式问题..

当你把一个数据库范式从 1nf 提升到 3nf . 我看来就是一个解耦与重用的过程.. 但是当你提升你的范式的时候. 难免会拆分表. 然后在你使用表的时候. 肯定就会有级联添加 删除问题. 这不是给数据库增加负担么. 同一时间. 本来我们只需要操作一个表. 但是增加范式后.我们就操作了 三四个表. 在大面积的并发下性能损失不是很明显么. 请问是不是这么个情况.. 顺便问一下. 当安装好数据库的时候.为什么要有那么多内置系统数据库...为什么不隐藏掉. 或者说他们放到那里有他们的道理在.

Activiti任务监听器调用SSM DAO层

我用jeesite平台想开发一个学生提交作业给老师的工作流,工作流中通过任务监听器动态设置任务执行人(老师)框架是spring +spring mvc+ mybatis + mysql 任务监听器通过实现TaskListener接口的类并通过可视化工具中在老师TASK节点设置了create时调用该类 监听器的代码如下 ``` @Component @Service public class Teacherlisten extends CrudService<StudentToTeacherDao, StudentToT eacher> implements TaskListener{ private String userId; private StudentToTeacher st; private String assignee; private static final long serialVersionUID = 1L; @Override public void notify(DelegateTask delegateTask){ userId = delegateTask.getVariable("apply").toString(); st=dao.findteacher(userId); assignee=st.getTeacher(); delegateTask.setAssignee(assignee); } } ``` 下面为CrudService自动装配DAO的代码 ``` @Transactional(readOnly = true) public abstract class CrudService<D extends CrudDao<T>, T extends DataEntity<T>> extends BaseService { /** * 持久层对象 */ @Autowired protected D dao; ``` 我的设想是通过调用DAO方法访问数据库查询学生对应的老师,然后将执行人设置为该老师,但是遇到的问题是自动装配DAO时 值为NULL,原因可能是监听器与Spring 加载时出问题,已经尝试过很多方法,最后使用JDBC实现的,但是mybatis的框架在这里没用上,希望大神能帮小弟一下,指点一下如何在监听器中能够将Spring与mybatis整合的DAO层引进来。

PHP模板模式UI和内容解耦

<div class="post-text" itemprop="text"> <p>With respect,</p> <p>I am looking for a way to organize my HTML markup within PHP for use in a website which delivers dominantly static content(read: for a .edu website). (While this is the main thrust for this question, I am definitely interested in the non-static case as well since I may at some point soon "need" to deal with sessions and user login events etc)</p> <p>The pattern I have often seen used for PHP (and other languages like Coldfusion, .NET, etc) is as follows:</p> <pre><code>// define header stub in header.php &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;body&gt; &lt;div id="headerWrapper"&gt; &lt;!-- header content goes here --&gt; &lt;/div&gt; &lt;div id="contentWrapper"&gt; // end header stub // define footer stub in footer.php &lt;/div&gt;&lt;!-- end contentWrapper --&gt; &lt;div id="footer"&gt; &lt;!-- footer content goes here --&gt; &lt;/div&gt; &lt;/body&gt; &lt;/html&gt; // end footer stub </code></pre> <p>To use this pattern, I would define a content file thusly:</p> <pre><code>// define content stub in contentFile.php &lt;?php include("header.php") ?&gt; &lt;p&gt;hello world&lt;/p&gt; &lt;!-- other content goes here --&gt; &lt;?php include("footer.php") ?&gt; // end content stub </code></pre> <p>I am looking for more. The problem I have with the above example is the level of coupling required by the general pattern. That is, there are some significant dependencies between header.php and footer.php for example (namely page structure, the dangling contentWrapper div tags, and, on a lower level, the inevitable css and js includes that are not required by every page). I am looking specifically for encapsulation. My ideal content page would look like this:</p> <pre><code> // ideal.php &lt;?php $someObj.pageTitle="My First Page!!!"; $someObj.headInclude("/css/960.css"); $someObj.headInclude("/js/myFancyThing.js"); $someObj.preferedTemplate = "default"; /* or maybe "MathDept" or something like that */ ?&gt; &lt;!-- page content goes here, just semantic and structural markup, let the template handle H1 and Paragraph formatting :) --&gt; // end ideal stub </code></pre> <p>This last pattern is something I would very much like to see. It seems to me a much more elegant solution for the decoupling of content from presentation. I don't know how to articulate this in PHP but I suspect it is feasible. Any help would be most appreciated! Thank you!!! :)</p> <p>/* I hope what I have asked is appropriately scoped and titled. Please forgive me otherwise; I am still a bit green with Stack Exchange, PHP and pretty much everything lol */</p> </div>

如何理解正确理解MVC框架

查了很多mvc的博客,感觉自己是懂了,可是当我自己去写得时候才发现。 我的mvc和大家写的好不一样,比如在贪吃蛇的游戏中别人写View层: ![图片说明](https://img-ask.csdn.net/upload/201611/16/1479281237_44810.png) 大家发现没View层居然有Snake的model。对于MVC不是View和model层的分离解耦吗? 感觉很怪了。mvc的核心就是view和model的分离,为何那么多是这样写的例子,真心不懂了……

java mvc模式的service的设计

# 个人理解 在MVC模式中为了解耦派生出了controller,service,dao层 1. 在我看来controller是处理权限相关的事情 1. service层是处理业务逻辑以及最重要的事务控制多表插入回滚 1. dao层则是只做操作数据库部分 # 产生问题 那么我的两个不同的service如果都要对一个表进行插入操作, 而这个插入又会有多个表的插入复杂的业务,那么这一部分业务应该是放在service(把它称作serviceC)的, 那么问题就是我的serviceA对自己的表进行插入的时候同时要插入C表(和其派生表), 那么我的serviceA是不是应该把serviceC注入进来,还是说思路不对有什么其他方式实现,总不可能同样的逻辑再写一套吧,最主要还是事物的控制。

struct2与servlet的耦合问题

为什么说struts2的ActionContext与Servlet api松耦合?通过几个静态函数不也是间接的访问了servlet中的几个常用的对象了吗?

有关于消息队列的问题?

最近在学习rabbitmq,网上举例说可以把订单系统和库存系统解耦出来. 但是按照我的理解,订单系统这边可以随便下单不用管库存多少,一股脑扔进消息队列,之后再让库存系统去订阅. 那么问题就是如果考虑库存数量的话那还怎么解耦??

有没有办法在与前端相同的域上运行无头/解耦CMS?

<div class="post-text" itemprop="text"> <p>I am working on a decoupled CMS app, and I wondered if the front-end and back-end have to be on separate domains?</p> <p>If not, how would you get them on the same domain?</p> <p>Right now, I'm using WordPress/PHP as my CMS and React for the front-end - so I presume few (if any) hosting services could handle both PHP and React.</p> <p>But what if I were to use a React front-end with a CMS written in Node/JavaScript?</p> </div>

程序员的兼职技能课

程序员的兼职技能课

为linux系统设计一个简单的二级文件系统

实验目的: 通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现。 实验要求: 为linux系统设计一个简单的二级文件系统。要求做到以下几点: (1)可以实现下列几条命令(至少4条)

CCNA+HCNA+wireshark抓包综合网工技能提升套餐

本套餐包含思科路由交换CCNA,部分CCNP核心,华为HCNA以及wireshark抓包等类容,旨在培养具有综合能力的网络工程师。

董付国老师Python全栈学习优惠套餐

购买套餐的朋友可以关注微信公众号“Python小屋”,上传付款截图,然后领取董老师任意图书1本。

成年人用得到的6款资源网站!各个都是宝藏,绝对让你大饱眼福!

不管是学习还是工作,我们都需要一些资源帮助我们有效地解决实际问题。 很多人找资源只知道上百度,但是你们知道吗,有的资源是百度也搜索不出来的,那么今天小编就给大家介绍几款好用的资源网站,大家赶紧收入囊中吧! 1.网盘007 https://wangpan007.com/ 一款全能的资源搜索网站!只需要输入关键字,就能获得你想要的视频、音乐、压缩包等各种资源,网上...

矿车轴载荷计算方法的比较及选用

针对矿车轴的弯曲损坏,分析了固定式矿车车轴的受力,并对力叠加法以及当量负荷法2种计算方法进行了分析和比较,认为应采用当量负荷法进行车轴的设计计算。

Python数据清洗实战入门

Python数据清洗实战入门

C/C++跨平台研发从基础到高阶实战系列套餐

一 专题从基础的C语言核心到c++ 和stl完成基础强化; 二 再到数据结构,设计模式完成专业计算机技能强化; 三 通过跨平台网络编程,linux编程,qt界面编程,mfc编程,windows编程,c++与lua联合编程来完成应用强化 四 最后通过基于ffmpeg的音视频播放器,直播推流,屏幕录像,

Polar编码matlab程序

matlab实现的Polar codes源程序

2019全国大学生数学建模竞赛C题原版优秀论文

2019全国大学生数学建模竞赛C题原版优秀论文,PDF原版论文,不是图片合成的,是可编辑的文字版。共三篇。 C044.pdf C137.pdf C308.pdf

Linux常用命令大全(非常全!!!)

Linux常用命令大全(非常全!!!) 最近都在和Linux打交道,感觉还不错。我觉得Linux相比windows比较麻烦的就是很多东西都要用命令来控制,当然,这也是很多人喜欢linux的原因,比较短小但却功能强大。我将我了解到的命令列举一下,仅供大家参考: 系统信息 arch 显示机器的处理器架构 uname -m 显示机器的处理器架构 uname -r 显示正在使用的内核版本 d...

Linux下聊天室实现(基于C)

在linux下的基于TCP/IP,采用socket通信的聊天室,实现进入聊天室,进行多人群聊,指定人进行私聊,群主管理员功能,颗进行禁言,提出群聊等操作。个人账号可修改昵称或者修改密码,还可进行找回密

一个较完整的Qt用户登录界面设计

一个较完整的Qt用户登录界面,稍微移植可用,用sqlite数据库存储用户名和密码,具有增加和删除用户的功能,开发环境为ubuntu16.04+Qt5.6.1,win7下程序也编译可用。贡献出来,共同学

机器学习初学者必会的案例精讲

机器学习初学者必会的案例精讲

【C语言】贪吃蛇游戏代码(Visual C++6.0实现)

本游戏代码参考《C语言项目开发全程实录(第二版)》第六章。代码已在Visual C++6.0环境下编译测试通过,可在VC++6.0编译器中导入工程编译运行查看效果,或者也可以直接运行Release或D

Android小项目——新闻APP(源码)

Android小项目——新闻APP(源码),一个很简单的可以练手的Android Demo Ps:下载之前可以先看一下这篇文章——https://blog.csdn.net/qq_34149526/a

网络工程师小白入门--【思科CCNA、华为HCNA等网络工程师认证】

网络工程师小白入门--【思科CCNA、华为HCNA等网络工程师认证】

Android音视频开发全套

Android平台音视频开发全套,涉及:FFmpeg软解码解码、Mediacodec硬解码编码、Openssl音频播放、OpenGL ES视频渲染、RTMP推流等核心重要知识点。

YOLOv3目标检测实战:训练自己的数据集

YOLOv3目标检测实战:训练自己的数据集

2019 Python开发者日-培训

2019 Python开发者日-培训

2019 AI开发者大会

2019 AI开发者大会

Windows版YOLOv4目标检测实战:训练自己的数据集

Windows版YOLOv4目标检测实战:训练自己的数据集

4小时玩转微信小程序——基础入门与微信支付实战

4小时玩转微信小程序——基础入门与微信支付实战

因为看了这些书,我大二就拿了华为Offer

四年了,四年,你知道大学这四年我怎么过的么?

Python可以这样学(第四季:数据分析与科学计算可视化)

Python可以这样学(第四季:数据分析与科学计算可视化)

我说我不会算法,阿里把我挂了。

不说了,字节跳动也反手把我挂了。

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

YOLOv3目标检测实战系列课程

《YOLOv3目标检测实战系列课程》旨在帮助大家掌握YOLOv3目标检测的训练、原理、源码与网络模型改进方法。 本课程的YOLOv3使用原作darknet(c语言编写),在Ubuntu系统上做项目演示。 本系列课程包括三门课: (1)《YOLOv3目标检测实战:训练自己的数据集》 包括:安装darknet、给自己的数据集打标签、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算和画出PR曲线)和先验框聚类。 (2)《YOLOv3目标检测:原理与源码解析》讲解YOLOv1、YOLOv2、YOLOv3的原理、程序流程并解析各层的源码。 (3)《YOLOv3目标检测:网络模型改进方法》讲解YOLOv3的改进方法,包括改进1:不显示指定类别目标的方法 (增加功能) ;改进2:合并BN层到卷积层 (加快推理速度) ; 改进3:使用GIoU指标和损失函数 (提高检测精度) ;改进4:tiny YOLOv3 (简化网络模型)并介绍 AlexeyAB/darknet项目。

DirectX修复工具V4.0增强版

DirectX修复工具(DirectX Repair)是一款系统级工具软件,简便易用。本程序为绿色版,无需安装,可直接运行。 本程序的主要功能是检测当前系统的DirectX状态,如果发现异常则进行修复

C++语言基础视频教程

C++语言基础视频教程

相关热词 c#跨线程停止timer c#批量写入sql数据库 c# 自动安装浏览器 c#语言基础考试题 c# 偏移量打印是什么 c# 绘制曲线图 c#框体中的退出函数 c# 按钮透明背景 c# idl 混编出错 c#在位置0处没有任何行
立即提问