• 各种注解


    1.@Configuration有什么用?  configuration

    2.Spring是如何获取Bean的定义的?

    1):通过启动一个AnnotationConfigApplicationContext 来引导这个@Configuration 注解的类,比如:

            AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
            ctx.register(AllConfig.class);
            ctx.scan("com.test.aa");
            ctx.refresh();
            //web项目
            AnnotationConfigWebApplicationContext configWebApplicationContext=new AnnotationConfigWebApplicationContext();
            configWebApplicationContext.register(AllConfig.class);
            configWebApplicationContext.scan("com.test.aa");
            configWebApplicationContext.refresh();

     xml文件获取bean   

      ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
     2):Spring是如何获取Bean的定义的?通过注解启动,通过ApplicationContext获取的 基于ComponentScan() 来获取Bean的定义@Configuration 使用@Component 进行原注解,因此@Configuration 类也可以被组件扫描到(特别是使用XML元素)。 

    3.@Autowired 、 @Inject、@Resource 的区别

    @Inject: (表示该成员需要注入依赖项,可用在构造方法,方法,属性上面)通过AutowiredAnnotationBeanPostProcessor 类实现的依赖注入。位于javax.inject包内,是Java自带的注解。

    @Autowired: 是Spring提供的注解,通过AutowiredAnnotationBeanPostProessor 类实现注入。位于org.springframework.beans.factory.annotation 包内,是Spring 中的注解,@Autowired 默认是通过byType 实现注入 

    @Resource: 通过CommonAnnotationBeanPostProcessor 类实现注入,@Resource 一般会指定一个name属性,默认是通过byName 实现注入。

    区别:@Autowired和@Inject基本是一样的,因为两者都是使用AutowiredAnnotationBeanPostProcessor来处理依赖注入。但是@Resource是个例外,它使用的是CommonAnnotationBeanPostProcessor来处理依赖注入。当然,两者都是BeanPostProcessor。

    4.@Value、@PropertySource 和 @Configuration?  

    @Configuration 可以和@Value 和@PropertySource 一起使用读取外部配置文件,具体用法如下:

    在config 包下新建一个ReadValueFromPropertySource类,代码如下

     通过@PropertySource引入的配置文件,使@Value 能够获取到属性值,在给myBean()方法指定了一个名称叫做myTestBean。

    @PropertySource("classpath:beanName.properties")
    @Configuration
    public class ReadValueFromPropertySource {
    
        @Value("bean.name.component")
        String beanName;
    
        @Bean("myTestBean")
        public MyBean myBean(){
            return new MyBean(beanName);
        }
    
    }

    5.@Configuration 嵌套

    @Configuration注解作用在类上,就和普通类一样能够进行相互嵌套,定义内部类。 

    @Configuration
    public class AppConfig{
    
      @Inject
      DataSource dataSource;
    
      @Bean
      public MyBean myBean(){
        return new MyBean(dataSource);
      }
    
      @Configuration
      static class DataConfig(){
        @Bean
        DataSource dataSource(){
          return new EmbeddedDatabaseBuilder().build()
        }
      }
    }

    6.@ConditionalOnMissingBean(PaginationInterceptor.class)

       在没有PaginationInterceptor改bean的时候,创建bean到spring容器中

    7.@ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})

       在没有SqlSessionFactory,SqlSessionFactoryBean已经存在spring容器的时候加载 

    @AllArgsConstructor

    使用后添加一个构造函数,该构造函数含有所有已声明字段属性参数

    @NoArgsConstructor

    使用后创建一个无参构造函数

  • 相关阅读:
    GOF23设计模式之适配器模式(Adapter)
    浅谈浅克隆(shallow clone)和 深克隆(deep clone)
    GOF23设计模式之原型模式(prototype)
    GOF23设计模式之建造者模式(builder)
    GOF23设计模式之工厂模式(factory)
    GOF23设计模式之单例模式(singleton)
    面向对象设计的六大基本原则
    day38 各种队列、Event事件、协程、猴子补丁
    day37 GIL、同步、异步、进程池、线程池、回调函数
    day36 joinablequeue、多线程理论、多线程的两种使用方式、守护线程、互斥锁、死锁、递归锁、信号量
  • 原文地址:https://www.cnblogs.com/fanBlog/p/11115175.html
Copyright © 2020-2023  润新知