Spring项目如何创建?Bean对象是如何存储的?

  • 博主简介:想进大厂的打工人
  • 博主主页:@xyk:
  • 所属专栏: JavaEE进阶 

目录

文章目录

一、创建Spring项目

1.1 创建Maven项目

2.2 配置国内源

二、Bean对象的存储和读取

2.1 添加spring配置文件

2.2 创建Bean对象

2.3 读取Bean对象

2.3.1 得到spring上下文对象

总结:spring框架使用


一、创建Spring项目

1.1 创建Maven项目

Spring项目的基础就是Maven项目:一路next下去

finish之后,出现这样的界面:

2.2 配置国内源

由于国外源不稳定,可能让下面第二步引入 Spring 依赖会失败,所以这里先介绍如何一下配置国内镜像源

进入Settings,搜索Maven

 注意我标红的位置,主要是下方的文件要和我一致(可以不在C盘)

settings.xml文件

<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="htt
p://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.
apache.org/xsd/settings-1.1.0.xsd">
<localRepository>C:\Users\86180\.m2\repository</localRepository>
    <mirrors>
        <mirror>
        <id>alimaven</id>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <mirrorOf>central</mirrorOf>
        </mirror>
    </mirrors>
</settings>

如果你是在引入相关依赖失败后进行的国内源配置,就要去本地管理jar包的目录将jar包都进行删除,然后重新刷新下载依赖即可。

 重新进行下载

3.添加spring依赖

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

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

4.创建启动类

在java目录创建类,写代码即可

二、Bean对象的存储和读取

2.1 添加spring配置文件

右键resources目录,新建一个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>

2.2 创建Bean对象

public class student {
    public void sayHi(String name){
        System.out.println("hello!" + name);
    }
}

然后将Bean通过配置文件,注入到spring中,即在spring配置文件中通过以下语句注入。

id:将对象存储到容器的名字(后续取对象会用)

class:要存储对象的完整路径

<bean id="student" class="demo.student"></bean>

2.3 读取Bean对象

获取并使⽤ Bean 对象,分为以下 3 步:
1. 得到 Spring 上下⽂对象,因为对象都交给 Spring 管理了,所以获取对象要从 Spring 中获取,那么就得先得到 Spring 的上下⽂。
2. 通过 Spring 上下⽂,获取某⼀个指定的 Bean 对象。
3. 使⽤ Bean 对象。

2.3.1 得到spring上下文对象

1.可使用ApplicationContext接口

public class App {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
//        BeanFactory factory = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
        student student = context.getBean("student", demo.student.class);
        student.sayHi("张三");
    }
}
实现类描述
ClassPathXmlApplicationContext(常用)加载类路径下的配置文件,要求配置文件必须在类路径下
FileSystemXmlApplicationContext可以加载磁盘任意路径下的配置文件(必须要有访问权限)

2.还可以使用 BeanFactory工厂来获取Bean

public class App {
    public static void main(String[] args) {
//        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        BeanFactory factory = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
        student student = factory.getBean("student", demo.student.class);
        student.sayHi("张三");
    }
}

但实际上并不推荐使用这种方式,算是过时代的方式了,因为旧时期需要考虑内存占用的问题,而现在内存资源没有这样的问题了。

上面两种效果都是一样的,那么ApplicationContext与 BeanFactory有什么区别?

相同点:

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

不同点:

  1. 继承关系和功能⽅⾯来说:其中 BeanFactory 提供了基础的访问容器的能力;而 ApplicationContext属于 BeanFactory 的⼦类,它除了继承了 BeanFactory 的所有功能之外,它还拥有独特的特性,还添加了对国际化⽀持、资源访问⽀持、以及事件传播等⽅⾯的⽀持。
  2. 从性能⽅⾯来说:ApplicationContext 是⼀次性加载并初始化所有的 Bean 对象,属于饿汉方式;而BeanFactory 是需要那个才去加载那个,属于懒汉方式
     

验证ApplicationContext 加载机制:

可见,在spring框架一启动,会将所有的Bean对象创建出来,属于饿汉方式

验证BeanFactory加载机制:

可见BeanFactory是懒加载机制~~

总结:spring框架使用

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值