Spring笔记:bean的自动装配

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring笔记:bean的自动装配相关的知识,希望对你有一定的参考价值。

 

时间:2021/10/27

 

一.在Spring中有三种装配的方式:

  • 在xml中显示配置
  • 在java中显示配置
  • 隐式的自动装配

 

二.Spring的自动装配方法:

  • ByName自动装配:会自动在容器上下文中查找,和自己对象set方法后面的值(属性名)对应的bean id。
  • ByType自动装配:会自动在容器上下文中查找,和自己对象属性类型相同的bean(看class)。

 

三.总结:

  • ByName时,需要保证所有bean的id唯一,并且这个bean需要和自动注入的属性的set方法的值一致。
  • ByType时,需要保证所有bean的class唯一,并且这个bean需要和自动注入的属性的类型一致。

 

努力,向上,自律

Spring学习笔记——装配Bean

1、Spring配置的可选方案

  • XML中进行显式配置。
  • Java中进行显式配置。
  • 隐式的bean发现机制和自动装配。 

2、自动化装配bean

  Spring从两个角度来实现自动化装配:

  • 组件扫描(component scanning): Spring会自动发现应用上下文中所创建的bean
  • 自动装配(autowiring): Spring自动满足bean之间的依赖 。

  2.1、创建可被发现的bean——@Component(在POJO实现类上添加@Component注解);

  2.2、启用组件扫描——@ComponentScan

  • 在java配置类上添加@ComponentScan注解启用组件扫描
@Configuration
@ComponentScan
public class DemoConfig {
}
  • 通过XML启用组件扫描
<beans ... >
  <
context:component-scan base-package="" />
</beans>
  • 通过@Autowired注解实现自动装配

  2.3、为组件扫描的bean命名

  • @Component("beanName");
  • @Named("beanName");

  2.4、设置组件扫描的基础包

  • 如果是通过Java配置类进行配置的,默认配置类所在的包为基础包;
  • 通过basePackages配置组件扫描的基础包——@ComponentScan(basePackages={"xxx", "xxxx"});
  • 将其指定为包中包含的类或接口——@ComponentScan(basePackageClasses={xxx.class, xxxx.class});

  2.5、通过为bean添加注解实现自动装配——@Autowired。@Autowired = @inject

  • 在属性上使用@Autowired;
  • 在构造方法上使用@Autowired;
  • 在setter方法上使用@Autowired;
  • 在任何方法上使用@Autowired。

3、通过Java代码装配bean

  

@Configuration // 使用@Autowired声明该类为配置类
public class CDPlayerConfig {
  @Bean // 默认情况下bean的ID与带有@Bean注解的方法名相同
  public CompactDisc sgtPeppers() {
    return new SgtPeppers();
  }
  @Bean(name="beanName")
  public CompactDisc sgtPeppers2() {
    return new SgtPeppers();
  }
  @Bean
  public CDPlayer cdPlayer(
CompactDisc compactDisc) {
    return new CDPlayer(compactDisc);
  }
}

4、通过XML装配bean

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.10.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.10.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.10.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.10.xsd">
    
    <!-- 配置数据源  -->
    <bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
    <!-- 扫描Mybatist配置文件  -->
    <bean name="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactory">
        <property name="dataSource" ref="dataSource" />
        <property name="mapperLocations" value="classpath:mysql/*.xml"/>
    </bean>
    <!-- Mapper扫描配置   -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.zhux.user.dao"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>
</beans>

5、导入和混合配置

  5.1、在JavaConfig中引用XML配置;

  5.2、在XML配置中引用JavaConfig。















以上是关于Spring笔记:bean的自动装配的主要内容,如果未能解决你的问题,请参考以下文章

Spring学习笔记——装配Bean

Spring学习笔记之装配Bean

Spring框架学习笔记——自动装配

Spring实战读书笔记Spring装配Bean

Spring实战读书笔记Spring装配Bean

Spring4学习笔记 - 配置Bean - 自动装配 关系 作用域 引用外部属性文件