一,特点1:IOC(控制反转)
1,IOC是什么
反转控制”(Inverse of Control) 不是什么技术,而是一种设计思想,就是将原本在程序中手动创建对象的控制权,交由 Spring 框架来管理
2,IOC的作用
IOC 容器负责对象的实例化、对象的初始化,对象和对象之间依赖关系、
对象的销毁、对外提供对象的查找等操作,对象的整个生命周期都是由容器来
控制
我们需要使用的对象都由 ioc 容器进行管理,不需要我们去手动通过 new
的方式去创建对象,由 ioc 容器直接帮我们组装好,当我们需要使用的时候直
接从 ioc 容器中直接获取就可以了。
正控:
若要使用某个对象,需要
自己去负责对象的创建
反控:
若要使用某个对象,只需要
从 Spring 容器中获取需要使用的对象, 不关心对象的创建过程,也就是把创建对象的控制权反转给了 Spring 框架.
3,IOC在Spring中所运行创建对象等操作的流程
二,特点2:Spring Bean 管理
对于 Spring Bean 管理有两种方式
1,一般的基于 xml 配置方式
bean 配置需要 spring 管理的类
id 生成的对象名
class 全类名
name 对象别名,可以为多个
scope:
singleton(默认值):在 Spring 中只存在一个 bean 实例, 单例模式.
prototype:原型 getBean()的时候都会 new Bean()
request: 每 次 http 请 求 都 会 创 建 一 个 bean, 仅 用 于 WebApplicationContext 环境
2,Xml 配置方式依赖注入【DI:Dependency Injection】
指 Spring 创建对象的过程中,
将对象依赖属性(简单值,集合,对象)通
过配置设置给该对象
。
实现 IOC 需要 DI 做支持
注入的方式:
set 方法注入
构造方法注入
注解方式实现
开启注解扫描
<
context
:component-scan
base-package
="包名"
> </
context
:component-scan
>
注解创建对象
@Component(value=“user”)等同于 <bean id=“user” class=“”></bean>
@Service
@Repository
以上注解都可以实现创建对象功能,只是为了后续扩展功能,在不同的层使用不
同的注解标记
@Scope(value=“prototype”) 原型
@Scope(value=“ singleton ”) 单例
注解方式注入【DI:Dependency Injection】
@Autowired
@Autowired 是 Spring 提供的注解,可以写在字段和 setter 方法上。如果写在
字段上,那么就不需要再写 setter 方法。默认情况下它要求依赖对象必须存在,
如果允许 null 值,可以设置它的 required 属性为 false。
byType 自动注入
该注解默认使用按类型自动装配 Bean 的方式。
byName 自动注入
如果我们想使用按照名称(byName)来装配,可以结合@Qualifier 注解一起
使用。
需要在引用属性上联合使用注解@Autowired 与@Qualifier。@Qualifier 的
value 属性用于指定要匹配的 Bean 的 id 值。
JDK 注解@Resource 自动注入
S
pring 提供了对 jdk 中@Resource 注解的支持。@Resource 注解既可以按名
称匹配 Bean,也可以按类型匹配 Bean。默认按照 ByName 自动注入
byName 注入引用类型属性
@Resource 注解指定其 name 属性,则 name 的值即为按照名称进行匹配
的 Bean 的 id。
注解与 XML 的对比
注解优点:
方便,直观,高效(代码少,没有配置文件的书写那么复杂)。
注解缺点:
以硬编码的方式写入到 Java 代码中,修改是需要重新编译代码的。
xml 优点是:
配置和代码是分离的,在 xml 中做修改,无需编译代码,只需重
启服务器即可将新的配置加载。
xml 的缺点是:
编写麻烦,效率低,大型项目过于复杂