Java注解以及相关内容

注解以及相关内容 JVM方法调用的静态(static binding) 和动态绑定机制(auto binding) 创建组件之间协作的行为通常称为 Wiring,装配bean的方式有很多 采用XML文件的装配方式 采用基于注解的装配方式 @Service @Controller @Repository @Component 基于Java的装配方式 通过 @Configuration 和 @Bean实现

1.注解

01.创建注解
    元注解: @Target @Retention @Document @Inherit
    @Retention
        RetentionPolicy
            .SOURCE
            .CLASS
            .RUNTIME
    @Target
        ElementType
            .TYPE   .FIELD  .PARAMETER  .CONSTRUCTOR
            .METHOD .LOCAL_VARTABLE MODULE
    @interface
        String[] value() ;
        如果注解只有一个成员,则成员名必须取名为value(),使用时可以忽略成员名和赋值号
示例
  JDK内置的注解
    --没有成员的注解称为 标识注解
    import java.lang.annotation.*

    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.SOURCE)
    public @interface Override{
    }
  第三方框架的注解
   Spring
    @Service
      @Target({ElementType.TYPE})
      @Retention(RetentionPolicy.RUNTIME)
      @Documented
      @Component
      public @interface Service {
          String value() default "";
      }
   Junit
     @Test
       @Retention(RetentionPolicy.RUNTIME)
       @Target({ElementType.METHOD})
       public @interface Test {
           Class<? extends Throwable> expected() default Test.None.class;
           long timeout() default 0L;
           public static class None extends Throwable {
               private static final long serialVersionUID = 1L;
               private None() {
               }
           }
       }
02.注解的使用
  @
  作用二:
    自动处理源代码以产生更多的源代码-配置文件-脚本或者其他我们想要的东西
    例如-使用注解,根据模板来生成不同源码
03.注解的应用
RUNNING 中的情况
    DI容器
      DI的容器类-创建需要的对象并配置依赖关系
        使用代码
            SimpleContainer.getInstance(ServiceA.class).callB();
        底层代码:注解工具内部处理机制
            注解如何被处理的,在运行时的处理过程

2.Hibernate 注解

  Hibernate实现JPA注解
      pom.xml组件  hibernate-corehibernate-entitymanagerhibernate-validator
            hibernate-jpa-2.0-api
      配置文件 hibernate.cfg.xml
         数据库相关配置
         开发常用的参数
         会话相关配置
      配置对象关系映射关系有两种,一种是基于xml的方式,另一种是基于annotation的注解方式
  Hibernate三种类型
    类级别的注解: @Entity  @Table   @Embeddable
    属性级别注解: @Id@GeneratedValue@Column@Embedded@EmbeddedId@Transient

    映射关系注解: 一对一,一对多,多对多 @OneToOne @OneToMany(mappedBy="room") @ManyToOne 
                  单向、双向
                  外键连接 @JoinColumn
 @GeneratedValue提供了主键的生成策略,两个属性,分别是strategygenerator
   @GeneratedValue(strategy=GenerationType.IDENTITY)
     四种主键生成策略
     包括GenerationType.TABLE,
         GenerationType.SEQUENCE,
         GenerationType.IDENTITY
         GenerationType.AUTO
            主键生成策略交给持久化引擎(persistence engine),持久化引擎会根据数据库
            在以上三种主键生成策略中选择其中一种
            可以直接@GeneratedValue
 JAP<Java Persistence API>之间的关系
     import javax.persistence.EntityManager;
     import javax.persistence.FlushModeType;
     import javax.persistence.LockModeType;
     import javax.persistence.PersistenceContext;
     import javax.persistence.Query;
     import javax.persistence.TypedQuery;
     import javax.persistence.criteria.CriteriaBuilder;
     import javax.persistence.metamodel.EntityType;

3. Spring中的注解

工程结构
     底层数据库(具体数据的存储)
     ——>dao(实现从表中读数据)
     ——>domain(表与实体进行关联,进行实体的定义,set,get方法的定义)
     ——>service(逻辑的实现,进行数据关联,方便底层取数据)
     ——>controller(方便为前段提供数据)

   主容器中 applicationContext.xml
   定时器
   applicationContext-quartz
    org.springframework.scheduling.quartz
     定义quartz的配置文件applicationContext-quartz.xml

Spring MVC 中的常用注解
     import javax.annotation.Resource;
     import javax.annotation.Resources;
     import javax.annotation.Generated;
     import javax.annotation.PostConstruct;

     import org.springframework.stereotype.Repository;
     import org.springframework.stereotype.Service;
     import org.springframework.stereotype.Controller;
     import org.springframework.stereotype.Component;

     import org.springframework.context.annotation.Bean;
     import org.springframework.context.annotation.Configuration;
     import org.springframework.context.annotation.ComponentScan

     import org.springframework.beans.factory.annotation.Autowired;
     import org.springframework.beans.factory.annotation.Value;

     import org.springframework.web.bind.annotation.RequestParam;
     import org.springframework.web.bind.annotation.RequestHeader;
     import org.springframework.web.bind.annotation.RequestBody;
     import org.springframework.web.bind.annotation.RequestMethod;
     import org.springframework.web.bind.annotation.RequestMapping;
     import org.springframework.web.bind.annotation.Mapping;
     import org.springframework.web.bind.annotation.ResponseBody;
     import org.springframework.web.bind.annotation.ResponseStatus;
     import org.springframework.web.bind.annotation.SessionAttributes;

    1.说明
    01Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件
      @Component是用来标记任何被Spring管理的组件。泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
      @Controller用来标记presentation层(比如web controller)。
      @Repository用来标记persistence层(比如DAO)即标注数据访问组件
      @Service用来标记service层。标注业务层组件
      @Controller用于标注控制层组件(如struts中的action

    03.
    @RequestMapping 是一个用来处理请求地址映射的注解
    接受客户端传递过来的参数包括
      路径变量(url),内容变量(http body),头变量(header),COOKIE变量等几类。
      @PathVariable 注解,其用来获取请求路径(url )中的动态参数
Spring 装载bean
   通过( Applicatioon Context)应用上下文 进行组装

Spring MVC

特点
  01.DI实现软件组件的松耦合
  02.AOP 将功能分离出来形成可以重用的组件
  03.Spring不会强迫应用继承它们的类或者实现它们的接口,从而导致应用和框架绑死,即非侵入式
  04.Spring通过模板封装来消除样板式代码
Spring 容器
第一类:bean 工厂是最简单的容器,提供基本的 DI 支持;
第二类:应用上下文基于 BeanFactory 构建,并提供应用框架级别的服务
创建-组装-配置-管理
装配
1.自动装配
    1.组件扫描
      01.显示启用组件扫描
        通过注解的方式: @ComponentScan
        通过XML配置的方式:spring-context空间中 context:component-scan base-package="al"
    2.自动装配
      自动装配
        @Autowired
2.显示装配
Java装配
    01.创建配置类       @Configuration 表明这是一个配置类
    02.声明简单的bean   @Bean
    03.借助javaConfig实现注入    必要的java功能产生实例
XML装配
    01.创建XML文件
        以<beans>元素作为根
        声明一个bean <bean>
        注入初始化Bean <constructor-arg>
        设置属性<property>
3.混合装配
    在典型的Spring应用中,我们可能会同时使用自动化和显式配置

Spring Boot

1.起步依赖- 依赖管理 -- 
2.自动配置
  @SpringBootApplication: 开启组件扫描和自动配置功能
    将 @Configuration 、 @ComponentScan  @EnableAutoConfiguration
    分别是标明该类是基于Java的配置,启动组件扫描、开启自动配置
  3.在Spring Boot基础上调整
     01.起步依赖: 前置依赖
       示例:覆盖起步依赖引入的传递依赖  是在Maven中pom.xml调整 <exclusions>
     02.自动配置的调整
        基于条件化配置的特性。使用Spring Boot 提供的条件化注解
        使用显式配置进行覆盖
        使用属性进行精细化配置
4.Actuator  提供运行时检视应用程序内部情况的能力
5.常规的-内嵌的方式部署
      01.把项目启动这个任务直接委托给SpringApplication.run方法
      @SpringBootApplication
      public class DemoApplication {      
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
      }
   6.Tomcat部署-编码方式
     一个spring-boot项目想以外部的 tomcat部署 而不是内嵌的方式
      01.这个时候需要让spring-boot 入口类继承至 SpringBootServletInitializer 并重载configure方法,
      02. 并给项目的打包方式改为war,pom.xml 中设置  <packaging>war</packaging>
         packaging给出了项目的打包类型,即作为项目的发布形式,其可能的类型
      03.同时添加如下依赖:
      <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-tomcat</artifactId>
                  <scope>provided</scope>
       04.代码
           @SpringBootApplication
           public class DemoApplication extends SpringBootServletInitializer {       
               @Override
               protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
                   return application.sources(BillingApplication.class);
               }
               public static void main(String[] args) {
                   SpringApplication.run(DemoApplication.class, args);
               }
           }

blogroll

social