1、@Controller: 标注展示层组件(Bean),但是目前该功能与 @Component 相同,用来创建处理http请求的对象
   Spring4之后加入的注解,原来在@Controller中返回json需要@ResponseBody来配合,如果直接用@RestController替代@Controller就不需要再配置@ResponseBody,默认
返回json格式
1.1)@RequestMapping
    类定义处: 提供初步的请求映射信息,相对于 WEB 应用的根目录。方法处: 提供进一步的细分映射信息,相对于类定义处的 URL。
    示列1:
    @Controller
    @RequestMapping("/fourthPage")
    public class FourthPageController extends CommonController {}
    
    示列2:包含.do,当访问路径中不包含.do后缀时,会报错404
    @RequestMapping(value = "/getLogo.do")
    @ResponseBody
    public void getLogo(HttpServletRequest request,HttpServletResponse response) throws IOException {}
    
    示列3:不包含do
    @RequestMapping(value = "/ajax/itemParameter/{partNumber:[\\d]+}_{cateGoryCode}","/ajax/itemPackageDetail/{supplierCode:[\\d]+}/{partNumber:[\\d]+}"})
    public String itemParameter(@RequestParam(value = "callback", required = false) String callback,
                                @PathVariable("partNumber") String partNumber,
                                @PathVariable("cateGoryCode") String cateGoryCode,
                                @RequestParam(value = "channel", required = false) String channel,
                                HttpServletResponse response) {

分析:
    a. @RequestMapping使用正则表达式
    @RequestMapping(value = "/ajax/itemParameter/{partNumber:[\\d]+}_{cateGoryCode}")
    partNumber:[\\d]+  表示:partNumber的传值必须是数字,匹配一次或多次,若果不是
    b. @RequestMapping中的value为2个请求,表示两个不同的请求共用该一个方法
   
1.2)@RequestParam
    用于将请求参数区数据映射到功能处理方法的参数上,如果接口传递过来的参数名和接收的不一致,可以可以用如下的方式进行接收。
    payWay 就是接口传递的参数,channel 就是映射 payWay 的参数名
    @RequestMapping(value = "/itemInfo.do")
    @ResponseBody
    public String itemParameter(@RequestParam(value = "payWay", required = false) String channel){
    
    }

1.3)@ModelAttribute
    示列1:用在有返回的方法上:
    当ModelAttribute设置了value,方法返回的值会以这个value为key,以参数接受到的值作为value,存入到Model中,如下面的方法执行之后,最终相当于 model.addAttribute("user_name", name);
    假如 @ModelAttribute没有自定义value,则相当于model.addAttribute("name", name);

@ModelAttribute(value="user_name")
    public String itemParameter(@RequestParam(value = "channel", required = false) String name,Model model,HttpServletResponse response) {
        return name;
    }
    示列2:用在没返回的方法上,需要手动增加model.addAttribute()方法
    @ModelAttribute
    public String itemParameter(@RequestParam(value = "channel", required = false) String name,Model model,HttpServletResponse response) {
        model.addAttribute("name",name);
    }
    示列3:标记在方法的参数上
    会将客户端传递过来的参数按名称注入到指定对象中,并且会将这个对象自动加入ModelMap中,便于View层使用.
    @RequestMapping(value = {"/ajax/itemPackageDetail/{partNumber:[\\d]+}","/ajax/itemPackageDetail/{supplierCode:[\\d]+}/{partNumber:[\\d]+}"})
    public String queryPackageDetail(@RequestParam(value = "callback", required = false) String callback,
                                     @PathVariable("partNumber") String partNumber,
                                     @ModelAttribute("supplierCode") String supplierCode,
                                     @RequestParam(value = "channel", required = false) String channel,
                                     HttpServletResponse response) {}
                                        
    
1.4)@PathVariable("partNumber")
    通过 @PathVariable 可以将URL中占位符参数{partNumber}绑定到处理器类的方法形参中@PathVariable(“partNumber“)
    备注:参看文章 https://mp.weixin.qq.com/s/wImduUsyy0dG0ZawmZab4g

2)@Service:    标注业务层组件(Bean),但是目前该功能与 @Component 相同
    示列:
    @Service("productSearchService")
    @Implement(contract = ProductSearchService.class)
    public class ProductSearchServiceImpl implements ProductSearchService {
        @Autowired
        @Qualifier("jedisClient")
        private JedisClientImpl jedisClient;
        
        @Autowired
        private CategoryBusiness                      categoryBusiness;
        
    }

3)@Repository: 标注存储层组件(Bean)
   import org.springframework.stereotype.Repository;
   为了让 Spring 能够扫描类路径中的类并识别出 @Repository 注解,需要在 XML 配置文件中启用Bean 的自动扫描功能,这可以通过<context:component-
   scan/>实现
   
   @Repository 只能标注在 DAO 类上呢?这是因为该注解的作用不只是将类识别为Bean,同时它还能将所标注的类中抛出的数据访问异常封装为 Spring
   的数据访问异常类型。Spring本身提供了一个丰富的并且是与具体的数据访问技术无关的数据访问异常结构,用于封装不同的持久层框架抛出的异常,使得异
   常独立于底层的框架。
   示列:
   @Repository
   public class CmmdtySpecialInfoBusiness {
        @Autowired
        DalClient dalClient;
        
        @Autowired
        @Qualifier("cmmdtyDalClientRead")
        protected DalClient cmmdtyDalClientRead;    
   }
  
4)@Component 是一个泛化的概念,仅仅表示一个组件 (Bean) ,可以作用在任何层次   
   
5)@Transactional 通常添加在service层
        a.所谓事务是指一组逻辑操作单元即一组sql语句。当这个单元中的一部分操作失败,整个事务回滚,只有全部正确才完成提交。判断事务是否配置成功
    的关键点在于出现异常时事务是否会回滚。
        b.如果我们的事务注解@Transactional加在dao层,那么只要与数据库做增删改,就要提交一次事务,如此做事务的特性就发挥不出来,尤其是事务的
    一致性,当出现并发问题是,用户从数据库查到的数据都会有所偏差。一般的时候,我们的service层可以调用多个dao层,我们只需要在service层加一个事务
    注解@Transactional,这样我们就可以一个事务处理多个请求,事务的特性也会充分的发挥出来。

6)@Qualifier注解
        qualifier的意思是合格者,通过这个标示,表明了哪个实现类才是我们所需要的。当EmployeeService接口有两个serviceImp类service1 和service2时
    如果使用@Autowired对EmployeeService进行注入时,spring会因为不知道该绑定哪个实现类而报错。需要使用@Qualifier进行区分
        示列:
        @Autowired
        @Qualifier("service1")
        EmployeeService employeeService;
    
7)@Autowired和@Resource区别:
        a. @Autowired 是spring提供的注释,默认按byType注入。byName需要与@Qualifier("对象名")连用
        用来装配bean,可以写在字段上,或者方法上。默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,
        例如:@Autowired(required=false)

b. @Resource 是JAVA2EE提供的,同时支持byType和byName注入,默认按byName注入,如果默认情况下找不到就按类型找(name属性解析为bean的名字,
        而type属性则解析为bean的类型,如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略)
    推荐使用:@Resource注解在字段上,这样就不用写setter方法了,并且这个注解是属于J2EE的,减少了与spring的耦合。这样代码看起就比较优雅。一般常用@Autowired
        示列:
            @Resource(name = "auditOrderSubmitServiceImpl")
            private OrderSubmitService<OrderInfo> auditOrderSubmitServiceImpl;
            
            @Autowired
            private OrderSubmitBusiness orderSubmitBusiness;
            
            public abstract class CommonBusiness {
                /** 用于增加、修改、删除、合并操作 */
                @Resource
                @Qualifier("dalClient")
                protected DalClient dalClient;
                /** 用于查询操作 */
                @Resource
                @Qualifier("dalClientRead")
                protected DalClient dalClientRead;
            }
    @Resource装配顺序:
    a.如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
    b.如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
    c.如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
    d.如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;
   
8)@Scope 用来配置 spring bean 的作用域,它标识 bean 的作用域。默认值是单例
    a.singleton:单例模式,全局有且仅有一个实例
    b.prototype:原型模式,每次获取Bean的时候会有一个新的实例
    c.request:request表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效
    d.session:session作用域表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效
    e.global session:只在portal应用中有用,给每一个 global http session 新建一个Bean实例

十、Spring中常用注解-分层整理的更多相关文章

  1. Spring 中常用注解原理剖析

    前言 Spring 框架核心组件之一是 IOC,IOC 则管理 Bean 的创建和 Bean 之间的依赖注入,对于 Bean 的创建可以通过在 XML 里面使用 <bean/> 标签来配置 ...

  2. Spring中常用注解的介绍

    spring中使用注解时配置文件的写法: <?xml version="1.0" encoding="UTF-8"?> <span style ...

  3. Spring中常用注解

    1.@Component 创建类对象,相当于配置<bean/> 2.@Service @Service与@Component功能相同,写在ServiceImpl类上 3.@Reposito ...

  4. 0000 - Spring 中常用注解原理剖析

    1.概述 Spring 框架核心组件之一是 IOC,IOC 则管理 Bean 的创建和 Bean 之间的依赖注入,对于 Bean 的创建可以通过在 XML 里面使用 <bean/> 标签来 ...

  5. Spring -13 -Spring 中常用注解总结

    1.@Component 创建类对象,相当于配置<bean/> 2.@Service 与@Component 功能相同. 2.1都写在ServiceImpl 类上. 3.@Reposito ...

  6. spring 以及 spring mvc 中常用注解整理

    spring 以及 spring mvc 中常用注解整理 @RequestMapping(映射路径) @Autowired(注入 bean 对象) 例如: @Autowired private Bas ...

  7. spring注解开发中常用注解以及简单配置

    一.spring注解开发中常用注解以及简单配置 1.为什么要用注解开发:spring的核心是Ioc容器和Aop,对于传统的Ioc编程来说我们需要在spring的配置文件中邪大量的bean来向sprin ...

  8. Spring/SpringBoot常用注解总结

    转自:[Guide哥] 0.前言 可以毫不夸张地说,这篇文章介绍的 Spring/SpringBoot 常用注解基本已经涵盖你工作中遇到的大部分常用的场景.对于每一个注解我都说了具体用法,掌握搞懂,使 ...

  9. Spring Boot常用注解总结

    Spring Boot常用注解总结 @RestController和@RequestMapping注解 @RestController注解,它继承自@Controller注解.4.0之前的版本,Spr ...

随机推荐

  1. MongoDB高可用集群配置方案

    原文链接:https://www.jianshu.com/p/e7e70ca7c7e5 高可用性即HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非 ...

  2. servlet中Request与response使用

    服务器根据请求自动创建传入HttpServletRequest对象和HttpServletResponse对象 @Override protected void service(HttpServlet ...

  3. echarts制作html和JavaScript的时钟和代码分析与注释

    1.效果图 2.说明: 2.1 代码是大神制作的,我进行修改,感谢大神,原创属于他. 2.2 我对代码进行分析.注释.整理,增加代码的可读性. 2.3 通过上述自己的工作,自己也能熟悉相关的JavaS ...

  4. SpringMvc中文件的上传

    本文转自:http://www.cnblogs.com/fjsnail/p/3491033.html 三个方法没有都测试,先get再说 第一个方法慢不知道是不是因为写的代码是按字节读取的,没有用Buf ...

  5. Go第三方库之tail

    Tail Demo // tail.TailFile()函数开启goroutine去读取文件,通过channel格式的t.lines传递内容. t, err := tail.TailFile(&quo ...

  6. STL总结 (C++)

    一.一般介绍 STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库.它被容纳于C++标准程序库(C++ Standard Library ...

  7. ARM架构安装Anaconda3出现错误:cannot execute binary file: Exec format error

    ARM架构安装Anaconda3出现错误:cannot execute binary file: Exec format error 原因是:安装包格式不对. 在Anaconda官网上只有x86(32 ...

  8. django template 模板

    九.Template模板 Template 模板是根据view传过来数据在html展示的功能,典型python 模板jinjia2库提供丰富的上下文展示func 创建template位置在项目下与ap ...

  9. 手码两万余字,SpringMVC 包教包会

    1. SpringMVC 简介 1.1 Spring Web MVC是什么 Spring Web MVC 是一种基于 Java 的实现了 Web MVC 设计模式的请求驱动类型的轻量级 Web 框架, ...

  10. 为什么要使用wsgi协议

    一个cs模型是由服务器和客户端组成,大多相互情况下也就是服务器端和浏览器之间的通信.通过浏览器请求服务器,然后服务器再响应浏览器. 那么如果浏览器想要请求一个python文件,例如http://127 ...