日升时奋斗,日落时自省
目录
1、创建Spring项目
1.1、创建Maven项目
1.2、添加Spring框架支持
1.3、添加启动类
2、存储Bean对象
2.1、创建Bean
2.2、将Bean注册到容器
3、获取并使用Bean对象
3.1、创建Spring上下文
3.2、获取指定的Bean对象
3.2.1、Id获取Bean对象
3.2.2、类名获取Bean对象
3.2.3、id加类名获取Bean对象
3.3、ApplicationContext与BeanFactory区别
3.3.1、功能区别
3.3.2、性能区别
4、总结
1、创建Spring项目
创建Spring项目我们使用的还是Maven方式来创建一个Spring项目,创建Spring项目和Servlet类似,步骤大体不会有很大的变化
<1>首先创建一个Maven项目
<2>添加Spring框架支持(这个一会会给友友们说怎么弄,并且这里会给大家提供)
<3>添加启动类
这里先给友友们说一下,我这里使用的是Idea2021版本的,可能界面可能会有所差异,如果感觉差异让人恐惧的话建议换成2021版本的Idea(让你我同步),其实也是因为好用。(挨个来)
1.1、创建Maven项目
1.2、添加Spring框架支持
第一次创建好Maven需要稍微等等,等Maven加载完成
导入Spring的依赖 从中央仓库导入依赖(下面给了一个url就是中央仓库的)
Maven 存储库:搜索/浏览/探索 (mvnrepository.com)
注: 上述的操作步骤和Servlet添加依赖的步骤大体是一样的
1.3、添加启动类
启动类就是main方法的一个类,用于启动程(这里暂时创建下来也看不到啥结果,后面创建Bean对象以后在给友友们展示启动类代码)
2、存储Bean对象
存储Bean分为以下2步:
<1>存储Bean之前,先得有Bean才行,因此先要创建一个Bean
<2>创建Bean注册到Spring容器中
2.1、创建Bean
在创建之前,还有一个很重要的点,就是配置国内源,为了以后解决问题不配置之后,很多jar包就不能加载出来(如何配置国内源)
<1>有settings文件情况
添加国内源
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<2>没有settings文件情况(去这里取)
settings文件
创建一个Bean对象,就是java中的一个普通对象,只是对象是从Spring中取出来的
2.2、将Bean注册到容器
在创建好的Maven项目中,还需要添加Spring的配置文件,文件名.xml (以.xml为后缀的配置文件),将此文件放到resource的根目录下(我们这里就给这个配置文件起一个比较专业的名字叫做spring-config.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" 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"> <content:component-scan base-package="com.bit.service"></content:component-scan> </beans>
此时我们创建一个类来演示一下,如何将类对象注入到Spring中,其中会操作到bean标签(在刚刚Spring配置文件中)
3、获取并使用Bean对象
获取并使用Bean对象,步骤分为3步,其实也就是三行关键代码
<1>得到Spring上下文对象,因为对象都交给Spring管理了,所以获取对象要从Spring中获取,首先我们就先要知道Spring的上下文(不是多高级的东西,就是Spring中都有啥,拿到配置文件,看看了里面都存了谁的类对象)
<2>通过Spring上下文,获取某一个指定的Bean对象
<3>使用Bean对象
3.1、创建Spring上下文
创建Spring上下文对象使用两个类,先拿当前比较常看见就是ApplicationContext代码如下
ApplicationContext context=new ClassPathXmlApplicationContext("spring-config.xml");
现在来解释这个代码:new 的对象是Applicationontext的一个子类,参数就是Spring配置文件(我们刚刚创建的那个文件)
还有另外一个类BeanFactory
创建方式有所不同(最后会对比这两个类)
BeanFactory context=new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
3.2、获取指定的Bean对象
3.2.1、Id获取Bean对象
public class App {
public static void main(String[] args) {
ApplicationContext context=new ClassPathXmlApplicationContext("spring-config.xml");
User user=(User) context.getBean("user");
user.sayHi();
}
}
缺点:但是这个方法获取Bean对象并不保险(不安全的意思),如果Bean标签还是有id与其相同的类对象呢,那就会有问题
3.2.2、类名获取Bean对象
虽然看着很美观而且也解决了强转问题,但是仍然有问题
缺点:但是同一个类中可能有多个Bean对象,这样的话就报错了(这个错误来展示一下)
3.2.3、id加类名获取Bean对象
User user=context.getBean("user",User.class);
public class App {
public static void main(String[] args) {
ApplicationContext context=new ClassPathXmlApplicationContext("spring-config.xml");
User user=context.getBean("user",User.class);
user.sayHi();
}
}
优点:相当于前两个,算是一个综合版本的获取Bean对象,能够准确的拿到对应的Bean对象
3.3、ApplicationContext与BeanFactory区别
3.3.1、功能区别
继承关系:两者成继承关系,BeanFactory是ApplicationContext的父类(这里来看一下相关的关系)
ApplicationContext优点:功能方面:除了继承了BeanFactory的所有功能之外,它还拥有了独特的特性,添加了国际化支持,资源访问支持,以及事件传播等方面的支持
3.3.2、性能区别
性能区别在于加载这块上,但是加载早了就比较费空间,但是现在不会太影响,因为空间确实很大,不够了也可以买,也不贵
区别总结:ApplicationContext是一次性加载并初始化所有的Bean对象,而BeanFactory是需要那个才去加载那个,因此更加轻量
4、总结
总结一下操作的流程
注:BeanFactory 和 ApplicationContext没有本质上的好坏,视情况而定使用,在不考虑空间的情况下,想快一点使用ApplicationContext,想节省空间,不是很注重执行速度可以考虑BeanFactory
提示:错别字可能影响观看,友友们评论点出,看见后立即修改