Skip to content

一、@Service、@Repository、 @Controller、 @Component 案例

1. @Service

  • 主要应用 Service 业务实现层
java
package org.example.spring5.service;

/**
 * @author: Calvin <br>
 * @date: 2020/11/25 14:17 <br>
 * @since: 1.0 <br>
 * @description: UserService <br>
 */
public interface UserService {
}
java
package org.example.spring5.service.impl;

import org.example.spring5.service.UserService;
import org.springframework.stereotype.Service;

/**
 * @author: Calvin <br>
 * @date: 2020/11/25 14:17 <br>
 * @since: 1.0 <br>
 * @description: UserService <br>
 */
@Service
public class UserServiceImpl implements UserService {

    public UserServiceImpl(){
        System.out.println("根据 @Service 注解,将 UserServiceImpl 业务对象将被注入到Spring IOC容器中...");
    }
}

2. @Repository

  • 主要应用 Dao 数据访问层
java
package org.example.spring5.dao;

import org.springframework.stereotype.Repository;

/**
 * @author: Calvin <br>
 * @date: 2020/11/25 14:17 <br>
 * @since: 1.0 <br>
 * @description: UserDao <br>
 */
@Repository
public class UserDao {
    
    public UserDao() {
        System.out.println("根据 @Repository 注解,将 UserDao 数据访问对象将被注入到Spring IOC容器中...");
    }
}

3. @Controller

  • 主要应用 Controller 控制层
java
package org.example.spring5.controller;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

/**
 * @author: Calvin <br>
 * @date: 2020/11/25 14:17 <br>
 * @since: 1.0 <br>
 * @description: UserController <br>
 */
@Controller
@Scope
public class UserController {

    public UserController() {
        System.out.println("根据 @Controller 注解,将 UserController 控制对象将被注入到Spring IOC容器中...");
    }
}

4. @Component

  • 主要应用 自定义 应用层
  • 方式一:自定义 @SendMsg 注解中,添加 @Component 进行注册 Bean 对象。
java
package org.example.spring5.config.annotations;

import org.springframework.stereotype.Component;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author: Calvin <br>
 * @date: 2020/11/26 16:48 <br>
 * @since: 1.0 <br>
 * @description: Send <br>
 */
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface SendMsg {
}
java
package org.example.spring5.components;

import org.example.spring5.config.annotations.SendMsg;

/**
 * @author: Calvin <br>
 * @date: 2020/11/26 16:50 <br>
 * @since: 1.0 <br>
 * @description: wechatSendMsg <br>
 */
@SendMsg
public class WechatMsgSend {
    
    public wechatMsgSend() {
        System.out.println("根据自定义 @SendMsg 注解,将 WechatMsgSend 发送微信消息对象将被注入到Spring IOC容器中...");
    }
}
  • 方式二:创建一个 SendMsgComponent 类,添加 @Component 进行发送消息组件注册 Bean 对象。
java
package org.example.spring5.components;

import org.example.spring5.config.annotations.SendMsg;
import org.springframework.stereotype.Component;

/**
 * @author: Calvin <br>
 * @date: 2020/11/26 16:50 <br>
 * @since: 1.0 <br>
 * @description: SendMsg <br>
 */
@Component
public class SendMsgComponet {

    public SendMsgComponet() {
        System.out.println("根据 @Component 注解,将 SendMsgComponet 发送消息组件对象将被注入到Spring IOC容器中...");
    }
}

二、 @Service、@Repository、@Controller 区别

  • 相同点:

@Service@Repository@Controller、自定义的 @SendMsg 这些注解都是通过 @Component 注解进行实现注入 IoC 容器中。

  • 不同点:

用于标记的分层结构区分:业务层、控制层、数据持久层、自定义。