JavaEE进阶第二课:Spring创建与使用

上一篇我们介绍了Spring的概念,知道了Spring是众多工具方法的IoC容器
但是纸上谈兵终觉浅,这一篇文章就来介绍Spring创建与使用,
== 注之后我们对对象的称呼就叫Bean==

1.1Spring项目的创建与配置

1.创建maven项目,语言选java,项目类型选择maven,jdk推荐1.8及以上,一路next即可
JavaEE进阶第二课:Spring创建与使用_第1张图片
2.在pom.xml目录下导入以下依赖并刷新下载

		<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>

注:标签要在标签下才正确

添加的框架有:
spring-context:spring 上下文
spring-beans:管理对象的模块

3.在resources目录下创建任意名称(最好是有意义name)的xml文件并导入依赖,记得刷新下载依赖。
JavaEE进阶第二课:Spring创建与使用_第2张图片
复制以下内容到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 http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">                                                                                         
</beans>

1.2将对象注册到Spring中

1.任意创建两个类,一个类App负责执行main函数,另一个User注册到Spring中

public class User {
    public void fun(){
        System.out.println("我是User类的fun方法");
    }
}

public class App {
    public static void main(String[] args) {
        
    }
}

2.将User对象注册到Spring中
在我们resources目录下的xml文件的标签下中加上这一句:


这样就注册了一个User对象到Spring中了

● 针对class属性我们可能会遇到不同包下相同的类名,这时我们就要唯一定位到某一个类,可以采用包名.类名的形式
● 这里这是注册,还没有真正将对象存入,就相当于清单,Spring存对象是要根据这个清单内容来存对象。

3.从Spring取出User对象
在App的main方法中:调用以下代码

public static void main(String[] args) {
        //获取Spring上下文对象 ClassPathXml:根据xml的路径 所以参数为我们resources内的xml文件
        ApplicationContext context=
                new ClassPathXmlApplicationContext("spring-config.xml");
        //使用该类获取对象的方法--输入对象id 返回的Object需要强转
        User user=(User) context.getBean("user");
        //检查是否正确获得对象
        user.fun();
}

当然获取对象不只是输入id,还可以通过类对象来获取。

User user=(User) context.getBean("user");

通过类对象有个好处,不用再强制类型转换了。
缺点就是如果我再给xml加入有个User对象就会报错,就像这样:
● 在xml再添加一个User对象:

● 执行代码:
User user1=context.getBean(User.class);
user1.fun();
● 得到报错:
在这里插入图片描述
注意看,异常名称:NoUniqueBeanDefinitionException(没有找到唯一的对象)
解决方法很简单,既然二者都有缺点,那我们就全都要!
User user2=context.getBean("user1",User.class);
该方法就结合的二者优点,推荐使用哦!

4.运行检查结果:
正确:
在这里插入图片描述
一般错误就是报以下异常:

NoSuchBeanDefinitionException

这时就要注意自己getBean方法的id是否和xml里面的匹配,大概率是这个问题引发的异常。

1.3补充说明

创建Spring上下文对象时,除了 ApplicationContext 之外,我们还可以使⽤ BeanFactory 来作为 Spring 的上下文。

		BeanFactory beanFactory=
                new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
        User user=(User) beanFactory.getBean("user");
        user.fun();

他们两个的效果是一样的,ApplicationContext属于 BeanFactory的子类
这里对此有个常考面试题:

1.3.1常考面试题

ApplicationContext VS BeanFactory(常⻅⾯试题)
● 继承关系和功能⽅⾯来说:Spring 容器有两个顶级的接⼝:BeanFactory 和
ApplicationContext。其中 BeanFactory 提供了基础的访问容器的能力,⽽ ApplicationContext属于 BeanFactory 的⼦类,它除了继承了 BeanFactory 的所有功能之外,它还拥有独特的特性,还添加了对国际化支持、资源访问支持、以及事件传播等⽅⾯的支持
● 从性能⽅⾯来说:ApplicationContext 是⼀次性加载并初始化所有的 Bean 对象(饿汉),
而BeanFactory 是需要那个才去加载那个(懒汉),因此更加轻量

总结

1.先得到容器
2.对象存入容器
创建Bean类(普通类)
然后在xml上进行注册,等待Spring存入容器
3.从容器取出对象
得到 Spring 上下⽂,读取到 Spring 的配置文件(xml)
getBean方法获取对象
4.使用对象
调用对象的方法等等

本篇文章介绍了Spring项目创建配置,和如何存储对象,下一篇文章我将向大家讲述如何更加快速高效的存取对象,希望大家多多点赞关注!

你可能感兴趣的:(JavaEE进阶,spring,java-ee,java,spring学习)