(2)添加spring框架支持(spring-context / spring-beans)
在pom.xml中添加如下代码
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
</dependencies>
如果此目录下没有相应的settings.xml文件,把相应的文件拷贝进来。
(3)创建一个启动类并添加main
创建一个类。类名可以任意取。
(1)先在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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>
将上述代码片段放置到创建的xml中【配置文件的名字可以任意取,此处取的是spring-config.xml】
(2)创建bean对象
在Java中就是普通的对象。
创建一个User对象
package com.beans;
public class User {
public void sayHi(String name) {
System.out.println("你好:"+name);
}
}
(3)在配置文件中将需要保持到spring中的对象进行注册。
将bean通过配置文件注册到spring中。
(1)先得到spring上下文对象
// 1. 得到spring上下文对象
ApplicationContext context=new ClassPathXmlApplicationContext("spring-config.xml");
(2)通过上下文对象提供的getBean方法获取自己需要使用的bean对象
//2. 根据上下文对象提供的方法获取到bean
User user=(User) context.getBean("user");
(3)使用bean对象【可选步骤】
//3.使用bean
user.sayHi("李四");
除了 ApplicationContext 之外,我们还可以使⽤ BeanFactory 来作为 Spring 的上下⽂。
//另一种方法
//1.得到bean工厂
BeanFactory factory=new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
// 2. 获取bean
User user=(User) factory.getBean("user");
//3.使用bean
user.sayHi("张三");
ApplicationContext和 BeanFactory的区别?
相同点:都可以实现从容器中获取bean,都提供了getBean的方法。
不同点:
getBean的更多用法:
(1)使用bean name获取bean
User user=(User) context.getBean("user");
(2)根据bean type 获取bean
User user= context.getBean(User.class);
此方法写法简单,但容易出问题。当同一个类型被注入到spring中多次的时候,就会报错。
(3)根据bean name和类型获取bean
User user=context.getBean("user",User.class);
在 Spring 中想要更简单的存储和读取对象的核⼼是使⽤注解。
在spring配置文件中设置bean扫描根路径
在resource下创建spring-config.xml,将下述代码写入spring-config.xml中
<?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=""></content:component-scan>
</beans>
想要将对象存储在 Spring 中,有两种注解类型可以实现:
为什么需要5大类注解?
让代码的可读性提高,让程序员能够直观的判断当前类的用途。
5大类注解之间有何关系
@Controller【控制器】、@Service【服务】、@Repository【仓库】、@Configuration都是基于@Component【组件】实现的,所以@Component【组件】可以认为是其他4个注解的父类。
2. ⽅法注解:@Bean
在 Spring 框架的设计中,⽅法注解 @Bean 要配合类注解才能将对象正常的存储到 Spring 容器中
@Component
public class UserBeans {
@Bean//注:只使用一个bean注解是无法将对象存储到容器中
public User user1(){
User user=new User();
user.setId(1);
user.setName("张丹");
return user;
}
}
获取 bean 对象也叫做对象装配,是把对象取出来放到某个类中,有时候也叫对象注⼊。
对象装配(对象注⼊)的实现⽅法以下 3 种:
@Controller
public class UserController2 {
//对象注入方式1: 属性注入
@Autowired
private UserService userService;
public void sayHi() {
userService.sayHi();
}
}
//属性注入
UserController2 userController2=context.getBean(UserController2.class);
userController2.sayHi();
//使用构造方式实现bean注入(官方推荐)
@Controller
public class UserController3 {
private UserService userService;
@Autowired
public UserController3(UserService userService) {
this.userService=userService;
}
public void sayHi(){
userService.sayHi();
}
}
//构造方法注入
UserController3 userController3=context.getBean(UserController3.class);
userController3.sayHi();
@Controller
public class UserController4 {
private UserService userService;
@Autowired
public void setUserService(UserService userService) {
this.userService = userService;
}
public void sayHi() {
userService.sayHi();
}
}
//setter注入
UserController4 userController4=context.getBean(UserController4.class);
userController4.sayHi();
属性注入、构造方法注入、setter注入的区别是什么?
另一种注入注解:@Resource
注:@Resource支持属性注入和setter注入,但不支持构造方法注入。
@Resource 和 @Autowired的区别?
都可以实现将对象注入到当前类当中。
bean的作用域:bean在spring整个框架中的某种行为。