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

一、基本概述

注解(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. c/c++面试题(1)

    1.C++中有哪4个和类型转换相关的关键字?这些关键字都有什么特点?应该在哪些场合下使用. C语言中的强制类型转换可以随意的转换我们想要的类型了,格式如下(类型) 变量名; 为什么c++还要引入新的4 ...

  2. SharePoint\O365 "See also"功能 and site feature 激活\禁用小节

    博客地址:http://blog.csdn.net/FoxDave 最近因为问题发现了SharePoint的"See also"功能,该功能是由SharePoint自动的Feat ...

  3. windowsAzure模拟器错误

    Failed to initialize Microsoft Azure storage emulator. Unable to open wait handle 无法初始化微软Azure存储模拟器. ...

  4. Javascript实现CheckBox的全选与取消全选的代码(转)

    js函数 复制代码 代码如下: <script type="text/javascript"> function checkAll(name) { var el = d ...

  5. 另一种图片上传 jquery.fileupload.js

    今天遇到另外一种上传图片方法 用jquery.fileupload.js <input type="file" name="file[]" multipl ...

  6. unix exec族函数 关于参数的疑惑

    问题不出在这几个函数,而在于看后文解释器的时候发现一个很奇妙的问题. #include <unistd.h> int execl(const char *pathname, const c ...

  7. Can 't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock '(2) ;

    Can 't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock '(2) ; 如果你在网上search这个 ...

  8. 9.9,新iPhone要来了,是欢呼,还是墙角画圈,一会儿见分晓

  9. 2015GitWebRTC编译实录15

    各个库编译完成后,整合talkapp,联编时还是碰到了一些问题,主要是lib里的源码文件被错误移走,或者宏定义等有问题的,不一而足 FQ访问https://apprtc.appspot.com/,拿到 ...

  10. [转载]QQ空间技术架构之深刻揭密

    1. 拥有5.5亿的活跃用户 2. 过万台的设备 3. 数千万级别的同时在线 4. 数十亿级别的全站PV 5. P级的UGC存储量 6. 每天千亿级别的服务请求 图1--QQ空间海量服务数据规模 接下 ...