spring总结1

@Configuration注解:在类上添加@Configuration注解表明这个类是一个配置类。

装配bean

一、自动化装配bean

  1、组件扫描

    @ComponentScan注解:在配置类上添加@ComponentScan注解,就能够在Spring中启用组件扫描,查找带有@Component注解的类。这样会在Spring中自动为带有@Component注解的类创建一个bean。默认扫描配置类所在包,也可以自定义,如@ComponentScan(basePackages="soundsystem")、@ComponentScan(basePackages={"soundsystem","video"})、@ComponentScan(basePackageClasses={CDPlayer.class,DVDPlayer.class})basePackageClasses属性所设置的数组中包含了类,
这些类所在的包将会作为组件扫描的基础包。

    @Component注解:在类上使用@Component注解表明该类会作为组件类,并告知Spring要为这个类创建bean。Spring应用上下文中所有bean都会给定一个id,默认是类名第一个字母变小写。也可以自定义,如@Component(“lonelyHeartsClub”)

    @Named 注解@Named作为@Component注解的替代方案。 两者之间有一些细微的差异, 但是在大多数场景中, 它们是可以互相替换的。

  2、自动装配

    @Autowired注解:@Autowired注解不仅能够用在构造器上,还能用在属性的Setter方法上。 比如说, 如果CDPlayer有一个setCompactDisc()方法, 那么可以采用如下的注解形式进行自动装配 :

private CompactDisc cd;
//用在构造器上
@Autowired
public CDPlayer(CompactDisc cd){
    this.cd = cd;
}
//用在setter方法上
@Autowired
public void setCompactDisc(CompactDisc cd){
    this.cd = cd;
}
View Code

     @Autowired(required=false):如果没有匹配的bean, 那么在应用上下文创建的时候, Spring会抛出一个异常。 为了避免异常的出现, 你可以将@Autowiredrequired属性设置为false ,required属性设置为false时, Spring会尝试执行自动装配, 但是如果没有匹配的bean的话, Spring将会让这个bean处于未装配的状态。但是, 把required属性设置为false时, 你需要谨慎对待。 如果在你的代码中没有进行null检查的话, 这个处于未装配状态的属性有可能会出现NullPointerException如果有多个bean都能满足依赖关系的话, Spring将会抛出一个异常, 表明没有明确指定要选择哪个bean进行自动装配。 就会产生歧义性。

 

 

二、通过Java代码装配bean

  @Bean注解  (需要在配置类中进行装配)@Bean注解会告诉Spring这个方法将会返回一个对象, 该对象要注册为Spring应用上下文中的bean。 方法体中包含了最终产生bean实例的逻辑。默认情况下, beanID与带有@Bean注解的方法名是一样的。 如果你想为其设置成一个不同的名字的话, 那么可以重命名该方法, 也可以通过name属性指定一个不同的名字:

@Bean(name="lonelyHeartsClubBand"public CompactDisc sgtPeppers(){
    return new SgtPeppers();
}
View Code
@Bean
public CDPlayer cdPlayer(CompactDisc compactDisc){
    return new CDPlayer(compactDisc);
}
//通过这种方式引用其他的bean通常是最佳的选择, 因为它不会要求将CompactDisc声明到同一个配置类之中。 在这里甚至没有要求CompactDisc必须要在JavaConfig中声明, 实际上它可以通过组件扫描功能自动发现或者通过XML来进行配置。 你可以将配置分散到多个配置类、 XML文件以及自动扫描和装配bean之中, 只要功能完整健全即可。 不管CompactDisc是采用什么方式创建出来的, Spring都会将其传入到配置方法中, 并用来创建CDPlayer bean。
View Code

三、通过xml装配bean

 <bean id="compactDisc" class="soundsystem.SgtPeppers" />Spring发现这个<bean>元素时, 它将会调用SgtPeppers的默认构造器来创建bean

四、bean的作用域:

  在默认情况下, Spring应用上下文中所有bean都是作为以单例( singleton) 的形式创建的。 也就是说, 不管给定的一个bean被注入到其他bean多少次, 每次所注入的都是同一个实例。

  单例(Singleton):在整个应用中,只创建bean的一个实例

  原型(Prototype):每次注入或者通过Spring应用上下文获取的时候,都会创建一个新的bean实例

  会话(Session):在web应用中,为每个会话创建一个bean实例

  请求(Request):在web应用中,为每个请求创建一个bean实例

  @Scope注解:如果你想在Java配置中将bean声明为原型bean,那么可以组合使用@Scope和@Bean来指定所需的作用域@Scope(“prototype”)或者@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)

posted @ 2017-08-15 13:45  小小小涛  阅读(160)  评论(0)    收藏  举报