zoukankan      html  css  js  c++  java
  • 各种注解

    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

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

  • 相关阅读:
    Oracle 启动关闭
    GridView 自动序号
    提高数据库处理查询速度
    Linux目录结构
    GridView 全选
    Linux 窗口启动和命令行启动设置
    Oracle 备份
    二进制部署K8S集群(三)前置准备工作之准备签发证书环境
    nginx的location详解
    二进制部署K8S集群(七)Master节点之kubeapiserver集群部署
  • 原文地址:https://www.cnblogs.com/fanBlog/p/11115175.html
Copyright © 2011-2022 走看看