关于注解的使用(持续更新...)

关于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)

猜你喜欢

转载自blog.csdn.net/u011391773/article/details/52470712