【Spring-IOC相关】
注解 | xml | 说明 |
---|---|---|
@Component父注解 @Controller:用于响应层的注解 @Service:用于业务层的注解 @Repository:一般用于持久层的注解 | < bean id="" class=""> | 声明bean交于springIOC管理 |
@Scope | scope=“singleton/prototype” | 生命周期 |
@PostConstruct | init-method | 初始化方法 |
@PreDestroy | destroy-method | 销毁方法 |
【Spring-DI相关】
注解 | xml | 说明 |
---|---|---|
@Autowired、@Qualifier | ref=“类型” | 默认按照bean的类型注入数据 |
@Resource | ref=“类型” | 默认按照bean的名称注入数据 |
@Value | ref=“基础数据类型” | 给基本数据类型赋值 |
【Spring-AOP相关】
注解 | xml | 说明 |
---|---|---|
@Aspect | <aop:aspect > | 声明切面 |
@Before | <aop:before > | 前置通知 |
@AfterReturning | <aop:after-returning > | 后置正常通知 |
@AfterThrowing | <aop:after-throwing > | 后置异常通知 |
@After | <aop:after > | 最终通知 |
@Around | <aop:around > | 环绕通知 |
【Spring-TX相关】
@Transactional
@Transactional 注解可以作用于接口、接口方法、类以及类方法上,但是 Spring 建议不要在接口或者接口方法上使用该注解,因为这只有在使用基于接口的代理时它才会生效。另外, @Transactional 注解应该只被应用到 public 方法上,这是由 Spring AOP 的本质决定的。如果你在 protected、private 或者默认可见性的方法上使用 @Transactional 注解,这将被忽略,也不会抛出任何异常。
【属性】
属性 | 类型 | 说明 |
---|---|---|
value | String | 可选的限定描述符,指定使用的事务管理器 |
propagation | enum: Propagation | 可选的事务传播行为设置 |
isolation | enum: Isolation | 可选的事务隔离级别设置 |
readOnly | boolean | 读写或只读事务,默认读写 |
timeout | int (in seconds granularity) | 事务超时时间设置 |
rollbackFor | Class对象数组,必须继承自Throwable | 导致事务回滚的异常类数组 |
rollbackForClassName | 类名数组,必须继承自Throwable | 导致事务回滚的异常类名字数组 |
noRollbackFor | Class对象数组,必须继承自Throwable | 不会导致事务回滚的异常类数组 |
noRollbackForClassName | 类名数组,必须继承自Throwable | 不会导致事务回滚的异常类名字数组 |
【Spring-JUNIT相关】
注解 | 说明 |
---|---|
@RunWith | 指定使用SpringJUnit4ClassRunner |
@ContextConfiguration | 指定加载配置文件 |
【Spring-MVC相关】
注解 | 说明 |
---|---|
@RequestMapping | 配置映射地址 |
@GetMapping | 配置映射地址GET:得到资源 |
@PutMapping | 配置映射地址PUT:修改整体内容 |
@PostMapping | 配置映射地址POST:新增内容 |
@DeleteMapping | 配置映射地址DELETE:删除内容 |
@PatchMapping | 配置映射地址PATCH:修改部分内容 |
@PathVariable | 绑定URL中的参数值 |
@RequestParam | 绑定单个请求数据,既可以是URL中的参数,也可以是表单提交的参数 |
@RequestBody | 请求参数格式为json |
@RestController | 注释在类上,生命一个bean,且表示此类中返回类型都是json(@Controller+@ResponseBody) |
@ResponseBody | 注解在方法上,表示此方法返回类型为json |
@ExceptionHandler | 异常处理 |
@ControllerAdvice | 对controller层进行增强 |
【配置类相关】
注解 | XML | 说明 |
---|---|---|
@Configuration | / | 声明此类为配置类 |
@EnableAspectJAutoProxy | <aop:aspectj-autoproxy > | 开启AOP |
@EnableTransactionManagement | <tx:annotation-driven > | 开启事务管理器 |
@EnableWebMvc(*) | <mvc:annotation-driven > | 开启springMVC |
@PropertySource | <context:property-placeholder > | 导入外部配置 |
@MapperScan(*) | / | mybatis的扫描配置 |
@Bean | < bean > | 声明bean |
@ComponentScan | <context:component-scan > | 扫描配置 |
java config是指基于java配置的spring。传统的Spring一般都是基本xml配置的,后来spring3.0新增了许多java config的注解,特别是spring boot,基本都是清一色的java config。
考虑使用JavaConfig替代XML配置
对于总是固执地使用Spring的XML配置方式,同事们总是讥讽我。是的,这看起来太二太过时了,不过XML还是有它的优势:
1.集中式配置。这样做不会将不同组件分散的到处都是。你可以在一个地方看到所有Bean的概况和他们的装配关系。
2.如果你需要分割配置文件,没问题,Spring可以做到。它可以在运行时通过标签或者上Context文件对分割的文件进行重新聚合。
3.相对于自动装配(autowiring),只有XML配置允许显示装配(explicit wiring)
4.最后一点并不代表不重要,XML配置完全和JAVA文件解耦:两种文件完全没有耦合关系,这样的话,类可以被用作多个不同XML配置文件。
XML唯一的问题是,只有在运行时环境时你才能发现各种配置,但是如果使用Spring IDE Plugin(或者STS)的话,它会在编码时提示这些问题。
在XML配置和直接注解式配置之外还有一种有趣的选择方式-JavaConfig,它是在Spring 3.0开始从一个独立的项目并入到Spring中的。它结合了XML的解耦和JAVA编译时检查的优点。JavaConfig可以看成一个XML文件,只不过是使用Java编写的。相关文档在官方网站是可以找到的.