Spring学习总结(2)-自动装配

  上面说过,IOC的注入有两个地方需要提供依赖关系,一是类的定义中,二是在spring的配置中需要去描述。自动装配则把第二个取消了,即我们仅仅需要在类中提供依赖,继而把对象交给容器管理即可完成注入。在实际开发中,描述类之间的依赖关系通常是大篇幅的,如果使用自动装配则省去了很多配置,并且如果对象的依赖发生更新我们可以不需要去更新配置,但是也带来了一定的缺点。

  说白了就是只需要声明bean,至于对象间的相互引用关系由Spring自己搞定。。

  使用方式:no(不启用),byName(根据名称),byType(根据类型),constructor(构造方法)

<beans ....
     default-autowire="byType">

</beans>

  自动装配的优点参考文档:https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-autowire

  缺点参考文档:https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-autowired-exceptions

  byType的装配过程:Spring第一步会把所有的bean都加载到容器中,第二步解析时发现Service里有个dao依赖,就会按照依赖去找类属性是这个Dao或者父类是这个Dao的类属性进行注入。

  如果同一个接口有2个实现类,并且还使用接口注入的话就会报错,这是需要改为byName方式,或者根据实现类注入。

  另外,在bean标签中是可以单独指定装配方式的:

<bean id="ClassOne" class="****" autowired="byType">

annotation注入方式中的自动装配:

  使用注解@Autowired默认是使用的转配方式是byType,如果没有找到还会使用byName,还没有找到要装配的类,报错。

  注解@Resource默认使用byName,根据属性名来确认的,还可以通过type来指定具体的名称,如 @Resource(type = “IndexImpl”)  

spring懒加载

  在Spring配置文件里增加如下语句,表示Spring并不是在在项目启动时全部注入,而是在使用时才会注入,默认false

<beans .....       default-lazy-init="true">
</beans>

SpringBean的作用域

  singleton:单例

  prototype:标准,每次都是新的对象

  request:限定每个Http请求都是新的对象

  session:将单个bean定义的范围限定为HTTP会话的生命周期。仅在可感知web的Spring ApplicationContext上下文中有效。

  applicaiton:将单个bean定义的范围限定为ServletContext的生命周期。仅在可感知web的Spring ApplicationContext上下文中有效。

  websocket:将单个bean定义的范围限定为WebSocket的生命周期。仅在可感知web的Spring ApplicationContext上下文中有效。

原文地址:https://www.cnblogs.com/huanshilang/p/11618673.html

时间: 2024-10-10 22:08:37

Spring学习总结(2)-自动装配的相关文章

Spring4.0学习笔记(2) —— 自动装配

Spring IOC 容器可以自动装配Bean,需要做的是在<bean>的autowire属性里指定自动装配的模式 1)byType 根据类型自动装配,若IOC 容器中有多个目标Bean类型一致的Bean,Spring将无法判定哪个Bean最适合该属性,不能执行自动装配 2)byName 根据名称自动装配,必须将目标Bean名称和属性名设置的完全相同 配置方法: Address.java package com.spring.autowire; public class Address { p

创建spring自定义注解进行自动装配

1.创建自定义注解 1 import org.springframework.beans.factory.annotation.Qualifier; 2 import java.lang.annotation.ElementType; 3 import java.lang.annotation.Retention; 4 import java.lang.annotation.RetentionPolicy; 5 import java.lang.annotation.Target; 6 7 8

8 -- 深入使用Spring -- 7...4 使用自动装配

8.7.4 使用自动装配 在自动装配策略下,Action还是由Spring插件创建,Spring 插件在创建Action实例时,利用Spring的自动装配策略,将对应的业务逻辑组件注入Action实例中.这种整合策略的配置文件简单,但控制器和业务逻辑组件耦合又提升到了代码层次,耦合较高. 如果不指定自动装配,则系统默认使用按byName自动装配.前面的整合策略并没有指定任何自动装配策略. 所谓自动装配,即让Spring自动管理Bean与Bean之间的依赖关系,无须使用ref显示指定依赖Bean.

Spring学习笔记--使用注解装配

使用@Autowired注解 从Spring2.5开始,最有趣的一种装配Spring Bean的方式是使用注解自动装配Bean的属性.Spring默认禁用注解装配,最简单的启用方式是使用Spring的context命名空间配置中的<context:annotation-config>元素,如下所示: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.

在Spring中通过构造自动装配--constructor

在Spring中,可以使用"通过构造自动装配",实际上是按构造函数的参数类型自动装配. 这意味着,如果一个bean的数据类型与其他bean的构造器参数的数据类型是相同的,那么将自动装配. package auto_constructor; /** * Created by luozhitao on 2017/8/9. */ public class student { public String getName() { return name; } public void setNam

Spring @Autowired注解与自动装配

1   配置文件的方法 一般编写spring 框架的代码时候.一直遵循是这样一个规则:所有在spring中注入的bean 都建议定义成私有的域变量.并且要配套写上 get 和 set方法. Boss 拥有 Office 和 Car 类型的两个属性 1 public class Boss { 2 private Car car; 3 private Office office; 4 5 // 省略 get/setter 没写 6 7 @Override 8 public String toStri

【Spring实战】—— 8 自动装配

本篇介绍一下自动装配的知识,Spring为了简化配置文件的编写.采用自动装配方式,自动的装载需要的bean. 自动装配 有以下几种方式: 1 byName 通过id的名字与属性的名字进行判断,要保证Bean实例中属性名字与该装配的id名字相同. 2 byType 通过类型确定装配的bean,但是当存在多个类型符合的bean时,会报错. 3 contructor 在构造注入时,使用该装配方式,效果如同byType. 4 autodetect 自动装配,这个测试了,3.0.5版本不可用了,不知道是不

Spring学习笔记(三)之装配Bean

除了组件扫描与自动装配之外还有基于Java代码的装配与基于XML的装配. 有一些场景是我们不能用自动装配的,比如我们要给第三方库中的组件装配到我们的应用中,这时自动装配无效,因为自动装配只能扫描本应用中的包. 这时我们就要在基于代码代码的装配和基于XML的装配中进行选择,前面我们说到了JavaConfig相比XML更强大更安全. 一.基于Java代码的装配Bean(JavaConfig) 但是JavaConfig又与Java有所区别. 概念上  JavaConfig是配置 与应用的其他代码业务逻

Spring基于的注解自动装配和依赖注入(***)

#自动装配的小Demo: package com.gyf.annotation; public interface UserDao { public void save(); } package com.gyf.annotation; import org.springframework.stereotype.Repository; @Repository("userDao") public class UserDaoImpl implements UserDao { @Overrid