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.youkuaiyun.com/wojiaowo11111/article/details/51605213

### Java Spring Framework 中不同组件注解的用途和区别 #### @Component 注解 @Component 是一个通用的注解,用于标记任何被Spring管理的组件类。当开发者希望某个类能够成为Spring容器中的Bean时可以使用此注解。它允许通过自动装配机制来发现并注册这些bean到应用上下文中。 ```java @Component public class MyComponent { // Component implementation here... } ``` #### @Service 注解 @Service 主要应用于业务逻辑层的服务实现类上。该注解表明此类提供某种特定类型的业务操作服务功能,并且通常会被注入到其他需要调用其方法的地方。这有助于更好地组织代码结构以及提高可读性和维护性[^1]。 ```java @Service public class UserServiceImpl implements UserService { // Service methods go here... } ``` #### @Repository 注解 @Repository 专门用来标注数据访问层(DAO)或者持久化层的相关类。这样做的好处是可以让异常转换机制生效——即将底层数据库抛出的数据访问异常转化为Spring统一定义的一套运行期unchecked exception体系,从而简化了错误处理流程[^2]。 ```java @Repository public interface UserRepository extends JpaRepository<User, Long> { List<User> findByUsername(String username); } ``` #### @Controller 注解 @Controller 表示这是一个控制器类,在基于MVC模式开发的应用程序里负责接收HTTP请求并将它们映射给相应的处理器函数执行。此外还支持视图解析等功能以便返回响应结果给客户端浏览器显示页面内容[^3]。 ```java @Controller @RequestMapping("/users") public class UserController { private final UserService userService; public UserController(UserService userService) { this.userService = userService; } @GetMapping("/{id}") public String showUser(@PathVariable Long id, Model model) { User user = userService.findById(id).orElseThrow(() -> new ResourceNotFoundException("User not found")); model.addAttribute("user", user); return "show"; } } ``` 以上四种注解都是为了方便开发者更清晰地区分项目内的各个层次模块而设计出来的特殊版本的 `@Component` 。虽然都可以单独工作,但在实际工程实践中建议按照各自的最佳实践场景合理选用以保持良好的架构风格一致性。
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值