@SpringBootApplication:
包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解。其中@ComponentScan让pringBoot扫描到Configuration类并把它加入到程序上下文。
@Configuration:
指出该类是 Bean 配置的信息源,相当于XML中的
@EnableAutoConfiguration:
让 Spring Boot 根据应用所声明的依赖来对 Spring 框架进行自动配置,一般加在主类上。
@ComponentScan:
组件扫描。个人理解相当于
通常用在主类上。
@ImportResource注解(装载多个配置文件),
@EnableWebMvc 可以使用mvc
@MapperScan(basePackages = "com.hellowin.b2c.persistence.mapper")
早点的时间是直接在Mapper类上面添加注解@Mapper,这种方式要求每一个mapper类都需要添加此注解,比较麻烦。
现在通过使用@MapperScan可以指定要扫描的Mapper类的包的路径
@EnableCaching注解是spring framework中的注解驱动的缓存管理功能。自spring版本3.1起加入了该注解。如果你使用了这个注解,那么你就不需要在XML文件中配置cache manager了。
当你在配置类(@Configuration)上使用@EnableCaching注解时,会触发一个post processor,这会扫描每一个spring bean,查看是否已经存在注解对应的缓存。如果找到了,就会自动创建一个代理拦截方法调用,使用缓存的bean执行处理。
要实现计划任务,首先通过在配置类注解@EnableScheduling来开启对计划任务的支持,然后在要执行计划任务的方法上注解@Scheduled,声明这是一个计划任务。Spring通过@Scheduled支持多种类型的计划任务,包含cron、fixDelay、fixRate等。
@Component:
泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
@Component可配合CommandLineRunner使用,在程序启动后执行一些基础任务。
实际应用中,我们会有在项目服务启动的时候就去加载一些数据或做一些事情这样的需求。为了解决这样的问题,Spring Boot 为我们提供了一个方法,通过实现接口 CommandLineRunner 来实现。
@Repository:-->@Mapper
用于标注数据访问组件,即DAO组件。
@Service:
用于标注业务层组件。
@RestController:
用于标注控制层组件(如struts中的action),包含@Controller和@ResponseBody。
@Controller:注解在类上,表示这是一个控制层bean
@ResponseBody:
表示该方法的返回结果直接写入HTTP response body中
一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@responsebody后,会直接返回json数据。
@Bean:
相当于XML中的
@AutoWired:
byType方式。把配置好的Bean拿来用,完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。
当加上(required=false)时,就算找不到bean也不报错。
@Resource(name="name",type="type"):
没有括号内内容的话,默认byName。与@Autowired干类似的事。
@Resource默认按照名称方式进行bean匹配,@Autowired默认按照类型方式进行bean匹配
@Qualifier:
当有多个同一类型的Bean时,可以用@Qualifier("name")来指定。与@Autowired配合使用
@Autowired默认是根据类型进行注入的,因此如果有多个类型一样的Bean候选者,则需要限定其中一个候选者,否则将抛出异常
@Qualifier限定描述符除了能根据名字进行注入,更能进行更细粒度的控制如何选择候选者
@RequestMapping:
RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
该注解有六个属性:
params:指定request中必须包含某些参数值是,才让该方法处理。
headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。
value:指定请求的实际地址,指定的地址可以是URI Template 模式
method:指定请求的method类型, GET、POST、PUT、DELETE等
consumes:指定处理请求的提交内容类型(Content-Type),如application/json,text/html;
produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回
@Profiles
Spring Profiles提供了一种隔离应用程序配置的方式,并让这些配置只能在特定的环境下生效。
任何@Component或@Configuration都能被@Profile标记,从而限制加载它的时机。
@Configuration @Profile("prod") public class ProductionConfiguration { // ... }
@ConfigurationProperties
Spring Boot将尝试校验外部的配置,默认使用JSR-303(如果在classpath路径中)。
你可以轻松的为你的@ConfigurationProperties类添加JSR-303 javax.validation约束注解:
@Component @ConfigurationProperties(prefix="connection") public class ConnectionSettings { @NotNull private InetAddress remoteAddress; // ... getters and setters }
全局异常处理
@ControllerAdvice:包含@Component。可以被扫描到。统一处理异常。
@ExceptionHandler(Exception.class):
用在方法上面表示遇到这个异常就执行以下方法。
@Lazy(true): 延迟初始化
@WebServlet(name="Servlet3FirstDemo",value="/Servlet3FirstDemo")
@WebFilter将一个实现了javax.servlet.Filte接口的类定义为过滤器
第三方servlet:使用ServletRegistrationBean来注入servlet,对于每一个servlet都有一个ServletRegistrationBean来注入。
@Scope:注解在类上,描述spring容器如何创建Bean实例。
@ConfigurationProperties(prefix = "env")与@Component组合使用可以将application.properties文件中带env前缀的变量导入EnvConfig类中
public class EnvConfig {
private String online;
private String environment;
}
JPA注解
@Entity 标注用于实体类声明语句之前,指出该Java 类为实体类,将映射到指定的数据库表。如声明一个实体类 Customer,它将映射到数据库中的 customer 表上。
@Table当实体类与其映射的数据库表名不同名时需要使用 @Table 标注说明,该标注与 @Entity 标注并列使用,置于实体类声明语句之前,可写于单独语句行,也可与声明语句同行。
@Table(name="JPA_CUSTOMERS")//主要是映射表名对应的数据库表名JPA_CUSTOMER默认情况下可以不写表名与持久化类名相同 @Entity //表明这是一个持久化类
public class Customer {}
@Id 标注用于声明一个实体类的属性映射为数据库的主键列。该属性通常置于属性声明语句之前,可与声明语句同行,也可写在单独行上。 @Id标注也可置于属性的getter方法之前。
@GeneratedValue用于标注主键的生成策略,通过 strategy 属性指定。默认情况下,JPA 自动选择一个最适合底层数据库的主键生成策略:SqlServer 对应 identity,MySQL 对应 auto increment。 在 javax.persistence.GenerationType 中定义了以下几种可供选择的策略:
IDENTITY:采用数据库 ID自增长的方式来自增主键字段,Oracle 不支持这种方式;
AUTO: JPA自动选择合适的策略,是默认选项;
SEQUENCE:通过序列产生主键,通过 @SequenceGenerator 注解指定序列名,MySql 不支持这种方式
TABLE:通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。
@Basic表示一个简单的属性到数据库表的字段的映射,对于没有任何标注的 getXxxx() 方法,默认即为
@Basic fetch: 表示该属性的读取策略,有 EAGER 和 LAZY 两种,分别表示主支抓取和延迟加载,默认为 EAGER.
optional:表示该属性是否允许为null, 默认为true
6、@Column当实体的属性与其映射的数据库表的列不同名时需要使用@Column 标注说明,该属性通常置于实体的属性声明语句之前,还可与 @Id 标注一起使用。
@Column 标注的常用属性是 name,用于设置映射数据库表的列名。此外,该标注还包含其它多个属性,如:unique 、nullable、length 等。
@Column 标注的 columnDefinition 属性: 表示该字段在数据库中的实际类型.通常 ORM 框架可以根据属性类型自动判断数据库中字段的类型,但是对于Date类型仍无法确定数据库中字段类型究竟是DATE,TIME还是TIMESTAMP.此外,String的默认映射类型为VARCHAR, 如果要将 String 类型映射到特定数据库的 BLOB 或TEXT 字段类型.
@Column标注也可置于属性的getter方法之前
将看到的Spring Boot依赖记录下来;
下列dependency采用从父依赖继承版本的方式:Spring Boot 父依赖如下:
SpringBoot的依赖和其描述及其dependency:
1)名称 : spring-boot-starter
描述:核心Spring Boot starter ,包括自动配置支持,日志和YAML;
2)名称 :spring-boot-starter-actuator
描述:生产准备的特性,用于帮你监控和管理应用;
pom:
3)名称 :spring-boot-starter-amqp
描述:对高级消息队列协议的支持,通过spring-rabbit实现;
pom:
4)名称 :spring-boot-starter-aop
描述:对面向切面变成的支持,通过spring-aop和AspectJ
pom:
5)名称 :spring-boot-starter-batch
描述:对Spring batch 的支持,包括HSQLDB数据库
pom:
6)名称 :spring-boot-starter-cloud-connection
描述:对Spring Cloud Connection的支持,简化在云平台下(例如,Cloud Foundry和Heroku)服务的连接;
7)名称 :spring-boot-starter-elasticsearch
描述:对Elasticsearche搜索和分析引擎的支持,包括spring-data-elasticsearch;
8)名称 :spring-boot-starter-data-gemfire
描述:对GemFire分布式数据存储的支持,包括spring-data-gemfire;
pom:
9)名称 :spring-boot-starter-data-jpa
描述:对java持久化API的支持,包括Spring-data-jpa,spring-orm和Hibernate;
pom:
10)名称 :spring-boot-starter-data-mongodb
描述:对MongoDB NOSQL数据库的支持,包括spring-data-mongodb;
pom:
11)名称 :spring-boot-starter-data-rest
描述:通过对REST暴露Spring data仓库的支持,通过spring-data-rest-webmvc实现;
pom:
12)名称 :spring-boot-starter-data-solr
描述:对Apache Solr搜索平台的支持,包括spring-data-solr;
pom:
13)名称 :spring-boot-starter-freemaker
描述:对FreeMarker模板引擎的支持;
pom:
14)名称 :spring-boot-starter-Groovy
描述:对Groovy模板引擎的支持;
15)名称 :spring-boot-starter-hateoas
描述:对基于HATEOAS的RESTful服务的支持,通过spring-hateoas;
pom:
16)名称 :spring-boot-starter-integration
描述:对普通spring-integration模块的支持;
pom:
17)名称 :spring-boot-starter-hornetq
描述:对”java消息服务API”的支持,通过HornetQ实现;
18)名称 :spring-boot-starter-jdbc
描述:对JDBC数据库的支持;
pom:
19)名称 :spring-boot-starter-jersey
描述:对Jersey RESTful Web服务框架的支持;
pom:
20)名称 :spring-boot-starter-jta-atomikos
描述:对JTA分布式事务的支持。通过Atomikos实现;
pom:
21)名称 :spring-boot-starter-jta-bitronix
描述:对JTA分布式事务的支持,通过Bitronix实现;
pom:
22)名称 :spring-boot-starter-mail
描述:对javax.mail的支持;
pom:
23)名称 :spring-boot-starter-mobile
描述:对spring-mobile的支持;
pom:
24)名称 :spring-boot-starter-redis
描述:对REDIS键值数据存储的支持,包括Spring-redis;
25)名称 :spring-boot-starter-security
描述:对spring -security模板引擎的支持;
pom:
26)名称 :spring-boot-starter-social-facebook
描述:对spring-social-facebook的支持;
pom:
27)名称 :spring-boot-starter-social-twitter
描述:对spring-social-twitter的支持;
pom:
28)名称 :spring-boot-starter-test
描述:对常用测试依赖的支持,包括JUnit,Hamcrest和Mockito还有spring-test模块;
pom:
29)名称 :spring-boot-starter-thymeleaf
描述:对Thymeleaf模板引擎的支持,包括和Spring的集成;
pom:
30)名称 :spring-boot-starter-velocity
描述:对velocity模板引擎的支持;
31)名称 :spring-boot-starter-web
描述:对全栈web开发的支持,包括Tomcat和spring-webmvc;
pom:
32)名称 :spring-boot-starter-websocket
描述:对websocket开发的支持;
pom:
33)名称 :spring-boot-starter-ws
描述:对Spring web服务的支持;
最后,Spring Boot包含一些可用于排除或交换具体技术方面的starters;
34)名称 :spring-boot-starter-jetty
描述:导入Jetty HTTP引擎(作为Tomcat的代替);
pom:
35)名称 :spring-boot-starter-logging
描述:对Log4J日志系统的支持;
pom:
36)名称 :spring-boot-starter-logging
pom:
37)名称 :spring-boot-starter-tomcat
描述:导入SpringBoot的默认HTTP引擎(Tomcat);
pom:
38)名称 :spring-boot-starter-undertow
描述:导入Undertow HTTP引擎(作为tomcat的代替);
pom: