Spring注解基础学习总结

Posted x-ll123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring注解基础学习总结相关的知识,希望对你有一定的参考价值。

1.依赖注入注解:

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

  @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE):Bean作用域(
      SCOPE_PROTOTYPE:每次注入bean就是一个新的Bean
      SCOPE_SINGLETON:单例

  @Repository:标记该类为Dao数据访问层

  @Service:标记该类为Service业务逻辑层

  @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:标记该类为配置类

* @Configuration注解;声明该类为配置类,加载Spring容器
* 使用说明:
* @Configuration注解的配置类有如下要求:
* [email protected]不可以是final类型;
* [email protected]不可以是匿名类;
* 3.嵌套的configuration必须是静态类。
* 加载容器:
* @Configuration配置spring并启动spring容器
* [email protected]启动容器[email protected]注册Bean
* [email protected]启动容器[email protected]注册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注解的配置类有如下要求:
 *      [email protected]不可以是final类型;
 *      [email protected]不可以是匿名类;
 *      3.嵌套的configuration必须是静态类。
 *  加载容器:
 *      @Configuration配置spring并启动spring容器
 *      [email protected]启动容器[email protected]注册Bean
 *      [email protected]启动容器[email protected]注册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注解:

  1.加载注入普通类到Spring容器中

  2.动态注册ImportSelector

  3.手动注册ImportBeanDefinitionRegistrar

代码:

/**
 * 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";
    

以上是关于Spring注解基础学习总结的主要内容,如果未能解决你的问题,请参考以下文章

Spring注解学习总结-老版本

Spring基础学习注解实现自动装配

Spring知识点总结之注解方式实现IOC和DI

Spring 框架常用语法进行总结

Spring开发中常用的注解总结

spring开发之注解基础(半注解半xml)