zoukankan      html  css  js  c++  java
  • 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注解的配置类有如下要求:
    * 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注解:

      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"};
        }
    }
    
    
  • 相关阅读:
    TensorFlow中使用GPU
    C++内存管理与注意事项
    深入理解Transformer及其源码
    Dropout原理与实现
    指针生成网络(Pointer-Generator-Network)原理与实战
    深度学习中的优化算法总结
    Hadoop伪分布式搭建
    集成学习总结
    模型评估
    基于Spring AOP实现的权限控制
  • 原文地址:https://www.cnblogs.com/x-ll123/p/11186487.html
Copyright © 2011-2022 走看看