在 Spring 中想要更简单的存储和读取对象的核⼼是使⽤注解,也就是我们接下来要学习 Spring 中的相关注解,来存储和读取 Bean 对象。
1.存储 Bean 对象
1.1 前置⼯作:配置扫描路径
我们需要配置⼀下存储对象的扫描包路径,只有被配置的包下的所有类,添加了注解才能被正确的识别并保存到 Spring 中。
1.2 添加注解存储 Bean 对象
想要将对象存储在 Spring 中,有两种注解类型可以实现:
1.
类注解:@Controller、@Service、@Repository、@Component、@Configuration。
上述类注解都可以将对象注入到spring当中,但是它们的用途不同,程序员根据类注解,就可以了解类的用途.@Controller:表示的是业务逻辑层;@Servie:服务层;@Repository:持久层;@Configuration:配置层
通常我们 bean 使⽤的都是标准的⼤驼峰命名,⽽读取的时候⾸字⺟⼩写就可以获取到 bean 了,然⽽,当我们⾸字⺟和第⼆个字⺟都是⼤写时,就不能正常读取到 bean 了
2. ⽅法注解:@Bean
在 Spring 框架的设计中,⽅法注解 @Bean 要配合类注解才能将对象正常的存储到 Spring 容器中
@Component
public class Users {
@Bean(name = {"u1"})//重命名
public User user1() {
User user = new User();
user.setId(1);
user.setName("Java");
return user;
}
}
2.获取 Bean 对象(对象装配)
获取 bean 对象也叫做对象装配,是把对象取出来放到某个类中,有时候也叫对象注⼊。
2.1 属性注⼊
属性注⼊是使⽤ @Autowired 实现的(相当于给属性赋值),将 Service 类注⼊到 Controller 类中。
2.2 构造⽅法注⼊
构造⽅法注⼊是在类的构造⽅法中实现注⼊,如果只有⼀个构造⽅法,那么 @Autowired 注解可以省略
@Autowired
public UserController2(UserService userService) {
this.userService = userService;
}
2.3 Setter 注⼊
Setter 注⼊和属性的 Setter ⽅法实现类似,只不过在设置 set ⽅法的时候需要加上 @Autowired 注
解
2.4 @Resource:另⼀种注⼊关键字
除了可以使⽤ @Autowired 关键字之外,我们还可以使⽤ @Resource 进⾏注⼊
@Autowired 和 @Resource 的区别
(1)出身不同:@Autowired 来⾃于 Spring,⽽ @Resource 来⾃于 JDK 的注解;
(2)使⽤时设置的参数不同:相⽐于 @Autowired 来说,@Resource ⽀持更多的参数设置,例如
name 设置,根据名称获取 Bean。
(3)@Autowired 可⽤于 Setter 注⼊、构造函数注⼊和属性注⼊,⽽ @Resource 只能⽤于 Setter注 ⼊和属性注⼊,不能⽤于构造函数注⼊。
2.5 同⼀类型多个 Bean
解决同⼀个类型,多个 bean 的解决⽅案有以下两个:
(1)使⽤ @Resource(name="user1") 定义。
@Controller
class UserController4 {
// 注⼊
@Resource(name = "user1")
private User user;
public User getUser() {
return user;
}
}
(2)使⽤ @Qualifier 注解定义名称。
@Controller
public class UserController5 {
//注⼊
@Autowired
@Qualifier(value = "user2")
private User user;
public User getUser() {
return user;
}
}