spring学习(1)

目录

一、是什么

二、IOC思想

 2.1 IOC创建对象的方式

三、Spring的配置 

 3.1 别名

3.2 Bean的配置

3.3 import

四、DI依赖注入 

4.1 构造器注入

4.2 Set方式注入【重点】

4.3 拓展方式注入 

 五、Bean的自动装配

5.1 byName自动装配

5.2 byType自动装配

5.3 注解实现自动配置

5.3.1 @Autowired

5.3.2 @Resource

5.3.3 @Resource和@Autowired的区别

5.3.4 @Qualifier

5.3.5 @Nullable


一、是什么

Spring是一个轻量级的控制翻转(IOC)面向切面编程(AOP)的框架。

  • 是一个开源的免费的框架(容器)
  • 是一个轻量级的、非入侵式的框架
  • 控制反转(IOC)、面向切面编程(AOP)!
  • 支持事务的处理,对框架整合的支持

二、IOC思想

控制反转是一种设计思想,通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IOC容器,起实现方法是依赖注入(DI)

对象由Spring创建,对象的属性由Spring容器设置。我们彻底不用在程序中去改动了,要实现不同的操作,只需要在xml配置文件中进行修改。

所谓的IOC,一句话搞定:对象由Spring来创建、管理、装配! 

 2.1 IOC创建对象的方式

1、使用【无参】构造创建对象,默认!

2、使用【有参】构造创建对象

①下标赋值

 

②通过类型创建(不建议使用!)

③通过参数名来设置

 

总结:在配置文件加载的时候,容器中管理的对象就已经初始化了!

三、Spring的配置 

 3.1 别名

添加了别名,我们也可以通过别名获取到这个对象

3.2 Bean的配置

1、id:bean的唯一标识符,也就是相当于我们学的对象名

2、class:bean对象所对应的全限定名(包名+类名)

3、name:也是别名,而且name可以同时取多个别名

 

4、scope:bean的作用域

① 单例模式(Spring默认机制)

② 原型模式:每次从容器中get的时候,都会产生一个新的对象

③ 其余的request、session、application这些只能在web开发中使用到!

5、autowired:自动装配

自动装配是Spring满足bean依赖的一种方式!

Spring会在上下文中自动寻找,并自动给bean装配属性

(详见下文)

3.3 import

 一般用于团队开发使用,它可以将多个配置文件,导入合并为一个

四、DI依赖注入 

  • 依赖:bean对象的创建依赖容器
  • 注入:bean对象中的所有属性,由容器来注入

4.1 构造器注入

(上文提及) 

4.2 Set方式注入【重点】

 

4.3 拓展方式注入 

可以使用p命名空间和c命名空间进行注入

P命名空间注入,可以直接注入属性的值:property

C命名空间注入,通过构造器注入:construct-args

注意点:p命名空间和c命名空间不能直接使用,需要导入xml约束! 

 五、Bean的自动装配

在Spring中有三种装配方式:

  • 在xml中显式配置
  • 在java中显式配置
  • 隐式地自动装配bean【重要】

5.1 byName自动装配

 byName:会自动在容器上下文中寻找,和自己对象set方法后面的值对应的bean id!

 

5.2 byType自动装配

byType:会自动在容器上下文中查找,和自己对象属性类型相同的bean!(id甚至都可以省略!)

 

小结:

1、在byName时,需要保证所有bean的id唯一,并且这个bean需要和自动注入的属性的set方法的值一致

2、在byType时,需要保证所有bean的class唯一,并且这个bean需要和自动注入的属性类型一致

5.3 注解实现自动配置

使用注解前:

1、xml文件中导入context约束

2、xml文件中配置注解的支持

5.3.1 @Autowired

通过类型、名字自动装配

 直接在属性上使用,也可以在set方法上使用!

使用@Autowired我们可以不用编写Set方法了,前提是你这个自动装配的属性在IOC(Spring)容器中存在,且名字符合!

5.3.2 @Resource

通过名字、类型自动装配

5.3.3 @Resource和@Autowired的区别

  • 都是用来自动装配的,都可以放在属性字段上
  • @Autowired通过byType的方式实现,而且必须要求这个对象存在!不然报空指针
  • @Resource默认通过byName的方式实现,如果找不到名字,则通过byType实现!如果两个都找不到的情况下,就报错!

执行顺序不同:@Autowired通过byType的方式实现

                         @Resource通过byName的方式实现

 

5.3.4 @Qualifier

如果@Autowired不能唯一自动装配上属性,需通过该注释确定

配合@Autowired使用,指定一个唯一的bean对象注入! 

5.3.5 @Nullable

字段标记了这个注解,说明这个字段可以为null

相同作用:@Autowired(required = false)如果显式定义了Autowired的required属性为false,说明这个对象可以为null,否则不允许为空

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值