Book(6) Springboot实战

239 阅读4分钟
Spring框架的四大原则

(1)使用POJO进行轻量级和最小入侵式开发 (2)通过依赖注入和基于接口编程实现松耦合 (3)通过AOP和默认习惯进行声明式编程 (4)使用AOP和模板(template)减少模式化代码

依赖注入
  • @Component 声明Bean,没有明确的角色

  • @Service 声明Bean,在业务逻辑层使用

  • @Repository 声明Bean,在数据访问层(dao)使用

  • @Controller 声明Bean,在展现层使用

  • @Autowired Spring提供的注解,用于注入Bean

  • @Inject JSR-330 提供的注解

  • @Resource JSR-250提供的注解

  • @Configuration 声明当前是一个配置类,自动扫描包名下所有的@Service、@Component、@Repository、@Controller并注册为Bean

AOP
  • @Aspect 声明当前是一个切片
  • @After
  • @Before
  • @Around 声明切点
Bean的Scope
  • Singleton 一个Spring容器中只有一个Bean的实例
  • Prototype:每次调用新建一个Bean实例
  • Request:每次http request请求新建一个Bean实例
  • Session:每个http session 新建一个Bean实例
  • GlobalSession:追在portal应用中有用,没给一个global http session新建一个Bean实例
Bean的初始化和销毁
  • Java配置方式:通过@Bean的initMethod和destroyMethod
  • @PostConstruct
  • @PreDestroy
事件

Spring 的事件需要遵循以下流程

  • 自定义事件,继承ApplicationEvent
  • 定义事件监听器,实现ApplicationListener
  • 使用容器发布事件
多线程
  • @EnableAsync 开启对异步任务的支持,并通过在实际执行的Bean方法中使用@Async注解来声明其是一个异步任务
计划任务
  • @EnableScheduling 开启对计划任务的支持,然后在执行计划任务的方法上注解@Scheduled,声明这是一个计划任务。
条件注解@Conditional
  • @Conditional 根据满足某一个特定条件来创建一个特定的Bean。
组合注解与原注解
  • 原注解是可以注解到别的注解上的注解。
  • 被注解的注解称之为组合注解。
@Enable*注解的工作原理
  • @EnableAspectJAutoProxy 开启对AspectJ自动代理的支持
  • @EnableAsync 开启异步方法的支持
  • @EnableScheduling 开启计划任务的支持
  • @EnableWebMvc 开启对Web MVC的配置任务
  • @EnableconfigurationPropertities 开启对@ConfirgurationProperties 注解配置Bean的支持
  • @EnableJpaRepositories 开启对Spring Data JPA Repository的支持
  • @EnableTransactionManagement 开启对注解式事物的支持
  • @EnableCaching 开启注解式的缓存支持
Spring MVC的常用注解
  • @Controller 表明是一个Sping MVC的Controller,将其声明为Spring的一个Bean,Dispatcher Servlet会自动扫描注解了此注解的类,并将Web请求映射到@RequestMapping的方法上。
  • @RequestMapping 用来映射web请求
  • @ResponseBody 支持将返回值放在response体内,而不是返回一个页面。
  • @RequestBody 允许request的参数在request体内,而不是在直接链接在地址后面,此注解放在参数前。
  • @PathVariable 用来接受路径参数,放在参数前。
  • @RestController 是一个组合注解,组合了@Controller和@ResponseBody。
拦截器配置

可以让普通的Bean 实现 HandlerInterceptor接口或者HandlerInterceptorAdaptor类来实现自定义的拦截器。

@ControllerAdvice

通过@ControllerAdvice 可以将对于控制器的全局配置放置在同一个位置,注解了@Controller的类的方法,可以使用以下注解,注解到方法上

  • @ExceptionHandler 用于全局处理控制器里的异常
  • @InitBinder 用来设置WebDataBinder,WebDataBinder用来自动绑定前台请求参数到Model中 @ModelAttribute 本来的作用是绑定键值对到Model里,此处是让全局的@RequestMapping都能获得在此处设置的键值对。
SpringBoot
  • @SpringBootApplication 注解组合了@Configuration、@EnableAutoConfirguration、@ConponentScan
定制banner

可以在src/main/resources 下新建一个banner.txt

常规属性配置

可以在properties文件里的值,通过@PropertySource指明properties文件的位置,然后通过@Value注入

类型安全的配置(基于properties)
  • @ConfigurationProperties 通过@Value注入的方式注入每个配置,在实际项目中会显得格外麻烦,可以通过@ConfigurationProperties将properties属性和一个Bean及其属性关联,从而实现类型安全的配置
SpringBoot Data JPA
  • 常规查询 可以通过findBy Like And这样的关键词等简化查询
  • 限制数量 使用top和first关键词来实现
  • NamedQuery查询,即一个名称映射到一个查询语句。
  • 使用@Query查询 支持将@Query注解在接口的方法上实现查询,还支持@Modifyinng和@Query注解组合。更新查询。
  • 分页和排序 支持使用Sort类以及Page接口和Pageable接口来进行分页和排序
Spring Data REST

Spring Data JPA 是基于Spring Data 的repository之上,可将repository自动输入为REST资源。Spring Data REST支持将Spring Data JPA、Spring Data mongoDB、Spring Data Neo4j、Spring Data GemFire以及Spring Data Cassandra的repository自动转化为REST服务

声明式事务
  • @Transactional 通过此注解来开启对事务的支持