一、@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 容器中。
- 不同点:
用于标记的分层结构
区分:业务层、控制层、数据持久层、自定义。