1 一个spring程序

本文详细介绍了Spring框架的下载、环境搭建过程,包括核心jar包的添加,并通过示例代码展示了如何使用Spring的IoC容器进行对象的创建与管理,以及不同容器的使用方法和区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spring框架的下载

spring的下载地址
网速不好的话,进去的时候可能又有点慢。
进入Artifacts
在这里插入图片描述
根据路径依次进入:libs-release-local/org/springframework/spring/
然后就可以看见好多版本
在这里插入图片描述
这里面发布的版本都是稳定的,我就选个最新版吧。
在这里插入图片描述
下载版本里的第一个压缩包就行了

环境搭建

添加jar包
在这里插入图片描述
要加载spring框架的最基本的四个jar包,就是在图中Core Container模块中的四个jar包。
在刚下载的spring框架中libs文件夹中可以看见spring框架中所具有的jar包。
图中的SpEL就是指名字叫expresion的jar包。
再加上记录日志的jcl包,相当于需要添加5个基本jar包。
在这里插入图片描述
在添加jar包时注意,在存放jar包的文件夹中,有跟jar包名字很相似的javadoc.jar包和sources.jar包,这两个就不要添加了。
简单测试程序
ISomeService.java接口

public interface ISomeService {
	void doSome();
}

SomeServiceImpl.java实现类

public class SomeServiceImpl implements ISomeService {
	@Override
	public void doSome() {
		System.out.println("执行doSome()方法");
	}
}

测试类

public class MyTest {
	@Test
	public void test01() {
		ISomeService service = new SomeServiceImpl();
		service.doSome();
	}
}

在测试类中可以看出,我在测试类中还需要创建SomeServiceImpl类的对象,这就存在着类之间的耦合。
所以使用spring中提供的容器,就可以解决业务逻辑之间的耦合。
xml文件约束
创建一个xml文件,命名为applicationContext.xml,作为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>

ApplicationContext容器

通过容器创建对象

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

    <!-- 
    	下面的配置相当于
    	ISomeService someService = new SomeServiceImpl();
    	其底层的执行是
    	Object someService = Class.forName(com.service.SomeServiceImpl).newInstance();
     -->
	<bean id="someService" class="com.service.SomeServiceImpl"/>
	<!--class中放的是类的全限定名-->
</beans>

底层是用到了反射的原理创建的对象。
现在容器中有了对象,下面就是需要对象的时候怎么从容器中取出对象。
通过容器取出对象
测试类

	@Test
	public void test02() {
		//传入创建对象的容器
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		//获得id名为someService的bean
		ISomeService service = (ISomeService) ac.getBean("someService");
		service.doSome();
	}

这样在测试类中就完全不依赖接口实现类了,这就完成了两个类之间的解耦。
三种构造方法
上面的getBean()可以使用的三种构造方法。
上面是一种,还有两种

@Test
	public void test03() {
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		//适用于只有一个实现类,即容器中只有一个class="com.service.SomeServiceImpl"的bean
		ISomeService service = (ISomeService) ac.getBean(ISomeService.class);
		service.doSome();
	}
	@Test
	public void test04() {
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		ISomeService service = (ISomeService) ac.getBean("someService",ISomeService.class);
		service.doSome();
	}

ApplicationContext的两个实现类
上面使用的是ClassPathXmlApplicationContext();实现类。
另一个实现类叫做FileSystemXmlApplicationContext();

@Test
	public void test05() {//applicationContext的另一个实现类
		ApplicationContext ac = new FileSystemXmlApplicationContext("I:\\eclipse project\\Workspace\\1_1第一个Spring项目\\src\\applicationContext.xml");
		ISomeService service = (ISomeService) ac.getBean("someService",ISomeService.class);
		service.doSome();
	}

这个实现类是通过系统的路径下寻找spring的配置文件。
在这里插入图片描述
通常使用的就是ClassPathXmlApplicationContext这个实现类,比较方便。

BeanFactory容器

BeanFactory的使用方式

@Test
	public void test06() {//Spring框架的第二个容器
		BeanFactory ac = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
		ISomeService service = (ISomeService) ac.getBean("someService",ISomeService.class);
		service.doSome();
	}

BeanFactory 可以理解为含有 bean 集合的工厂类。BeanFactory 包含了种 bean 的定义,以便在接收到客户端请求时将对应的 bean 实例化。
BeanFactory 还能在实例化对象的时生成协作类之间的关系。此举将 bean 自身与 bean 客户端的配置中解放出来。BeanFactory 还包含 了 bean 生命周期的控制,调用客户端的初始化方法(initialization methods)和销毁方法(destruction methods)。

XmlBeanFactory这种方式获取配置文件基本上被淘汰,是比较接近底层了,我们只需要知道有这种使用方式就可以了,大多情况下还是使用的是他的子接口ApplicationContext。

两个容器的区别

ApplicationContext与BeanFactory容器的区别:

  • ApplicationContext容器:(开发中常用) 当容器被创建时,会自动将该容器中所有的Bean创建
    优点:对用户的响应效率高,用户体验好
    不足:消耗和占用系统资源

  • BeanFactory容器:
    容器被创建时,不会自动创建该容器中的Bean,只有当真正使用到该Bean时,才会有容器创建
    优点:节省系统资源
    不足:对用户的响应效率相对较低

从表面上看,application context 如同 bean factory 一样具有 bean 定义、bean 关联关系的设
置,根据请求分发 bean 的功能。但 applicationcontext 在此基础上还提供了其他的功能。

  • 提供了支持国际化的文本消息
  • 统一的资源文件读取方式
  • 已在监听器中注册的 bean 的事件

IoC的本质

  • 控制反转IoC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一种方法,也有人认为 DI只是IoC的另一种说法。没有IoC的程序中, 我们使用面向对象编程 ,对象的创建与对象间的依赖关系完全硬编码在程序中,对象的创建由程序自己控制,控制反转后将对象的创建转移给第三方,个人认为所谓控制反转就是:获得依赖对象的方式反转了。

  • IoC是Spring框架的核心内容,使用多种方式完美的实现了IoC,可以使用XML配置,也可以使用注解,新版本的Spring也可以零配置实现IoC。
    Spring容器在初始化时先读取配置文件,根据配置文件或元数据创建与组织对象存入容器中,程序使用时再从Ioc容器中取出需要的对象。

  • 采用XML方式配置Bean的时候,Bean的定义信息是和实现分离的,而采用注解的方式可以把两者合为一体,Bean的定义信息直接以注解的形式定义在实现类中,从而达到了零配置的目的。

    控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IoC容器,其实现方法是依赖注入(Dependency Injection,DI)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坚定你坚定的步伐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值