• 二、spring中装配bean


      在spring框架中提供了三种 bean的装配方式,当然这三种装配方式是可以灵活的进行组合使用的,项目中使用最多的是自动装配bean的方式,也就是通过注解的方式进行bean的装配,一下是四种装配方式的介绍:

    一、自动化装配bean

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

    (1)组件扫描(component scanning):spring会自动发现应用上下文中所创建的bean

    注:组件扫描在项目中一般是使用XML文件中的启用组件扫描:

    <context:component-scan base-package="com.ssc.controller" />
    

    但是,在spring中使用注解的方式启用组件扫描也是可以的,就是@ComponentScan注解,默认会扫描与配置类相同的包。

    package soundsystem;
    import org.springframework.context.annotation.componentScan;
    import org.springframework.context.annotation.Configuration;
    
    @configuration
    @componentScan
    public class CDPlayerConfig{
        /*****/
    }
    

    可以为@ComponentScan注解设置属性的:

    1)@ComponentScan(basePackage="soundsystem")

    2)@ComponentScan(basePackage={"soundsystem",“video”})

    3)@ComponentScan(basePackageClasses={CDPlayer.class,DVDplayer.class}) 这种是扫描某些特定的class类  

    (2)自动装配(autowiring):spring自动满足bean之间的依赖

    自动装配就是让spring自动满足bean依赖的一种方法,在满足的过程中,会在spring应用上下文中寻找匹配某个bean需求的其他bean。

    自动装配的注解@Autowired 是spring特有的注解,主要有:

    1)bean的声明上加@Autowired

    @Autowired
    private CompactDisc cd;
    

    2)构造器

    @Autowires
    public CDPlayer(CompactDisc cd){
        this.cd = cd;
    }

      

    3)setter方法或者其他方法  

    @Autowires
    public void setCompactDisc(CompactDisc cd){
        this.cd = cd;
    }
    
    @Autowires
    public void insertDisc(CompactDisc cd){
        this.cd = cd;
    }

    二、通过Java代码装配bean

      尽管在很多场景下通过组件扫描和自动装配实现spring的自动化配置是更为推荐的方式,但有时候自动化配置的方案行不通,因此需要明确配置spring。比如说,你想要将第三方库中的组件装配到你的应用中,在这种情况下,是没有办法在它的类上使用@Component和@Autowired注解的,因此就不能使用自动化装配方案了。

    package soundsystem;
    import org.springframework.context.annotation.Configuration;
    
      @Configuration
     public class CDPlayConfig{
      
     //@Bean注解会告诉spring这个方法会返回一个对象,该对象要注册为spring应用上下文中的bean
      @Bean
      public CompactDisc sgtPeppers(){
        return new SgtPeppers();          
      }
    
     //cdPlayer()方法同样使用了@Bean注解,这表明这个方法会创建一个bean实例并将其注册到spring应用上下文中去
     @Bean
      public CDPlayer cdPlayer(){
        return new CDPlayer(sgtPeppers());          
      }
    
     //cdPlayer()方法请求一个CompactDisc作为参数,当spring调用cdPlayer()创建CDPlayer bean的时候,它会自动装备一个CompactDisc到配置方法之中 
      @Bean
      public CDPlayer cdPlayer(CompactDisc compactDisc){
        return new CDPlayer(compactDisc);          
      }
    
      //cdPlayer()方法请求一个CompactDisc作为参数,当spring调用cdPlayer()创建CDPlayer bean的时候,它会自动装备一个CompactDisc到配置方法之中  
      @Bean
      public CDPlayer cdPlayer(CompactDisc compactDisc){
      CDPlayer cdPlayer = new CDPlayer(compactDisc);
      cdPlayer.setCompactDisc(compactDisc);
        return cdPlayer;          
      }
    }

    三、通过XML装配bean

    这里写一下在XML文件中的几种配置方式:

    //简单的bean的声明 
    <bean id="compactDisc" class="soundsystem.SgtPeppers" />
    
    //借助构造器注入初始化bean 
    <bean id="cdPlayer" class="soundsystem.CDPlayer">
        <constructor-arg ref="compactDisc" />
    </bean>
    
    <bean id="cdPlayer" class="soundsystem.CDPlayer" c:rd-ref="compactDisc" />
    
    //将字面量注入到构造器中 注意属性为集合的时候可以使用list  set标签
    <bean id="cdPlayer" class="soundsystem.BlackDisc">
        <constructor-arg value="此时此刻" />
        <constructor-arg value="许巍" />
        <constructor-arg>
            <list>
                <value>爱情</value>
                <value>空谷幽兰</value>
                <value>灵岩</value>
                <value>此时此刻</value>
                <value>救赎之旅</value>
            </list>
        </constructor-arg>
    </bean>
    
    //将字面量注入到属性中
    <bean id="cdPlayer" class="soundsystem.BlackDisc">
        <property name="title" value="此时此刻" />
        <property name="artist" value="许巍" />
        <property name="tracks">
            <list>
                <value>爱情</value>
                <value>空谷幽兰</value>
                <value>灵岩</value>
                <value>此时此刻</value>
                <value>救赎之旅</value>
            </list>
        </property>
    </bean>
                  

    四、导入和混合装配

    (1)在JavaConfig中引入XML配置package soundsystem;

    import org.springframework.context.annotation.Bean;
    import org.springgramework.context.annotation.Configration;
    
    @Configration
    public class CDConfig{
      
      @Bean
      public CompactDisc compactDisc(){
            return new SgtPeppers();
        }      
    }
    
    package soundsystem;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configration;
    import org.springframework.context.annotation.Import;
    
    //使用@Import注解导入CDConfig
    @Configration
    @Import(CDConfig.class)
    public class CDPlayerConfig{
    @Bean public CompactDisc cdPlayer(CompactDisc compactDisc){ return new SgtPeppers(compactDisc); } } package soundsystem; import org.springframework.context.annotation.Configration; import org.springframework.context.annotation.Import; //创建soundsystemConfig,使用@Import注解将两个配置类组合在一起 @Configration @Import(CDConfig.class,CDPlayerConfig.class) public class soundsystemConfig{ } package soundsystem; import org.springframework.context.annotation.Configration; import org.springframework.context.annotation.Import; import org.springframework.context.annotation.ImportResource;
    //创建soundsystemConfig,使用@Import注解和@ImportResource将配置类和XML文件组合在一起 @Configration @Import(CDConfig.class) @ImportResource("classpath:cd-config.xml") public class soundsystemConfig{ }

    (2)在XML配置中应用JavaConfig

    //import 引入XML文件
    <import resource="cd-config.xml"/>
    <bean id="cdPlayer" class="soundSystem.CDPlayer" c:cd-ref="compactDisc">
    </bean>
    
    //将Javaconfig 类导入到XML文件中
    <bean class="soundsystem.CDConfig"/>
    <bean id="cdPlayer" class="soundSystem.CDPlayer" c:cd-ref="compactDisc">
    </bean>
    
    //XML文件中配置JavaConfig类和XML文件的组合
    <bean class="soundsystem.CDConfig"/>
    <import resource="cdplayer-config.xml"/>
  • 相关阅读:
    全国疫情数据的爬取
    Spring_声明式事务
    第三周总结
    Spring_整合Mybatis
    Oracle AWR内容详解 参考学习钱若梨花落
    查看Oracle某时刻的客户端IP连接情况 参考学习钱若梨花落
    oracle Logminer 日志挖掘 参考学习钱若离花落
    静默升级oracle 11g (从11.2.0.1升级到11.2.0.4)
    oracle RAC集群启动和关闭
    856. Score of Parentheses
  • 原文地址:https://www.cnblogs.com/ssh-html/p/9614624.html
Copyright © 2020-2023  润新知