博客主页:敲代码的布莱恩特
欢迎点赞 收藏 ⭐留言 欢迎讨论!
本文由 【敲代码的布莱恩特】 原创,首发于 CSDN
由于博主是在学小白一枚,难免会有错误,有任何问题欢迎评论区留言指出,感激不尽!✨
精品专栏(不定时更新)【JavaSE】 【Java数据结构】【LeetCode】
创建maven就不再赘述了,详情见【Spring创建与使用】篇
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:content="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<content:component-scan base-package="com.bit.service">
</content:component-scan>
</beans>
想要将对象存储在 Spring 中,有两种注解类型可以实现:
接下来我们分别来看
既然功能是⼀样的,为什么需要这么多的类注解呢?
这和为什么每个省/市都有⾃⼰的⻋牌号是⼀样的?⽐如陕⻄的⻋牌号就是:陕X:XXXXXX,北京的⻋ 牌号:京X:XXXXXX,⼀样。甚⾄⼀个省不同的县区也是不同的,⽐如⻄安就是,陕A:XXXXX,咸 阳:陕B:XXXXXX,宝鸡,陕C:XXXXXX,⼀样。这样做的好处除了可以节约号码之外,更重要的作 ⽤是可以直观的标识⼀辆⻋的归属地。
那么为什么需要怎么多的类注解也是相同的原因,就是让程序员看到类注解之后,就能直接了解当前类 的⽤途,⽐如:
@Controller:表示的是业务逻辑层;
@Servie:服务层;
@Repository:持久层;
@Configuration:配置层。
注意事项:
其实这些注解里面都有⼀个注解 @Component,说明它们本身就是属于@Component 的“子类”
注意事项1:
如果当前类里面只有一个构造方法,那么@Autowired
注解是可以被省略的(这点和Setter注入是不同的)
注意事项2:
如果当前类中存在一个以上的构造方法,那么@Autowired
注解不能被省略
使用请看上边
使用 @Resource
注解注入
它的用法和@Autowired类似
出身不同:
@Autowired 来自于 Spring,而 @Resource 来⾃于 JDK 的注解;作用范围不同:
使用@Autowired可以进行属性注入、Setter注入、构造器注入 ;而@Resource只能进行属性注入和Setter注入。功能不同:
@Resource可以配合更多的属性进行使用,而@Autowired支持的属性较少,比如使用@Resource可以配合name属性进行使用,从而完成对象的别名注入。解决同⼀个类型,多个 bean 的解决⽅案有以下两个
@Controller
class UserController4 {
// 注⼊
@Resource(name = "user1")
private User user;
public User getUser() {
return user;
}
}
@Controller
public class UserController5 {
// 注⼊
@Autowired
@Qualifier(value = "user2")
private User user;
public User getUser() {
return user;
}
}