文章目录
前言
Spring是一个包含了众多工具方法的Ioc容器,它包含以下两个最基本的功能:
- 将对象存储到容器中
- 从容器中将对象取出来
一、如何创建Spring项目
Spring项目的创建与Servlet类似,分为以下3步:
- 创建一个普通Maven项目
- 添加Spring框架支持,spring-context、spring-beans
- 添加启动类并添加main方法(主要用来测试)。
1.创建Maven项目
创建成功的效果:
2.添加 Spring 框架支持
在项的 pom.xml 中添加 Spring 框架的支持,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>
可以看到,这里添加的框架有 spring-context:spring 上下,还有 spring-beans:管理对象的模块。
3. 添加启动类main
在创建好的项 java 件夹下创建个启动类main:
可以试着运行打印一下:
可以看到,是没有问题的。
二、存储Bean对象
存储Bean分为以下2步或者3步:
- 如果是第一次添加,则需要先在spring项目中添加配置文件,如果非第一次,则此步骤省略
- 创建一个Bean对象
- 在配置文件中将需要保存到spring中的Bean对象进行注册
1.添加spring配置文件
第一次使用的时候需要添加配置文件。步骤如下:
(1) 在 resources 的根录下创建一个xml文件,这里我们起名字要规范一点,这个resource一般保存的是我们的静态文件。
(2)把下面的配置文件复制到里面,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>
2.创建Bean
这里所谓的创建Bean ,其实就是创建一个 Java 的普通类。只不过权限是由 spring 所持有,千万不要被名字唬到。
然后先写一个方法,等下用来测试:
3.将Bean注册到容器中
我们需要在配置文件中,将需要保存到 spring中的 bean 对象进行注册。
在我们刚刚创建的xml文件里面添加下面内容
<bean id="user" class="com.beans.UserBean"></bean>
这里的 id 可以理解为一个别名,我们给刚刚创建的这个UserBean类,起了一个叫“user"的别名
而这个class则是它的存储路径,我们待会通过这个路径来进行找这个”user“。
因此,我们这里的user取名要规范,便于一看就知道是那个的别名。(起外号要形象)
三、获取并使用 Bean 对象
在这里也可以分为3步:
- 得到spring上下文对象
- 通过上下文对象提供的方法获取我们需要使用的Bean对象
- 使用Bean对象
1.得到spring上下文对象
//1.得到上下文对象
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
这个步骤需要注意的是()里面改的内容需要与我们之前创建xml文件名是一致的。
2.获取指定的Bean对象
//2.通过上下文对象提供的方法,获取我们自己需要使用的bean对象
UserBean user = (UserBean) context.getBean("user");//需要强转
这里面最后一个括号的内容是我们上面起的别名:
3.使用Bean对象
//3.调用对象里面的方法
user.sayHi("aaa");
4.整体代码与效果
public class test {
public static void main(String[] args) {
//1.得到上下文对象
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
//2.通过上下文对象提供的方法,获取我们自己需要使用的bean对象
UserBean user = (UserBean) context.getBean("user");//需要强转
//3.调用对象里面的方法
user.sayHi("aaa");
}
}
效果:
这里我们没有new就获取到了一个对象。
5.获取Bean对象的另一种方法
除了 ApplicationContext 之外,我们还可以使 BeanFactory 来作为 Spring 的上下。如下:
public static void main(String[] args) {
// //1.得到上下文对象
// ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
// //2.通过上下文对象提供的方法,获取我们自己需要使用的bean对象
// UserBean user = (UserBean) context.getBean("user");//需要强转
// //3.调用对象里面的方法
// user.sayHi("aaa");
//1.使用BeanFactory方法来获取上下文对象
BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
//2.获取Bean
UserBean userBean = (UserBean) beanFactory.getBean("user");
//3.使用Bean
userBean.sayHi("aaa");
}
6.getBean的更多用法
getBean() 法有很多种重载法,我们也可以使其他式来获取 Bean 对象,如下:
(1)使用bean name获取bean
UserBean userBean = (UserBean) beanFactory.getBean("user");
(2)根据bean type 获取bean
UserBean userBean = (UserBean) beanFactory.getBean("UserBean.class");
这种方式写法简单,但容易出问题,当同一个类型被注入到spring中多次的时候,就会报错。如下:
当我们有多个bean对象的时候:
这里去获取bean对象就会报错,因为spring要求,获取对象是必须是唯一的,而恰恰这里不唯一。
(3)根据bean name 和类型获取bean
UserBean userBean = beanFactory.getBean("user",UserBean.class);
四、经典面试题
1.ApplicationContext 与 BeanFactory 的区别
相同点:
- 都提供了getBean方法
不同点:
- 从继承关系和功能来说,ApplicationContext属于BeanFactory的子类。BeanFactory 只提供了基础访问Bean的方法,而ApplicationContext除了拥有BeanFactory的所有功能之外,还提供了更的方法实现,比如对国际化的支持、资源访问的支持、以及事件和传播等方面的支持。
- 从性能方面来说二者是不同,BeanFactory 是按需加载Bean,因此更轻量,ApplicationContext是饿汉方式,在创建时会将所有的Bean都加载起来,以备以后使用。
五、总结
- 操作容器之前,先要有容器,所以先要得到容器。
a.创建项目
b.添加 Spring 框架支持,引入 spring-context 和 spring-beans 依赖
c.创建一个启动类 和 main方法- 存对象
a. 创建 Bean(普通类)。
b. 将 Bean 注册(配置)到 spring-confing.xml 中。- 取对象
a. 得到 Spring 上下,并读取到 Spring 的配置件。
b. 获取某个 Bean 对象。
c. 使 Bean 对象
完!
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦