java中的注解大全@controller、@service、@repository等

参考一篇文章,其中讲了 @controller、@service、@repository 注解,看后很有启发,自己复制下总结下,添加点东西写下这篇博客
controller 层使用 @controller 注解

@Controller 用于标记在一个类上,使用它标记的类就是一个 SpringMVC Controller 对象。分发处理器将会扫描使用了该注解的类的方法。通俗来说,被 Controller 标记的类就是一个控制器,这个类中的方法,就是相应的动作。
@RequestMapping 是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。比如图一中,跳转到登录页面的路径就是 localhost:8080/xxx-war/user/toLogin
service 采用 @service 注解

例:@Service("userService") 注解是告诉 Spring,当 Spring 要创建 UserServiceImpl 的的实例时,bean 的名字必须叫做 "userService",这样当 Action 需要使用 UserServiceImpl 的的实例时, 就可以由 Spring 创建好的 "userService",然后注入给 Action。
dao 层使用 @repository 注解

@Repository(value="userDao") 注解是告诉 Spring,让 Spring 创建一个名字叫“userDao”的 UserDaoImpl 实例。

当 Service 需要使用 Spring 创建的名字叫“userDao”的 UserDaoImpl 实例时,就可以使用 @Resource(name = "userDao") 注解告诉 Spring,Spring 把创建好的 userDao 注入给 Service 即可。

 

@Autowired   : 它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired 的使用来消除 set ,get 方法。
 

mapper 层使用 @Component 注解

 
除此之外四大注解还有很多有用的注解 
1、@Override:标示当前的方法定义将覆盖超类中的方法他告诉我们同时也告诉编译器我们的这些方法肯定覆盖了类 ** 里面的方法,如果注释掉类 ** 里面的方法 那么就会报错,它需要全部覆盖某个接口的方法。
2、@Deprecated:它标记就表明这个方法已经过时了,在实际中,我们不想用到一个方法,但是这方法的借口正在使用,那我们就可以用它注解
3、SuppressWarnings:忽略编译器警告信息
 
下面是元注解
 

@Target:表示该注解可以用于什么地方。 
取值(ElementType)包括: 
CONSTRUCTOR: 用于描述构造器 
FIELD: 用于描述域 
LOCAL_VARIABLE: 用于描述局部变量 
METHOD: 用于描述方法 
PACKAGE: 用于描述包 
PARAMETER: 用于描述参数 
TYPE: 用于描述类、接口 (包括注解类型) 或 enum 声明

@Retention:表示需要在什么级别保存该注解信息。 
取值(RetentionPolicy)包括: 
SOURCE: 在源文件中有效(即源文件保留) 
CLASS: 在 class 文件中有效(即 class 保留) 
RUNTIME: 在运行时有效(即运行时保留),因此可以通过反射机制读取注解的信息。

@Documented: 表示将此注解包含在 javadoc 中。

@Inherited:表示允许子类继承父类中的注解。

可以看出 定义注解格式为: 
  public @interface 注解名 {定义体}

 

 

1)@Autowired

@Autowired 为 Spring 提供的注解,需要导入包 org.springframework.beans.factory.annotation.Autowired; 只按照 byType 注入。

复制代码
public class TestServiceImpl {
    // 下面两种 @Autowired 只要使用一种即可
    @Autowired
    private UserDao userDao; // 用于字段上
@Autowired
public void setUserDao(UserDao userDao) { // 用于属性的方法上
    this.userDao = userDao;
}

}

复制代码

@Autowired 注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许 null 值,可以设置它的 required 属性为 false。如果我们想使用按照名称(byName)来装配,可以结合 @Qualifier 注解一起使用。如下:

public class TestServiceImpl {
    @Autowired
    @Qualifier("userDao")
    private UserDao userDao; 
}

(2)@Resource

@Resource 默认按照 ByName 自动注入,由 J2EE 提供,需要导入包 javax.annotation.Resource。@Resource 有两个重要的属性:name 和 type,而 Spring 将 @Resource 注解的 name 属性解析为 bean 的名字,而 type 属性则解析为 bean 的类型。所以,如果使用 name 属性,则使用 byName 的自动注入策略,而使用 type 属性时则使用 byType 自动注入策略。如果既不制定 name 也不制定 type 属性,这时将通过反射机制使用 byName 自动注入策略。

复制代码
public class TestServiceImpl {
    // 下面两种 @Resource 只要使用一种即可
    @Resource(name="userDao")
    private UserDao userDao; // 用于字段上
@Resource(name="userDao")
public void setUserDao(UserDao userDao) { // 用于属性的setter方法上
    this.userDao = userDao;
}

}

复制代码

注:最好是将 @Resource 放在 setter 方法上,因为这样更符合面向对象的思想,通过 set、get 去操作属性,而不是直接去操作属性。

@Resource 装配顺序:

①如果同时指定了 name 和 type,则从 Spring 上下文中找到唯一匹配的 bean 进行装配,找不到则抛出异常。

②如果指定了 name,则从上下文中查找名称(id)匹配的 bean 进行装配,找不到则抛出异常。

③如果指定了 type,则从上下文中找到类似匹配的唯一 bean 进行装配,找不到或是找到多个,都会抛出异常。

④如果既没有指定 name,又没有指定 type,则自动按照 byName 方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配。

@Resource 的作用相当于 @Autowired,只不过 @Autowired 按照 byType 自动注入。

 

差不多所有的注解都在这里了,想要一起学习 java 的童鞋关注公众号《一碗肉丝面》一起学习啊

 
参考文章:http://blog.csdn.net/wojiaowo11111/article/details/51605213