Spring註解基礎學習總結

1.依賴注入註解:web

  @Component:Bean注入到Spring容器組件(通用)spring

  @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE):Bean做用域(
      SCOPE_PROTOTYPE:每次注入bean就是一個新的Bean
      SCOPE_SINGLETON:單例

  @Repository:標記該類爲Dao數據訪問層app

  @Service:標記該類爲Service業務邏輯層ide

  @Controller:標記該類爲Controller控制訪問層學習

 
 @Autowired註解:自動裝配bean
      使用說明:該註解能夠放在構造方法上,注入屬性上,普通方法上
    屬性:required = false(若是該類沒有在Spring容器中則忽略不報錯)
    歧義性:@
Qualifier做用比@Primary強

/**
 * Created by 小小高 on 19-7-14
 *
 * 學習Spring bean注入
 * @Component註解:
 *      標記這個類爲組件,進行注入bean
 *
 * @Autowired註解:自動裝配bean
 *      使用說明:該註解能夠放在構造方法上,注入屬性上,普通方法上
 */
@Data
@Component
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
//@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
public class SpringTestBeanClass {
    private String name;
    private Integer age;
    private String id;
    @Autowired
    private SpringBeanSonClass02 springBeanSonClass;

//    @Autowired/*注入bean到構造方法*/
//    public SpringTestBeanClass(SpringBeanSonClass springBeanSonClass){
//        this.springBeanSonClass = springBeanSonClass;
//    }

//    @Autowired/*注入bean到普通方法*/
//    public void setSpringBeanSonClass(SpringBeanSonClass springBeanSonClass){
//        this.springBeanSonClass = springBeanSonClass;
//    }
    public void pay(){
        System.out.println("調用SpringTestBeanClass類的pay方法");
        springBeanSonClass.springBeanSonClass02();
    }
}

  

  @Configuration:標記該類爲配置類ui

* @Configuration註解;聲明該類爲配置類,加載Spring容器
* 使用說明:
* @Configuration註解的配置類有以下要求:
* 1.@Configuration不能夠是final類型;
* 2.@Configuration不能夠是匿名類;
* 3.嵌套的configuration必須是靜態類。
* 加載容器:
* @Configuration配置spring並啓動spring容器
* 1.@Configuration啓動容器+@Bean註冊Bean
* 2.@Configuration啓動容器+@Component註冊Bean
* 3.使用 AnnotationConfigApplicationContext 註冊 AppContext 類的兩種方法
* 4.配置Web應用程序(web.xml中配置AnnotationConfigApplicationContext)
*@ComponentScan註解:告訴Srping須要掃描的包或類,spring自動掃描而且裝入bean容器。
* 使用說明:
* 1.默認規則:
* 是以該配置類所在的包做爲基礎包,會掃描該配置類同級包的類和子包類進行自動掃描裝配
* 2.屬性basePackages:
* 加載基礎掃描包,自動裝配掃描該包和該包的子包
* 3.屬性basePackageClasses:
* 加載自動掃描標記類的同級包和子包的類
* @Bean註解:加載Bean容器實例
/**
 * Created by 小小高 on 19-7-14
 *
 * @Configuration註解;聲明該類爲配置類,加載Spring容器
 *  使用說明:
 *      @Configuration註解的配置類有以下要求:
 *      1.@Configuration不能夠是final類型;
 *      2.@Configuration不能夠是匿名類;
 *      3.嵌套的configuration必須是靜態類。
 *  加載容器:
 *      @Configuration配置spring並啓動spring容器
 *      1.@Configuration啓動容器+@Bean註冊Bean
 *      2.@Configuration啓動容器+@Component註冊Bean
 *      3.使用 AnnotationConfigApplicationContext 註冊 AppContext 類的兩種方法
 *      4.配置Web應用程序(web.xml中配置AnnotationConfigApplicationContext)
 *@ComponentScan註解:告訴Srping須要掃描的包或類,spring自動掃描而且裝入bean容器。
 *      使用說明:
 *          1.默認規則:
 *               是以該配置類所在的包做爲基礎包,會掃描該配置類同級包的類和子包類進行自動掃描裝配
 *          2.屬性basePackages:
 *                加載基礎掃描包,自動裝配掃描該包和該包的子包
 *          3.屬性basePackageClasses:
 *                加載自動掃描標記類的同級包和子包的類
 * @Bean註解:加載Bean容器實例
 *
 */

@Configuration
//@ComponentScan(basePackages = {"com.test.xll.spring_demo_study.bean.son"})
@ComponentScan(basePackageClasses = FlagBasePackageClass.class)
//@ComponentScan/*默認規則*/
public class SpringBeanDIConfig {

    @Bean
    public SpringBeanSonClass springBeanSonClass(){
        return new SpringBeanSonClass();
    }

    @Bean
    public SpringBeanSonClass02 springBeanSonClass02(){
        return new SpringBeanSonClass02();
    }

    @Bean
    @Conditional(DIBeanCondition.class)/*條件注入Bean*/
    public DIConditionBean diConditionBean(){
        return new DIConditionBean();
    }

}

 


@PropertySource:注入外部的值
  
@Configuration
@PropertySource("classpath:app.properties")
public class SpringPropertySourceConfig {

    @Autowired
    private Environment environment;

    @Bean
    public DIPropertySourceBean diPropertySourceBean(){
        return new DIPropertySourceBean(environment.getProperty("xll.key"), environment.getProperty("xll.value"));
    }
}
xll.key=key
xll.value=value

@Import註解:this

  1.加載注入普通類到Spring容器中spa

  2.動態註冊ImportSelectorcode

  3.手動註冊ImportBeanDefinitionRegistrarxml

代碼:

/**
 * Created by 小小高 on 19-7-14
 *
 * @Import註解:注入普通類到Spring容器中
 *
 */
@Configuration
@Import(value = {SpringImportStudyBean.class, SelfImportSelector.class, SelfImportBeanDefinitionRegistrar.class})
public class SpringImportStudyConfig {

}
**
 * Created by 小小高 on 19-7-14
 *
 * 學習註解@Import的普通類
 */
@Data
public class SpringImportStudyBean {

    private String name = "學習@Import註解使用的Bean類";

}
/**
 * Created by 小小高 on 19-7-14
 *
 * 學習註解@Import的普通類
 */
@Data
public class SpringImportSelectprStudyBean {

    private String name = "學習接口ImportSelector注入Bean類";

}
/**
 * Created by 小小高 on 19-7-14
 */
public class SpringSelfImportBeanDefinitionRegistrarBean {

    public void print(){
        System.out.println("類名:"+Thread.currentThread().getStackTrace()[1].getClassName());
    }
}
/**
 * Created by 小小高 on 19-7-14
 */
public class SelfImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
    @Override
    public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) {
        //注入普通類到Bean容器
        RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(SpringSelfImportBeanDefinitionRegistrarBean.class);
        beanDefinitionRegistry.registerBeanDefinition("springSelfImportBeanDefinitionRegistrar", rootBeanDefinition);
    }
}
/**
 * Created by 小小高 on 19-7-14
 *
 * 使用ImportSelector進行注入bean到容器中
 */
public class SelfImportSelector implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata annotationMetadata) {
        return new String[]{"com.test.xll.spring_demo_study.bean.SpringImportSelectprStudyBean"};
    }
}
相關文章
相關標籤/搜索