为什么80%的码农都做不了架构师?>>>   hot3.png

JAVA官方注解框架:
   JSR 303  数据合法性校验标准框架
     JSR 330  容器依赖注入注解

注解可以包含属性和方法
     属性是没有参数的方法,方法名即为属性名,方法的返回值即使属性的类型。可以使用default定义默认值
     方法
     
注解的字段之上可以在使用注解注释。

各种框架的注解:
   Spring框架的注解
   
   
   Hibernate框架的注解
   
注解:
    注解的可继承性
        如果父类使用的注解被标示为可继承,则其子类默认具有父类的可继承注解
    
    在Class的实现中,注解数据分为两部分:
          类的所有注解 getAnnotations
              类的所有注解= 类自身直接声明的注解 + 继承自父类的注解
              
          类声明的注解 getDeclaredAnnotations   
              类自身直接声明的注解
              
   
Class 
   Class代表类和接口。注解是接口,默认继承自Annotation接口,就像所有的类都默认继承自Object。所以Class也可以用于提取
注解的信息。
   getAnnotatedInterfaces  
       获取注解实现的接口。
       
   getAnnotatedSuperclass
       获取带注解的父类。如果继承的父类带注解,则返回。
       
           
              
              
GenericDeclaration
     泛型声明,Class继承,表示类的泛型信息。

TypeVariable
    用以表示泛型的类型变量,类型变量提供类型的边界,泛型的声明信息,类型名。在泛型的时候用
    
Type
    类型,代表类的类型,每个类都是类名。面向对象中的类型。类型名就是自定义类的类名,Class实现返回,
        getName = getTypeName     (数组类型是个列外) 
       
AnnotatedElement
    表示类能被注解,提供注解的相关信息,有Class,Method, Field, Constructor这些反射类实现,获取类型的注解信息。                     
    
    
AnnotatedType
   注解的类型,和Type类型,用于标示类的类型名,此AnnotatedType标示主机的类型名,一般就是注解接口名。
   
Annotation
     Class<? extends Annotation> annotationType();   返回注解对应的类类型,一如普通类的Class   
       
       
       
一个应用的加载流程:
     
     
     
     
Spring注解APT

StandardAnnotationMetadata  对注解类进行注解元数据自省。
    
    ConditionEvaluator.shouldSkip  @Conditional check
    
Spring注解配置框架:
    
@Configuration
     1、类XML配置文件的功能,可以在其中声明使用@Bean注释的方法,用于导入Bean到Spring Bean容器中
                     @Configuration
                     public class AppConfig {
                          @Bean
                          public MyBean myBean() {
                              // instantiate, configure and return bean ...
                          }
                       }
         2、使用@Configuration注解作为上下文的资源配置文件,配合使用@Import、@ImportResource,以下几个Spring上下文可以使用
AnnotationConfigApplicationContext、AnnotationConfigWebApplicationContext。
             AnnotationConfigApplicationContext ctx =  new AnnotationConfigApplicationContext();
                         ctx.register(AppConfig.class);
                         ctx.refresh();
                         
                         MyBean myBean = ctx.getBean(MyBean.class);         
          
          也可以这样:扫描配置文件,从配置文件加载注解类。
              <beans>
                                <context:annotation-config/>
                                <bean class="com.acme.AppConfig"/>
                          </beans>       
     3、可以<context:component-scan/>被组件扫描器扫描加载
     4、可以在@Configuration修饰的配置文件上使用@ComponentScan
             @Configuration
                     @ComponentScan("com.acme.app.services")
                     public class AppConfig {
                         // various &#064;Bean definitions ...
                     }
     5、在@Configuration修饰的配置使用外部值,通过引入Enviroment
                   @Configuration
                      public class AppConfig {
                          @Inject Environment env;  //也可以使用@Autowire
                     
                          @Bean
                          public MyBean myBean() {
                              MyBean myBean = new MyBean();
                              myBean.setName(env.getProperty("bean.name"));
                              return myBean;
                          }
           }
    6、可以使用properties文件,使用@Properties注解,将properties文件注入到Enviroment实例中
             @Configuration
                         @PropertySource("classpath:/com/acme/app.properties")
                         public class AppConfig {
                             @Inject Environment env;
                        
                             @Bean
                             public MyBean myBean() {
                                 return new MyBean(env.getProperty("bean.name"));
                             }
                         }     
        7、使用@PropertySource和@Value配合使用,引入外部值
                     @Configuration
                     @PropertySource("classpath:/com/acme/app.properties")
                     public class AppConfig {
                         @Value("${bean.name}") String beanName;
                    
                         @Bean
                         public MyBean myBean() {
                             return new MyBean(beanName);
                         }
                     }        
          8、@Configuration和@Import组合使用:
                     
                     @Configuration
                     public class DatabaseConfig {
                         @Bean
                         public DataSource dataSource() {
                             // instantiate, configure and return DataSource
                         }
                     }
                     
                      @Configuration
                      @Import(DatabaseConfig.class)
                      public class AppConfig {
                          @Inject DatabaseConfig dataConfig;
                     
                          @Bean
                          public MyBean myBean() {
                              // reference the dataSource() bean method
                              return new MyBean(dataConfig.dataSource());
                          }
                      }
            9、@Profile、@Configuration结合使用,那个Profile被激活,加载那个类
            
                          @Profile("embedded")
                          @Configuration
                          public class EmbeddedDatabaseConfig {
                              @Bean
                              public DataSource dataSource() {
                                  // instantiate, configure and return embedded DataSource
                              }
                          }          
                          
                         @Profile("production")
                         @Configuration
                         public class ProductionDatabaseConfig {
                             @Bean
                             public DataSource dataSource() {
                                 // instantiate, configure and return production DataSource
                             }
                         }
            10、@Configuration和@ImportResource结合使用
                   @Configuration
                         @ImportResource("classpath:/com/acme/database-config.xml")
                         public class AppConfig {
                             @Inject DataSource dataSource; // from XML
                        
                             @Bean
                             public MyBean myBean() {
                                 // inject the XML-defined dataSource bean
                                 return new MyBean(this.dataSource);
                             }
                         }             
            11、使用内嵌的@Configuration,内嵌的@Configuration可以和@Profile结合使用,提供可选项。
                         @Configuration
                         public class AppConfig {
                             @Inject DataSource dataSource;
                        
                             @Bean
                             public MyBean myBean() {
                                 return new MyBean(dataSource);
                             }
                        
                             @Configuration
                             static class DatabaseConfig {
                                 @Bean
                                 DataSource dataSource() {
                                     return new EmbeddedDatabaseBuilder().build();
                                 }
                             }
                         }    
                         
            12、@Configuration懒加载。使用@Bean修饰的方法都是立即创建实例,可以使用@Lazy修饰符,来实现懒加载。
                         @Configuration
                         public class AppConfig {
                             @Inject DataSource dataSource; // from XML
                        
                             @Lazy
                             @Bean
                             public MyBean myBean() {
                                 // inject the XML-defined dataSource bean
                                 return new MyBean(this.dataSource);
                             }
                         }            
                         
            13、Spring框架支持@Configuration,使用@ContextConfiguration
                         @RunWith(SpringJUnit4ClassRunner.class)
                         @ContextConfiguration(classes={AppConfig.class, DatabaseConfig.class})
                         public class MyTests {
                        
                             @Autowired MyBean myBean;
                        
                             @Autowired DataSource dataSource;
                        
                             @Test
                             public void test() {
                                 // assertions against myBean ...
                             }
                         }
                         
            14、和其他注解结合使用@Enable、@EnableAsync、@EnableScheduling、@EnableTransactionManagement、@EnableAspectJAutoProxy
                 @EnableWebMvc。
                         
          15、一个应用可以使用一个@Configuration修饰的AppConfig拉起应用。通过@Import @ImportResource导入关联。将这个配置文件传给
Spring容器的启动类。                         
          对应的注解解析器是ConfigurationClassPostProcessor。使用注解要保证所有的注解解析器能正确加载到Spring容器中。
          使用@Configuration修饰的类必须满足以下条件:
              classes must be non-final
              classes must be non-local (may not be declared within a method)
              classes must have a default/no-arg constructor and may not use @Autowired constructor parameters. 
              Any nested configuration classes must be static.
     
@Import
    1、可以引入一个或多个@Configuration修饰的类。
    2、引入@Component修饰的类
    3、引入ImportSelector实现,解析器自动调用selectImports方法
    4、ImportBeanDefinitionRegistrar实现,解析器自动调用registerBeanDefinitions方法
    5、提供了XML配置文件<import/>同样的功能
    6、可以作为元注解或者使用在Class上,接口/注解/类都是Class。
    
    
@ImportResource
    1、提供和<bean/>类似的功能
    2、引入Groovy文件,需满足GroovyBeanDefinitionReader能处理
    3、引入XML文件,需满足XmlBeanDefinitionReader能处理
    4、可以声明自定义的解析器
         
@Bean

1、作用同XML配置的<bean/> 一般在@Configuration注解修饰的类中使用
                @Configuration
                    public
                    class Bootstrap {
                    
                        @Bean
                        public MyBean myBean(){
                            // instantiate and configure MyBean obj
                            return obj;
                        }
                    }
    2、为Bean声明一个或多个别名、作用域、依赖、是否懒加载。
          @Configuration
                    public
                    class Bootstrap {
                    
                        @Bean({"b1","b2"})
                        @Scope("prototype")  
                        @Lazy
                        @DependsOn
                        @Primary
                        public MyBean myBean(){
                            // instantiate and configure MyBean obj
                            return obj;
                        }
                    }
    3、@Bean一般都在@Configuration中使用
    
    4、@Bean在lite mode中使用,即在普通类或者带有@Component修饰的类中使用,@Bean修饰的方法会被Spring容器当做是
    Bean创建工厂方法,同XML配置中的factory-method类似。
          @Component
                    public class Calculator {
                        public int sum(int a, int b) {
                            return a+b;
                        }
                    
                        @Bean
                        public MyBean myBean() {
                            return new MyBean();
                        }
                    }    
@Conditional

注解关系
@Component
    @Configuration  @Service  @Controller @Repository

转载于:https://my.oschina.net/773355/blog/2986797

Spring注解配置框架相关推荐

  1. Spring注解配置工作原理源码解析

    一.背景知识 在[Spring实战]Spring容器初始化完成后执行初始化数据方法一文中说要分析其实现原理,于是就从源码中寻找答案,看源码容易跑偏,因此应当有个主线,或者带着问题.目标去看,这样才能最 ...

  2. spring注解配置

    使用注解配置需要引入xml文件约束条件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns ...

  3. Spring 注解配置

    2019独角兽企业重金招聘Python工程师标准>>> http://my.oschina.net/u/1157906/blog/178204  Spring的注解配置 转载于:ht ...

  4. spring注解配置quartz

    常规配置quartz可以参考我的另外一篇博文:http://www.cnblogs.com/yangzhilong/p/3349116.html spring配置文件里增加: 命令空间: http:/ ...

  5. [内容有误,请看参考和评论区]Spring 注解配置(annotation-config 和 component-scan的不同)

    [内容有误,请看参考和评论区]Spring 的xml配置里如何仅通过注解使用(annotation-config 和 component-scan的不同) 这个问题也算看了好几遍还没记住的问题,先抛结 ...

  6. CXF的Spring注解配置及使用

    使用的cxf包版本为 cxf-2.6.1.jar         官方下载地址:CXF下载地址 web.xml配置 <servlet><servlet-name>CXFServ ...

  7. 【Spring】Spring注解配置okhttp3

    1.概述 maven引入如下 <dependency><groupId>com.squareup.okhttp3</groupId><artifactId&g ...

  8. Java注解和xml_Spring注解配置和xml配置优缺点比较

    Spring注解配置和xml配置优缺点比较 编辑 ​ 在昨天发布的文章<spring boot基于注解方式配置datasource>一文中凯哥简单的对xml配置和注解配置进行了比较.然后朋 ...

  9. AOP底层原理与注解配置详解

    注解开发AOP制作步骤: 在XML格式基础上 导入坐标(伴随spring-context坐标导入已经依赖导入完成 开启AOP注解支持 配置切面@Aspect 定义专用的切入点方法,并配置切入点@Poi ...

  10. 深入学习Spring框架(二)- 注解配置

    1.为什么要学习Spring的注解配置? 基于注解配置的方式也已经逐渐代替xml.所以我们必须要掌握使用注解的方式配置Spring. 关于实际的开发中到底使用xml还是注解,每家公司有着不同的使用习惯 ...

最新文章

  1. python 报错 IndentationError: expected an indented block SyntaxError: invalid character in identifie
  2. 多媒体课程设计android,基于Android的多媒体播放器(课程设计)报告.doc
  3. 为何 IntelliJ IDEA 比 Eclipse 更好?
  4. 知识产权创业的比赛结果
  5. C# 实验四 修改版 获取系统时间、点击加一秒功能
  6. F# -- TCP/IP小测试
  7. python输入序列语句_Python基础教程(一) - 序列:字符串、列表和元组
  8. ASP用正则验证邮箱地址手机号码电话号码格式
  9. 使用fastapi时在py文件中无法正常引用
  10. Varnish 缓存服务器配置
  11. iWebShop 二次开发之商城后台模板渲染流程
  12. 互联网晚报 | 11月18日 星期四 | 看点直播将于11月30日停止服务;B站月活用户达2.67亿;高通宣布进军汽车领域...
  13. 【CSS笔记】CSS实现后台管理系统主界面布局
  14. 风之谷mobi-宫崎骏漫画kindle7本
  15. C# OPCUA 读写结构体
  16. HTTP之Referrer和Referrer-policy
  17. Java中有几种方法可以实现一个线程??用什么关键字修饰同步方法??stop()和suspend()方法为什么不推荐使用??
  18. 名片管理系统 #python项目 #演练 #增删改查CRUD #全程教程
  19. Unity-多米诺骨牌
  20. 数字人民币智能合约的一个颠覆式创新应用

热门文章

  1. 牛腩学ASP.NET CORE做博客(视频)
  2. JSON中JObject和JArray,JValue序列化(Linq)
  3. vsftpd单用户多目录配置
  4. 过滤掉文本中的javascript标签代码
  5. 工业机器人操作机设计原则和设计方法
  6. VPP 助你创新更高效、更灵活的报文处理方案
  7. Libevent源码分析-----开篇
  8. 深入解读Linux内存管理系列(6)——地址空间划分
  9. Linux kernel中 __bitmap_weight函数的理解
  10. Linux 文件系统(二)---执行过程及结构间的关系