zoukankan      html  css  js  c++  java
  • Spring中常用的注解

    1、 @Configuration

    ​ 表明这个一个配置类,主要用于配置Bean。例如通过@Bean注解往IOC容器中添加Bean

    @Configuration
    public class MainConfig {
    
        @Bean
        public Person Person(){
            return new Person();
        }
    }
    

    再使用AnnotationConfigApplicationContext类传入这个配置类

    public class Main {
        public static void main(String[] args) {
            AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(MainConfig.class);
            System.out.println(ctx.getBean("Person")); //获取实例
        }
    }
    

    2、@ComponetScan

    ​ 可以扫描指定包下的带有@Componet、@Service等注解的类,并把他们加入到IOC容器中,就可以不用自己去@Bean注解手动返回一个Bean了。

    @Configuration
    @ComponentScan(basePackages = "service")
    public class MainConfig {}
    

    3、@Scope

    ​ 使用@Scope注解指定Bean的作用域,一般与@Bean注解一起作用于方法上,或者与Compoent注解作用在类上。其共有四种作用域

    singleton 单例(默认)

    prototype 多例

    request 同一请求

    session 同一回话

    ​ 在使用Application接口的话,单例默认是非懒加载的,多例是懒加载的

    4、Import

    ​ 除开@ComponetSan+@Service、@Controller.. 和@Bean,Import也可以往IOC容器中加入组件

    @Configuration
    @Import({Person.class, Cat.class}) //默组件id是类的全路径名称
    public class MainConfig {
    }
    
    ImportSelecotr

    ​ 通过@Import中的ImportSelector可以指定类名称

    public class ZhaiImportSelector implements ImportSelector {
    
        @Override
        public String[] selectImports(AnnotationMetadata annotationMetadata) {
            return new String[]{"entity.Cat"};
        }
    }
    
    @Configuration
    @Import({Person.class, ZhaiImportSelector.class})
    public class MainConfig {
    }
    
    ImportBeanDefinitionRegister

    通过@Import中的ImportBeanDefinitionRegister可以指定Bean的名称

    public class ZhaiImportDefinitionRegister implements ImportBeanDefinitionRegistrar {
    
        @Override
        public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
            RootBeanDefinition definition = new RootBeanDefinition(Cat.class);
            registry.registerBeanDefinition("MyCat", definition); //指定Bean的名称
        }
    }
    
    @Configuration
    @Import({Person.class, ZhaiImportSelector.class, ZhaiImportDefinitionRegister.class})
    public class MainConfig {
    }
    

    5、Bean的初始化方法和销毁方法

    Bean的声明周期
    1. 注册bean定义信息到容器中 -> 执行构造方法 -> 属性赋值 -> 初始化 ->销毁
    2. 单例模式下,容器启动时,bean对象就初始化了,当容器销毁时也会调用bean对象的destory方法
    3. 多例模式下,容器启动时,bean对象不会被初始化,而是当调用是才会被初始化。并且bean销毁不受容器管理,而是有GC回收。
    指定bean的初始化方法和销毁方法
    1. 实现InitializingBean和DisposableBean

      public class Person implements InitializingBean, DisposableBean {
      
          public Person(){
              System.out.println("我是人类,这是我的构造方法");
          }
      
          @Override
          public void destroy() throws Exception {
              System.out.println("调用了销毁方法");
          }
      
          @Override
          public void afterPropertiesSet() throws Exception {
              System.out.println("调用了初始化方法");
          }
      }
      
    2. 手动指定

      @Configuration
      public class MainConfig {
      
          @Bean(initMethod = "init", destroyMethod = "destroy")
          public Person Person(){
              return new Person();
          }
      }
      
  • 相关阅读:
    NSURLConnection实现文件上传和AFNetworking实现文件上传
    scrollToItemAtIndexPath: atScrollPosition: animated:
    UIViewControllerTransitioningDelegate, UIViewControllerAnimatedTransitioning
    界面传值时数组赋值问题
    安装cocoapods遇到两大坑-Ruby版本升级和Podfile的配置
    iOS通知的整理笔记
    iOS简单实现毛玻璃效果
    iOS模态弹出半透明视图控制器
    友盟SDK实现分享
    iOS 本地存储四种方法
  • 原文地址:https://www.cnblogs.com/zcr-xiaozhai/p/14000027.html
Copyright © 2011-2022 走看看