Spring —— Spring 的创建与使用

JavaEE传送门

JavaEE

Servlet —— Servlet API

Spring —— 初学 Spring, 理解控制反转



Spring 创建与使用

创建 Spring 项目

我们使用 Maven 方式创建一个 Spring 项目

  1. 创建一个普通 Maven 项目
  2. 添加 Spring 框架支持 (spring-context, spring-beans)
  3. 添加启动类

创建 Maven 项目

添加 Spring 框架支持

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>

粘贴完之后, 记得刷新.

如果刷新之后, 还是导入失败, 我们需要设置国内源:

搜索 maven 按照如图设置

按照路径找到 setting.xml 文件

在里面找到 mirrors 标签, 在其中填入如下代码

<mirror>
     <id>alimaven</id>
     <name>aliyun maven</name>
     <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
     <mirrorOf>central</mirrorOf>        
</mirror>

如果继续出错, 删除本地 maven 仓库的 jar 包, 重新下载

添加启动类

java 文件夹下创建一个启动类, 包含 main 方法


存储 Bean 对象

存储 Bean 分为两步:

  1. 存储 Bean 之前, 需要先创建 Bean
  2. 将创建的 Bean 注册到 Spring 容器中

创建 Bean

如图创建一个普通对象

将 Bean 注册到容器

添加 Spring 配置文件, spring-config.xml, 将文件放到 resources 的根目录下

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"
       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">
</beans>

User 对象注册到 Spring 中, 在 <beans> 中添加如下配置:

<bean id="user" class="User"></bean>


从 Spring 中读取 Bean 对象

  1. 得到 Spring 对象 (上下文对象)
  2. 通过 Spring 上下文, 获取某一个指定的 Bean 对象
  3. 使用 Bean 对象

# 使用 ApplocationContent

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;

public class App {
    public static void main(String[] args) {
        // 得到 Spring 对象, xml名字一定要和 resources 下 xml名字一一对应
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");
        // 从 Spring 中取出 Bean 对象
        User user = (User) applicationContext.getBean("user");
        // 使用 Bean (可选)
        System.out.println(user.sayHi());// 根据名称获取 Bean
    }
}

运行结果展示

# 使用 BeanFactory

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;

public class App {
    public static void main(String[] args) {
        BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
        User user = (User) beanFactory.getBean("user");
        System.out.println(user.sayHi());
    }
}

# AppliactionContext VS BeanFactory

相同点:

  1. 都可以得到 Spring 上下文对象
  2. 都是来自 Spring 的顶级接口

不同点:

  1. 继承关系: ApplicationContext 属于 BeanFactory 的子类: BeanFactory 只有最基础访问 Bean 的能力, 而 ApplicationContext 除了拥有 BeanFactory 功能之外, 还包含了更多的功能, 如: 国际化支持, 资源访问, 事件传播等.
  2. 性能: ApplicationContext 加载方式是将 Bean 对象一次性加载, 所以在后面访问 Bean 对象时会很快; BeanFactory 需要某个 Bean 时, 采用加载 Bean 对象, 所以它在执行 Bean 获取时, 比较慢

取出 Bean 对象的方法

User user = (User) applicationContext.getBean("user");// 根据 Bean 名称(标识) 来得到 Bean 对象
User user1 = applicationContext.getBean(User.class);// 根据 Bean 类型来得到 Bean 对象
User user2 = applicationContext.getBean("user", User.class);// 根据 Bean 名称 + Bean 类型来得到 Bean 对象

# 注意事项 #

  1. 当根据 Bean 名称来获取 Bean 的时候, getBean() 时, 当 Bean 不存在, 获取为 null, 强转类型时就会出错
  2. 当根据 Bean 类型来获取 Bean 的时候, 如果 Spring 中存在相同对象的时候, 使用该方法获取 Bean 对象会报错

总结


🌷(( ◞•̀д•́)◞⚔◟(•̀д•́◟ ))🌷

以上就是今天要讲的内容了,希望对大家有所帮助,如果有问题欢迎评论指出,会积极改正!!

在这里插入图片描述
在这里插入图片描述

这里是Gujiu吖!!感谢你看到这里🌬
祝今天的你也
开心满怀,笑容常在。
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值