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 通过此注解来开启对事务的支持