关于spring的一些注解使用
@Controller 注解:代表mvc中的c,spring启动或web启动的时候,会扫描整个包。其注解是为了告诉系统,这是一个Controller,可以用于接收用户的请求,处理一系列的逻辑操作。配置在spring—mvc.xml中。
<context:component-scan base-package="com.test.demo" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
<context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
</context:component-scan>
@RestController 注解:原文@RestController is a stereotype annotation that combines @ResponseBody and @Controller(我们可以理解为,restcontroller就是@ResponseBody和@Controller的结合)
@Service 注解:标注业务层的组件,我们可以理解为在扫描的时候生成一个bean。告诉系统我是一个服务
@Component 注解:作用与@Controller、@Service、@Repository类似,是一个泛化的概念,可以运用至任何层。
@RequestMapping 注解:这是一个样式映射,用于告诉
@Controller
@RequestMapping("/test")
public class RelativePathUriTemplateController {
@Autowired
private DemoService demoService;
@RequestMapping("/demo",method=RequestMethod.POST)
public @ResponseBody User demo(@RequestParam String name) {
// implementation omitted
}
@RequestMapping("/demo/test1",method=RequestMethod.POST)
public @ResponseBody User demo1(@RequestBody User us) {
// implementation omitted
}
}
@RequestParam @RequestBody @Autowired @Qualifier注解:
@RequestParam是处理简单类型的绑定,通过Request.getParameter() 获取的String可直接转换为简单类型的情况,官方解释(@RequestParam注解参数获得与特定的Servlet请求参数。参数值转换为声明的方法参数类型。这个注释指示方法参数应绑定到web请求参数。);
@RequestBody则是将参数绑定到一个类上,@RequestBody注解参数获取链接到HTTP请求主体。参数值转换为使用HttpMessageConverters声明的方法参数类型。此注释指示方法的参数应该绑定到Web请求的主体。
@Autowired 注解:自动注入,可以对成员变量、方法和构造函数进行标注,来完成自动装配的工作。可以消除get/set方法
@Qualifier 注解:在使用Spring框架中@Autowired标签时默认情况下使用 @Autowired 注释进行自动注入时,Spring 容器中匹配的候选 Bean 数目必须有且仅有一个。当找不到一个匹配的 Bean 时,Spring 容器将抛BeanCreationException 异常,并指出必须至少拥有一个匹配的 Bean。Spring 允许我们通过 @Qualifier 注释指定注入 Bean 的名称,用以消除歧义,所以 @Autowired 和 @Qualifier 结合使用时,自动注入的策略就从 byType 转变成 byName 。
@Transactional 注解:这是spring的事务注解。对于事务:一组业务整体处理的行为叫一个事务。这一组的业务都能成功处理,我们就可以把这个事务提交来保存你已做的行为结果。但如果一组中有任何的差错出现的话,我们就认为这事务不成功,需要回滚来撤消之前的操作。举例,转账的时候要填写转账信息和输入自己的密码,中间任何一个环节出错都不能成功。在对于数据库的操作,加上事务可以保证一定的安全。
// 指定回滚
@Transactional(rollbackFor=Exception.class)
public void methodName() {
// 不会回滚
throw new Exception("...");
}
//指定不回滚
@Transactional(noRollbackFor=Exception.class)
public ItimDaoImpl getItemDaoImpl() {
// 会回滚
throw new RuntimeException("注释");
}
// 如果有事务,那么加入事务,没有的话新建一个(不写的情况下)
@Transactional(propagation=Propagation.REQUIRED)
// 容器不为这个方法开启事务
@Transactional(propagation=Propagation.NOT_SUPPORTED)
// 不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务
@Transactional(propagation=Propagation.REQUIRES_NEW)
// 必须在一个已有的事务中执行,否则抛出异常
@Transactional(propagation=Propagation.MANDATORY)
// 必须在一个没有的事务中执行,否则抛出异常(与Propagation.MANDATORY相反)
@Transactional(propagation=Propagation.NEVER)
// 如果其他bean调用这个方法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务.
@Transactional(propagation=Propagation.SUPPORTS)
@Transactional(propagation=Propagation.NESTED)
// readOnly=true只读,不能更新,删除
@Transactional (propagation = Propagation.REQUIRED,readOnly=true)
// 设置超时时间
@Transactional (propagation = Propagation.REQUIRED,timeout=30)
// 设置数据库隔离级别
@Transactional (propagation = Propagation.REQUIRED,isolation=Isolation.DEFAULT)