依赖注入的三种方式优缺点(依赖注入的三种方式优缺点分析)

Spring 依赖注入的三种方式和集合注入

大家好,如果您还对依赖注入的三种方式优缺点不太了解,没有关系,今天就由本站为大家分享依赖注入的三种方式优缺点的知识,包括为什么不建议属性注入的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

本文目录

  1. 数据库预编译为什么能防止SQL注入
  2. 妄想山海服练属性等级越高越好吗
  3. 依赖注入的三种方式优缺点
  4. net依赖注入的优点

数据库预编译为什么能防止SQL注入

要回答这个问题,我们要知道怎么进行的SQL注入,所谓知己知彼,方能百战百胜。

什么是SQL注入??

所谓SQL注入,就是通过把SQL命令插入到Web表单提交或页面请求url的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。

实战举例

有个登陆框如下:

可以看到除了账号密码之外,还有一个公司名的输入框,根据输入框的形式不难推出SQL的写法如下:

SELECT*Fromtable_nameWHEREname='XX'andpassword='YY'andcorporate='ZZ'

怎么做呢,?

因为没有校验,因此,我们账号密码,都不填写,直接在最后,添加or1=1--

看看与上面SQL组合,成了如下:

SELECT*Fromtable_nameWHEREname=''andpassword=''andcorporate=''or1=1-'

从代码可以看出,前一半单引号被闭合,后一半单引号被“--”给注释掉,中间多了一个永远成立的条件“1=1”,这就造成任何字符都能成功登录的结果。

重要提醒

不要以为在输入框做个检查就够了,不要忘记了,我们web提交表单,是可以模拟url直接访问过去,绕开前段检查。因此,必须是后端,或是数据来检查才能有效防止。

(1)检查用户输入的合法性;

(2)将用户的登录名、密码等数据加密保存。

(3)预处理SQL。

(4)使用存储过程实现查询,虽然不推荐,但也是一个方法。

MySQL预处理是怎么防止的呢?

其实是因为SQL语句在程序运行前已经进行了预编译,在程序运行时第一次操作数据库之前,SQL语句已经被数据库分析,编译和优化,对应的执行计划也会缓存下来并允许数据库已参数化的形式进行查询,当运行时动态地把参数传给PreprareStatement时,即使参数里有敏感字符如or'1=1'也数据库会作为一个参数一个字段的属性值来处理而不会作为一个SQL指令,如此,就起到了SQL注入的作用了!

具体像这样。例如刚刚那条SQL:

SELECT*Fromtable_nameWHEREname=''andpassword=''andcorporate=''or1=1-'

开启预编译执行SQL的时候,则不会这么处理。会当成一个属性值。什么意思。随便你怎么加,都是一个值。也就是说,如果中间有产生歧义的,都将被处理掉,最后执行相当于是这样:

SELECT*Fromtable_nameWHEREname=''andpassword=''andcorporate="'or1=1--"

这个大家应该看的懂吧,输入的一串,都被揉在一起,作一个参数,而不是SQL。

这样就无法进行SQL注入了。是不是很巧妙。

好了,回答完毕,你学到了吗?

老铁,码字不容易哈,高抬贵手,点赞+关注。

妄想山海服练属性等级越高越好吗

灵蕴是给自身属性提供加成的宝石,会给个人实力带来不小的加成。

可以在灵蕴背包中点击注入放置灵蕴,也可以直接在灵蕴页面中注入。

灵蕴等级越高属性加成越好,个人实力评分加成越高。

注意事项

灵蕴有三个模块,分别是黄框区,蓝框区,红框区。

依赖注入的三种方式优缺点

1.构造方法注入:

优点:

?在构造方法中体现出对其他类的依赖,一眼就能看出这个类需要其他那些类才能工作。

脱离了IOC框架,这个类仍然可以工作,POJO的概念。

一旦对象初始化成功了,这个对象的状态肯定是正确的。

缺点:

·构造函数会有很多参数(Badsmell)。?有些类是需要默认构造函数的,比如MVC框架的Controller类,一旦使用构造函数注入,就无法使用默认构造函数。

?这个类里面的有些方法并不需要用到这些依赖(Badsmell)。

2.Set方法注入:

优点:

·在对象的整个生命周期内,可以随时动态的改变依赖。

·非常灵活。

缺点:

·对象在创建后,被设置依赖对象之前这段时间状态是不对的。

·不直观,无法清晰地表示哪些属性是必须的。

3.方法参数注入

优点:

比较灵活。

缺点:

新加入依赖时会破坏原有的方法签名,如果这个方法已经被其他很多模块用到就很麻烦。

与构造方法注入一样,会有很多参数。

net依赖注入的优点

1.不需要特殊的接口,绝大多数对象可以做到完全不必依赖容器。

2.依赖注入有利于促进松耦合,提升可测试性和维护性。此外,依赖注入容许更改实现,而无需更改利用这些实现的类或接口。

如果你还想了解更多这方面的信息,记得收藏关注本站。

Spring 依赖注入的三种方式和集合注入

声明:本文内容来自互联网不代表本站观点,转载请注明出处:https://bk.oku6.com/12/100264.html

相关推荐