1、创建Spring项目
我们上一章讲过了,Spring的核心用法就是取出和存入对象,如果不知道的可以看我上期博客。
(255条消息) Java框架详解1——Spring的设计思想_东莞呵呵的博客-CSDN博客
1.1、首先我们需要在idea中创建一个Maven项目,不需要选中任何模板
1.2、添加spring框架支持(spring-context/spring-beans)
在pom.xml 文件中添加Spring框架依赖
<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>
1.3、添加一个启动项
在创建好的项目中的Java目录下创建一个启动项(包含main方法即可)
2、存入Bean对象
1、创建一个Bean对象
2、将Bean注册到容器中
2.1、创建一个Bean
Bean就是Java中的普通的对象
我们直接创建在Java目录下即可
2.2、将Bean注册到容器
我们首先要在resource目录下创建一个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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>
然后我们把创建好的Bean对象注册进去,在<beans></beans>标签中添加如下代码
<bean id="userBean" class="com.beans.UserBean"></bean>
一般id我们使用bean的类名的小驼峰形式,class=Java包下该bean的路径。
3、取出Bean
1、获取Spring的上下文对象
2、通过Spring的上下文对象,将bean从容器中取出来
3.1、 获取spring的上下文对象
3.1.1、通过ApplicationContext获取上下文对象
注意参数要与resources中的注册bean的配置文件名相同
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
3.1.2、根据上下文对象取出bean
getbean中传入的参数是注册时id的名称
UserBean user=(UserBean) context.getBean("userBean");
3.2、通过bean工厂的方式获取上下文对象
3.2.1、获取bean工厂
值得注意的是XmlBeanFactory是一个即将废弃的方法
BeanFactory factory = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
3.2.2、取出bean对象
UserBean user = (UserBean) factory.getBean("userBean");
3.3、两者的区别(重要)
1、相同点:都可以从容器中通过getBean方法取出bean
2、不同点:
从设计来说:ApplicationContext是BeanFactory的子类,BeanFactory只提供了基础访问Bean的方法ApplicationContext除了有BeanFactory所有的方法,还提供了更多的实现,比如对国际化的支持,资源访问的支持,以及事件和传播等方面的支持
从性能方面来说:BeanFactory是按需加载Bean,ApplicationContext是饿汉方式,会将所有的Bean全部加载起来,以备以后使用。
4、getBean方法详解
除了上述的使用方法,我们还可以使用以下方法:
UserController user = context.getBean(UserController.class);
UserController user = context.getBean("user", UserController.class);
但是前一种使用方式会在同一个bean注册多次的情况下报错。
总结:getBean有三种使用方式
1、根据Bean name(id)来获取,需要强转
2、根据bean type(context.class),来获取不需要强转,但是一个Bean对象被注册过多次的时候就会出错
3、根据bean name和type来获取不需要强转,而且更加健壮