Spring常用注解 (2)

在Blog中,博主给了跨域的详细例子:

当前页面url 被请求页面url 是否跨域 原因
      同源(协议、域名、端口号相同)  
  https://www.test.com/index.html   跨域   协议不同(http/https)  
    跨域   主域名不同(test/baidu)  
    跨域   子域名不同(www/blog)  
:8080/   :7001/   跨域   端口号不同(8080/7001)  

(上表来自链接博文)

关于AJAX跨域问题移步这里

@RequestController
@RequestMapping("rest")
public class RestController {
 @PostMapping
 @CrossOrigin
 public String post(@RequestBody User user){
   return user.toString();
}
}
//跨域问题解决
@Service

Controller中一般是不写逻辑的,都是直接调用相应的服务,我们需要吧业务逻辑封装在服务中。

上面的例子只是为了方便才把逻辑写入控制器,实际开发中不要图这种方便。

@Service用来注册bean,要放在服务的实现类之前。

接下来使用UserService做例子。这是一个接口。

// 接口类
public class UserService {
 public ResponseVO addUser(User user);
}
// 实现类

@Service // 一定是在实现类而非接口类中
public class UserServiceImpl implements UserService {
 
public ResponseVO addUser(User user){
   // implement the interface
}
}
// 控制器类
public class UserController {
 @Autowired
 private UserService userService;
}

一般在控制器类中,又一个Service成员,在这个例子中便是private UserService userService

我们当然可以选择:

private UserService userService new UserServiceImpl();

但是SpringBoot提供了更方便的做法:

@Autowired
private UserService userService;

只要实现类被正确的标注,那么@Autowired就能帮我们完成初始化任务。

关于Autowired的进一步介绍移步@Autowired

@Component

@Component和@Service非常类似,同样用来注册bean,使用方式也是一样的,区别在二者的使用场景。

@Service用于注解业务逻辑层中的服务代码,@Component用于注解通用性强的工具类(会被多方调用)。

例如:

既被控制器调用,又被服务实现类调用的类

被多个控制器/服务实现类调用的类

@Autowired

@Autowired用来获取bean。

在SpringBoot中,默认的匹配方式是byType,具体规则如下:

按照类型去容器找到对应的组件

如果找到:赋值

如果没找到:报异常

如果找到多个:使用变量名作ID匹配,匹配上就赋值,没有就报错。

这里说明一下:ID即为类名的首字母小写,例如UserServiceImpl类的ID就是userServiceImpl

可以使用@Qualifier注解指定ID

例子:

使用变量名作ID匹配

@Autowired
private UserService userService;

查找到多个相同的类:UserService(id = userService)及其子类UserServiceExtend(id = userServiceExtend)

这时,使用userService作id匹配到UserService类。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zydzpg.html