DI注入

来源:互联网 发布:爱奇艺网络剧哪些好看 编辑:程序博客网 时间:2024/04/28 08:29

1、setter注入

按照属性注入

2、构造器注入

<constructor-arg ref="">按照构造方法传参

静态导入代码:<%@ include file="xxx.jsp"%>

动态导入代码:<jsp:include page="xxx.jsp" />

1.静态导入是将被导入页面的代码完全融入,两个页面融合成一个整体Servlet;而动态导入则在Servlet中使用include方法来引入被导入页面的内容。

2.静态导入时被导入页面的编译指令会起作用;而动态导入时被导入页面的编译指令则失去作用,只是插入被导入页面的body内容。

3.动态包含还可以增加额外的参数。


构造方法可以有多个构造器方法,如何

setter 注入和构造器注入如何选择?//手动注入


注入时间不同:构造器注入在前、setter注入比较靠口

执行速度:注入相同的注入:两者差不多

注入不同的

大量构造器参数注入可能使得程序变得笨拙

通常Spring开发团队提倡setter

而且setter方法可以更改参数

构造器直接一次性注入省事

第三方开发-类-----避免重复造轮子---如果给etter方法则用setter

如果不给构造器是唯一选择


eg: list注入

list类型arraylist

linkedlist

vector

如何注入一个集合

直接跟<property name="list">

<list>

<value>2</value>

<value>3</value>

<ref bean="指向地址id"/>

</list>

</property>

/map覆盖auto wire=”byName“自动装配,自动注入(根据属性注入)

byName通过名称自动注入---查看实现方通过法set的名称来注入:----速度快

byTape:通过类型注入:----------找的是set方法参数的类型-------容错率高但是速度慢

constructor:提供一个构造方法,---------根据属性名称。首先根据属性名称装配,如果没找到属性名称根据属相类型装配

autodetect::constructor+byType;在2.0版本存在3.0以后就删掉了原因:浪费内存,后台处理多,功能比较多,性能直线下降,

如果set/构造器均存在先构造后set



当接口有多个实现类的时候怎办

按照类型进行注入----依据类型注入两个实现类报异常

解决方案:放弃Bytype用byName/手动注入/autowire-candidate="false"不参与装配

比如send接e

------------mail

------------message

手动装配与自动装配

手动装配:速度快

自动装配:速度慢,容错率大

生产环境:正式给 用户部署后的环境,趋向于稳定环境----选择手动装配的方式多

开发环境:测试多----多用自动装配

现实中:避免代码的重构

primarry--是否作为优先选择注入

原因:类的继承是单继承,但是实现是多实现

主要优点:

1、提供了对唯一实例的受控访问。

2、由于在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能。

3、允许可变数目的实例。

 

主要缺点:

1、由于单利模式中没有抽象层,因此单例类的扩展有很大的困难。

2、单例类的职责过重,在一定程度上违背了“单一职责原则”。多并发

3、滥用单例将带来一些负面问题,如为了节省资源将数据库连接池对象设计为的单例类,可能会导致共享连接池对象的程序过多而出现连接池溢出;如果实例化的对象长时间不被利用,系统会认为是垃圾而被回收,这将导致对象状态的丢失。

scope:作用域默认singleton

singleton:单例(初始化一次,以后不管访问多少次均为第一次创建好的实例返回),检验类是否为单例模式:isSingleton()返回布尔类型

prototype:原型:(调用一次实例化一次)检测在类的方法中加一个构造方法

request:请求(请求范围:从客户端发出请求到客户端接受响应)

sessions:会话---多个请求sessionid绑定会话对象()

globalsession全局会话(在一定的环境下它就是session但是在集群环境下(负载均衡--分担并发量)就不同了:)




原创粉丝点击