声明:以下观点,纯依据个人目前的经验和理解,有不当之处,多指教!

一、基本概述

注解(Annotation):也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。

首先,根据用途划分,可以简单的分为元注解和一般注解,其中元注解包括四个大类:1.@Target,2.@Retention,3.@Documented,4.@Inherited。这几个注解是用来解释其他一般注解的。那么一般注解,就是我们常用的注解。比如:spring注解@controller等

其次,根据范围划分(从大到小),我则把注解分为4类:1,J2EE注解;2,EJB注解;3,spring注解; 4,用户自定义注解。其中EJB和spring的划分,我则是根据查到资料所显示的各自可使用的范围,据说(本人无力考证),EJB为所有主要的J2EE支持!

二、具体注解应用

再次强调说明,本文所列的几个注解,并不是以好坏区分,而是自己最近常用的,但是在概念上有所模糊的!

1,spring的分层注解

@Controller 控制层 @Service 服务层 @Repository 持久层 @Component泛指组件,当组件不好归类的时候,可以使用这个注解进行标注(我一般用这个注解工具类,一般!有时也单独抽象出一个子工程负责整个工程的公共类部分)

使用Controller注解,则对应到之前的配置文件生成:

<bean id="" class="" />

2,对象注解

@Autowired:采用类型的方式完成自动装配

@Resource:采用名称+类型的方式完成自动装配(比较保险)

区别是什么呢?先看下面的注入:

<pre name="code" class="java"><span style="font-family:KaiTi_GB2312;font-size:18px;"><bean id="userDao" class="cn.itcast.shop.user.dao.UserDao">
<property name="sessionFactory" ref="sessionFactory"/>
</bean></span>

在这句代码里面,我们通过id=userDao注入了一个UserDao类,当我们在用的时候,我们通常写:

<span style="font-family:KaiTi_GB2312;font-size:18px;">private UserDao userDao;  

    public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}</span>

不知道大家有没有发现,我们每次写的private UserDao userDao后面的实例名称,总是和我们在配置文件注入的时候是一样的(至少我有时候因为名称不对应,结果报错了)。采用类型和名称的区别就在于:当采用名称进行装配的时候,在你用到这个实例的时候,所使用的名称一定要相同。在注解上面则表示为:@Service(value="userService"),那么在使用这个Service的时候,则必须和这个名称对应。它会去容器里面找userService这个名称,然后找到这个名称所对应的类,如果没有,则属性值为null。但是,如果是采用类型装配的话,它找的就是cn.itcast.shop.user.dao.UserDao这个类。

3,@ResponseBody

spring还有很多注解,但我都不想说了。最后再说一个@ResponseBody注解(应用于controller)。这个注解是什么呢,就是当你引入了Jackson这个jar包的时候,再使用这个注解,SpringMVC就可以自动将它所修饰的方法的返回值转换为json格式,从而不需要人为的去转换!

PS:传说中,这个注解加上那个jar包,可以完美的将所有Java对象转换为json格式!

4,其他

EJB注解:说实在的,这个注解我比较少用,用到的几次,就是使用注解,进行EJB远程调用,不是很清楚,只是当时查的时候才知道@EJB这个东西不属于spring的注解,我以为是。不太理解,不瞎说!

J2EE注解:如2中所示的,@Resource则属于J2EE注解,而@Autowired则是spring提供的注解!

三、总结

事实上,我还是不太清楚,这每一种注解到底它的应用场景是什么。有时候挺迷惑的,但是,我一直在路上,总会明白的。好了,到了复制粘贴的时候了(这回粘自家人的言论),为什么使用注解呢?注解可以使我们的代码看起来更简洁,而且在一定程度上解除了类原有特性和扩展特性之间的耦合。

【SSM 2】spring常用注解的更多相关文章

  1. Spring系列之Spring常用注解总结

    传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点:1.如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大:如果按需求分开.xml文件 ...

  2. Spring常用注解介绍【经典总结】

    Spring的一个核心功能是IOC,就是将Bean初始化加载到容器中,Bean是如何加载到容器的,可以使用Spring注解方式或者Spring XML配置方式. Spring注解方式减少了配置文件内容 ...

  3. Spring常用注解总结

    转载自:https://www.cnblogs.com/xiaoxi/p/5935009.html 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点 ...

  4. Spring注解 系列之Spring常用注解总结

    参考:Spring系列之Spring常用注解总结 (1) Resource 默认是byName的方式进行bean配置,@AutoWired默认是按照byType的方式进行装配bean的:(2)Comp ...

  5. Spring系列之Spring常用注解总结 转载

    Spring系列之Spring常用注解总结   传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点:1.如果所有的内容都配置在.xml文件中,那么.x ...

  6. spring常用注解笔记

    spring常用注解解释: 1. Mybatis的映射文件xxxMapper.xml中resultMap标签的作用 resultMap标签是为了映射select查询出来结果的集合,其主要 作用是将实体 ...

  7. SpringBoot+Spring常用注解总结

    为什么要写这篇文章? 最近看到网上有一篇关于 SpringBoot 常用注解的文章被转载的比较多,我看了文章内容之后属实觉得质量有点低,并且有点会误导没有太多实际使用经验的人(这些人又占据了大多数). ...

  8. Spring常用注解汇总

    本文汇总了Spring的常用注解,以方便大家查询和使用,具体如下: 使用注解之前要开启自动扫描功能 其中base-package为需要扫描的包(含子包). <context:component- ...

  9. Spring常用注解,自动扫描装配Bean

    1 引入context命名空间(在Spring的配置文件中),配置文件如下: xmlns:context="http://www.springframework.org/schema/con ...

随机推荐

  1. Android控件— — —ImageView

    <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=" ...

  2. 【LeetCode OJ】Path Sum II

    Problem Link: http://oj.leetcode.com/problems/path-sum-ii/ The basic idea here is same to that of Pa ...

  3. PHP正则表达式的快速学习方法

    1.入门简介 简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具.我们可以在几乎所有的基于UNIX系统的工具中找到正则表达式的身影,例如,vi编辑器,Perl或PHP脚本语言,以及awk或 ...

  4. 字体Unicode编码

    客专家福利     有奖试读&征文——我们在互联网上奋斗的故事      10月推荐文章汇总      加入“技术热心人”,赢丰厚奖品 html-中文字体在CSS中的显示(Unicode编码) ...

  5. spring整合hibernate配置文件

    Spring对hibernate配置文件hibernate.cfg.xml的集成,来取代hibernate.cfg.xml的配置 spring对hibernate配置文件hibernate.cfg.x ...

  6. C# 多线程同步和线程通信

    多线程通信 1. 当线程之间有先后的依赖关系时,属于线程之间的通信问题.也就是后一个线程要等待别的一个或多个线程全部完成,才能开始下一步的工作.可以使用: WaitHandle Class WaitH ...

  7. HTTP协议(缓存机制Cache)

    HTTP的缓存 至于响应消息的实体,与请求消息的实体内容相似,这里只借绍下User-Agent头 User-Agent头域的内容包含发出请求的用户信息. Cache-Control头域(请求和应答通用 ...

  8. C语言实现简单线程池(转-Newerth)

    有时我们会需要大量线程来处理一些相互独立的任务,为了避免频繁的申请释放线程所带来的开销,我们可以使用线程池.下面是一个C语言实现的简单的线程池. 头文件: 1: #ifndef THREAD_POOL ...

  9. Solidworks安装界面是英文的解决办法

    [问题描述] 一样的安装文件,同事之前安装界面就是中文的,安装好以后软件也是中文的. 这几天系统挂了,重装系统后就发现安装界面是英文的,安装好以后也是英文. win7系统,位数不详,solidwork ...

  10. Linux之Qt利用Sqlite静态编译库(转)

    参考:http://www.linuxidc.com/Linux/2011-11/47465.htm sqlite3编译安装 ------------------------arm版--------- ...