一.表现机制

当某个变量需要被赋值时,可以使用特定的语法,让Spring尝试从容器中找到合适的值,并自动完成赋值

最典型的表现就是添加@Autowired注解,Spring就会尝试从容器中找到合适的值为这个属性赋值

二.属性装配示例代码

1.先创建一个Spring组件扫描类

@Configuration
@ComponentScan("包名")
public class SpringConfig { }/*
*此类是配置类,将在启动时被加载
*此类配置了组件扫描,在被加载时将执行扫描
*/

2.创建另一个组件类(用于数据的交互类)

@Repository
public class UserMapper { public void insert() { System.out.println("UserMapper.insert() >> 将用户数据写入到数据库 中……"); }
}
/*
*此类是一个组件类
*在组件扫描的包找那个,且添加了组件注解@Repository
*这个注解表示该组件是操作数据的组件
*/

3.创建控制器类

@Controller
public class UserController { @Autowired // 注意:此处使用了自动装配的注解 private UserMapper userMapper;public void reg() { System.out.println("UserController.reg() >> 控制器即将执行用户注册……");  userMapper.insert();                                                     }
}
/*
*userMapper属性并未赋值,但是使用了@Autowired注解
*Spring框架会通过自动装配机制为此属性注入值
*如果注入成功,调用此属性的方法时将成功运行
*否则,就出现NPE
*/

4.创建测试类

public class SpringRunner { public static void main(String[] args) { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfig.class); UserController userController = ac.getBean("userController",UserController.class);userController.reg(); ac.close(); }
}

三.方法自动装配

Spring的自动装配机制还可以用在方法上:

如果一个方法是由Spring框架自动调用的(通常是构造方法或@Bean注解的方法),当这个方法被声明了参数时,Spring框架也会自动的尝试从容器中找到匹配的对象用于调用此方法

对方法的参数自动装配时,如果方法有多个参数,各个参数的先后顺序是不重要的

示例:

1.创建一个配置类

@Configuration
public class SpringConfig { @Bean public UserMapper userMapper() { return new UserMapper(); }@Bean public UserController userController(UserMapper userMapper) { UserController userController = new UserController(); userController.userMapper = userMapper; return userController; }
}

首先,会根据需要装配的数据类型在Spring容器中统计匹配的Bean(对象)的数量

当匹配的Bean数量为0时,判断@Autowired注解的required属性值,这个属性默认值为true,即装配失败,项目启动时即抛出NoSuchBeanDefinitionException

我们需要将required的属性值设置为false,表示放弃自动装配,不会报告异常,后续直接使用此属性时,会报NPE

当匹配的Bean数量为1个,直接装配,且装配成功

当匹配的Bean数量超过1个,自动尝试按照名称进行装配(属性名要与beanName相同)

四.小结

1.当某个属性需要被注入值,且此值肯定存在于Spring容器中时,可以使用@Autowired注解,那么Spring框架就会自动为此属性注入值

2.如果某个方法是Spring调用的,当方法体中需要某个值,其次值存在于Spring容器中,可以将其声明为方法的参数,那么Spring框架会自动从容器中找到此值并且调用此方法

如果声明了多个参数,那么各参数的先后顺序是不重要的

3.自动装配的前提是Spring会自动创建此类的对象,否则Spring不可能为属性注入值,也不可能调用类中的方法

4.@Autowired的装配机制的表现是可以根据类型实现装配,并且,当匹配类型的Bean有多个时,还可以根据名称匹配,从而实现装配

Spring框架的自动装配相关推荐

  1. Spring框架之自动装配

    Spring的IoC容器通过Java反射机制了解了容器中所存在Bean的配置信息,这包括构造方法的结构,属性的信息,而正是由于这个原因,Spring容器才能通过某种规则来对Bean进行自动装配,而无须 ...

  2. Spring框架中 自动装配的详解 属性值的详解

    手动装配实现属性注入 <bean id="studentDao" class="com.xz.dao.impl.StudentDaoImpl">&l ...

  3. java 自动装载_java_详解Java的Spring框架下bean的自动装载方式,Spring容器可以自动装配相互协 - phpStudy...

    详解Java的Spring框架下bean的自动装载方式 Spring容器可以自动装配相互协作bean之间的关系,这有助于减少对XML配置,而无需编写一个大的基于Spring应用程序的较多的和元素. 自 ...

  4. Spring精华问答 | Spring Bean的自动装配是怎么回事?

    戳蓝字"CSDN云计算"关注我们哦! Spring框架是由于软件开发的复杂性而创建的.Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情.然而,Sprin ...

  5. Spring Boot(一) 自动装配--约定大于配置

    欢迎去我的个人博客--晓坞坐坐,里面有很多有趣的文章,不止是技术.www.lixiaodongisme.com 随着spring体系的发展,我们在开发时需要配置整合的东西也越来越多,在进行开发时,繁琐 ...

  6. Spring 由构造函数自动装配

    转载自  Spring 由构造函数自动装配 Spring 由构造函数自动装配 这种模式与 byType 非常相似,但它应用于构造器参数.Spring 容器看作 beans,在 XML 配置文件中 be ...

  7. Spring IOC容器-自动装配

    1 autowire="byName" 根据名称自动装配,自动去IOC容器中找与属性名同名的引用的对象,并自动注入. <!-- ###############自动装配#### ...

  8. Spring中的自动装配和Autowired

    彻底搞明白Spring中的自动装配和Autowired 一.自动装配 当Spring装配Bean属性时,有时候非常明确,就是需要将某个Bean的引用装配给指定属性.比如,如果我们的应用上下文中只有一个 ...

  9. Spring按类型自动装配注入数组、集合、Map

    Spring按类型自动装配注入数组.集合.Map时,是把应用上下文中对应类型的bean装配进集合,而不是直接查找一个对应类型的集合然后注入.以下面这段代码为例: import org.springfr ...

最新文章

  1. oc75--不可变字典NSDictionary
  2. 使用Arthas 获取Spring ApplicationContext还原问题现场
  3. 简单的写一个发布订阅器
  4. Oracle中类似于isql或osql的命令行工具
  5. 数据分析实战-PUBG数据集EDA
  6. tcp 组播_华为组播理论知识详解(二)
  7. CSS布局教程:用DIV CSS实现国内经典式三行两列布局-CSS布局实例
  8. php mysql 冒号_php – 使用pdo在搜索变量中使用冒号(:)进行查询
  9. [JQuery代码]超酷鼠标滑过背景高亮效果
  10. .Net中Cookie乱码解决方法
  11. Git用命令提交代码并合并
  12. PIC16F887 实战编程 单片机编程 基础实验教程
  13. linux下ant安装和使用教程,ant安装与简单应用
  14. Linux系统小说源码网站,Linux系统小说源码网站
  15. Ubuntu18.04 安装 rabbitvcs svn 图形化客户端
  16. 报错:undefined symbol: _ZN10tensorflow12OpDefBuilder4AttrESs
  17. elasticsearch操作索引库、RestClient操作索引库2
  18. 分布式项目Maven打包出现Could not resolve dependencies for project、Could not find artifact问题解决
  19. 从host端对Windows虚机进行内存dump和分析
  20. 升级glibc-2.12到glibc-2.15的正确方式

热门文章

  1. 经典C语言算法之回文数
  2. 北京工业计算机英语口语复试,北京工业大学复试回忆
  3. 【Linux】ARM篇一--计算机基础与RAM处理器概论
  4. Elasticsearch7.x.x开启X-pack鉴权,按步骤执行就能成功!
  5. NaCI SDK安装
  6. Java 17新特性,快到起飞?惊呆了!
  7. oRbIt 的专栏 用天文方法计算二十四节气(上)
  8. 【C语言】合并两个数组,降序排列并删除重复元素(通俗易懂)
  9. oracle ora-01403
  10. 抢红包技术大揭秘:如何使用Redis轻松实现抢红包