Spring IoC&DI

Spring 是什么?

Spring是⼀个开源框架, 他让我们的开发更加简单.

Spring 是包含了众多⼯具⽅法的 IoC 容器

什么是IoC?

IoC控制反转

IoC 是Spring的核⼼思想

在类上⾯添加 @RestController 和@Controller 注解, 就是把这个对象交给Spring管理, Spring 框架启动时就会加载该类. 把对象交给Spring管理, 就是IoC思想.

IoC是解耦合的

IoC容器具备以下优点:

资源不由使⽤资源的双⽅管理,⽽由不使⽤资源的第三⽅管理,这可以带来很多好处。第⼀,资源集中管理,实现资源的可配置和易管理。第⼆,降低了使⽤资源双⽅的依赖程度,也就是我们说的耦合度。

  1. 资源集中管理: IoC容器会帮我们管理⼀些资源(对象等), 我们需要使⽤时, 只需要从IoC容器中去取就可以了

  2. 我们在创建实例的时候不需要了解其中的细节, 降低了使⽤资源双⽅的依赖程度, 也就是耦合度.

IoC的五大注解

加五大注解代表着是被Spring管理,相当于Spring内部直接创建了一个对象

@Controller、@Component、@Service、@Configuration、@Repository

如何读bean呢?

Application和BeanFeactory关系及区别?

1、父子关系,Application是字,BeanFeactory是夫,BeanFeactory有的功能,Application都有,除此之外,Application还有环境、资源管理等功能。

2、性能上:

Application是提前加载,浪费空间,性能好

BeanFeactory是懒加载,节约空间,性能比Application低

五大注解能否被混用?

1、功能上,部分可以混用。(Controller是不可以被混用的)

2、规范上,不可以被混用。

程序被Spring管理,需要有:

1、被Spring扫描到(默认扫描的路径是启动类所在目录)

2、需要配置五大注解和@bean使用

也可以使用@ComponentScan(basePackages = "路径")修改扫描路径

@Bean方法

 使用@Bean时,必须要搭配五大注解使用。

@Bean 常用于集成无法修改源码的第三方类库

DI(依赖注入)

IoC 是⼀种思想,也是"⽬标", ⽽思想只是⼀种指导原则,最终还是要有可⾏的落地⽅案,⽽ DI 就属于具体的实现。所以也可以说, DI 是IoC的⼀种实现.

1、属性注入

属性注⼊是使⽤ @Autowired 实现的,将 Service 类注⼊到 Controller 类中.

2、构造方法注入

构造⽅法注⼊是在类的构造⽅法中实现注⼊

注意:

1、只有一个构造函数,不需要加@Autowired

2、如果有多个构造函数,要加@Autowired指定,没有指定就默认使用无参的

构造函数规范

如果添加构造函数,把无参构造函数也添加,使用谁,谁加@Autowired

Setter注入

Setter 注⼊和属性的 Setter ⽅法实现类似,只不过在设置 set ⽅法的时候需要加上 @Autowired 注


三种注入优缺点分析

属性注⼊

优点: 简洁,使⽤⽅便;

缺点:

  1. 只能⽤于 IoC 容器,如果是⾮ IoC 容器不可⽤,并且只有在使⽤的时候才会出现 NPE(空指 针异常)
  2. 不能注⼊⼀个Final修饰的属性、

构造函数注⼊(Spring 4.X推荐)

优点:

  1. 可以注⼊final修饰的属性
  2. 注⼊的对象不会被修改
  3. 依赖对象在使⽤前⼀定会被完全初始化,因为依赖是在类的构造⽅法中执⾏的,⽽构造⽅法 是在类加载阶段就会执⾏的⽅法.
  4. 通⽤性好, 构造⽅法是JDK⽀持的, 所以更换任何框架,他都是适⽤的

缺点:

注⼊多个对象时, 代码会⽐较繁琐

Setter注⼊(Spring 3.X推荐)

优点: ⽅便在类实例之后, 重新对该对象进⾏配置或者注⼊

缺点:

  1. 不能注⼊⼀个Final修饰的属性
  2. 注⼊对象可能会被改变, 因为setter⽅法可能会被多次调⽤, 就有被修改的⻛险

@Autowired和@Resource的区别

1、@Autowired是Spirng提供的

      @Resource是jdk提供的。

2、@Autowired是根据类型注入的。

     @Resource是根据名称注入的。

@Resource相对于@Autowired来说,@Resource支持更多参数设置。

@Autowired存在的问题

@Autowired是根据类型查找,如果只找到一个,就直接注入。

如果没有找到,就报错。

如果找到多个,就根据名称来注入。

Spring、Spring MVC、Spring Boot区别

Spring是:管理对象,对象直接的依赖。

Spring MVC:主要用于Web的开发和网络接口。

Spring Boot:是对Spring的一种封装,用来简化Spring应用开发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值