二、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()); }
  
 @Bean
  public CDPlayer cdPlayer(CompactDisc compactDisc){
  //cdPlayer()方法请求一个CompactDisc作为参数,当spring调用cdPlayer()创建CDPlayer bean的时候,它会自动装备一个CompactDisc到配置方法之中 return new CDPlayer(compactDisc); }
 @Bean
  public CDPlayer cdPlayer(CompactDisc compactDisc){
  //cdPlayer()方法请求一个CompactDisc作为参数,当spring调用cdPlayer()创建CDPlayer bean的时候,它会自动装备一个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配置

(2)在XML配置中应用JavaConfig

猜你喜欢

转载自www.cnblogs.com/ssh-html/p/9614624.html