Java --- Spring6项目创建及注意事项
创始人
2024-02-01 17:03:52

目录

一、Spring框架解决的问题

 二、Spring介绍

三、Spring八大模块

 四、Spring特点

五、第一个Spring6入门程序

 六、spring的细节

6.1、配置文件的bean的id不能重复

6.2、spring底层是通过反射调用无参构造方法创建对象

6.3、spring会把创建好的对象存储在Map集合中

 6.4、Spring的配置文件名不是固定的

 6.5、spring的配置文件可以为多个

6.6、配置文件的类不是必须为自定义类,可以是JDK中的类

 6.7、Spring中调用getBean()方法中的id不存在

 6.8、使用getBean()方法解决类型强转问题

6.9、加载配置文件不在类路径下方法

6.10、通过XmlBeanFactory获取Spring的容器

一、Spring框架解决的问题

1、Spring框架实现了控制反转IoC这种思想,对象的创建(new)和对象间的关系维护由Spring框架帮我们完成。

2、Spring是一个实现了IoC思想的容器。

3、控制反转的实现方式有多种,依赖注入(Dependency Injection)是比较重要的一种。

4、控制反转是思想,依赖注入是这种思想的具体实现。

5、依赖注入,常见的有两种方式:set注入(执行set方法给属性赋值),构造方法注入(执行构造方法给属性赋值)。

6、依赖:对象与对象的关系。注入:是一种手段,让对象和对象产生关系。通过依赖注入,对象和对象之间的关系,依靠注入的手段来维护。

 二、Spring介绍

1、Spring是一个开源框架,由Rod Johnson创建,它主要为了解决企业应用开发的复杂性而创建的。

2、Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

3、Spring最初的出现是为了解决EJB臃肿的设计,以及难以测试等问题。

4、Spring是为了简化开发而生的,程序员只需要关注核心业务,尽可能不再关注非业务逻辑的代码。

三、Spring八大模块

在Spring5之前是七大模块,在Spring5时加入了Webflux模块。

 四、Spring特点

1、轻量:①、从大小和开销两个方面而言Spring都是轻量级的,完整的Spring框架可以在一个大小只有1MB多的jar文件里发布。并且Spring所需的处理开销也是微不足道的。②、Spring是非侵入式的:Spring应用中的对象不依赖于Spring的特定类。

2、控制反转:①、Spring通过一种称控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象,也可以认为IoC与JNDI相反,不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。

3、面向切面:Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统服务(如审计(auditing)和事务(transacting)管理)进行内聚性的开发。应用对象只实现它们应该做的-----完成业务逻辑----仅此而已。它们并不负责其它系统级关注点,例如日志或事务支持。

4、容器:Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,可以配置你的每个bean如何被创建----基于一个可配置原型(prototype),我们的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例-----以及它们是如何相互关联的,然而,Spring不应该被混同于传统的重量级的EJB容器,它们是庞大与笨重的,难以使用。

5、框架:Spring可以将简单的组件配置,组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理,持久化框架集成等),将应用逻辑开发留给了程序员。

所有Spring的这些特征能够使我们编写更干净、更可管理、并更于测试的代码。它们也为Spring中的各种模式提供了基础支持

五、第一个Spring6入门程序

官网地址:Spring | Home

创建Spring6项目 

 在pom.xml写入依赖并导入

jar1717repository.spring.milestoneSpring Milestone Repositoryhttps://repo.spring.io/milestoneorg.springframeworkspring-context6.0.0-M2junitjunit4.13.2test

创建一个实体类

/*** 封装了用户信息*/
public class User {
}

在spring.xml中配置bean



在测试类中进行测试:

public class UserTest {@Testpublic void testUser(){/*** 获取Spring容器对象* ApplicationContext:是一个接口,其实就是Spring容器* ClassPathXmlApplicationContext:是ApplicationContext接口的一个实现类* 专门从类路径中加载spring配置文件的一个spring上下文对象。* 执行本行代码:相当于启动了spring容器,解析spring.xml文件,并且实例化所以的bean对象,放在spring容器中。*/ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");//根据bean的id从spring容器中获取这个对象Object userBean = applicationContext.getBean("userBean");System.out.println(userBean);}
}

测试结果:

 六、spring的细节

6.1、配置文件的bean的id不能重复

 直接报错:

org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Bean name 'userBean' is already used in this element
Offending resource: class path resource [spring.xml]

6.2、spring底层是通过反射调用无参构造方法创建对象

/*** 默认情况下Spring会通过反射机制,调用类的无参构造方法来实例化对象* 实现原理:* Class class = Class.forName("com.cjc.spring6.bean.User");* class.newInstance;*/public User() {System.out.println("User无参构造方法被调用");}

6.3、spring会把创建好的对象存储在Map集合中

 6.4、Spring的配置文件名不是固定的

 6.5、spring的配置文件可以为多个

 @Testpublic void testUser(){/*** 获取Spring容器对象* ApplicationContext:是一个接口,其实就是Spring容器* ClassPathXmlApplicationContext:是ApplicationContext接口的一个实现类* 专门从类路径中加载spring配置文件的一个spring上下文对象。* 执行本行代码:相当于启动了spring容器,解析spring.xml文件,并且实例化所以的bean对象,放在spring容器中。*/ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring1.xml","spring2.xml");//根据bean的id从spring容器中获取这个对象Object userBean = applicationContext.getBean("userBean1");Object userBean2 = applicationContext.getBean("userBean2");System.out.println(userBean);System.out.println(userBean2);}

6.6、配置文件的类不是必须为自定义类,可以是JDK中的类

@Testpublic void testJDK(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring1.xml");Object jdkBean = applicationContext.getBean("JDKBean");System.out.println(jdkBean);}

 6.7、Spring中调用getBean()方法中的id不存在

 id不存在直接报错

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'JDKBean1' available

 6.8、使用getBean()方法解决类型强转问题

@Testpublic void testJDK(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring1.xml");//Date jdkBean = (Date) applicationContext.getBean("JDKBean");//使用getBean的第二参数来解决类型强转问题Date jdkBean = applicationContext.getBean("JDKBean", Date.class);SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println(simpleDateFormat.format(jdkBean));}

6.9、加载配置文件不在类路径下方法

@Testpublic void getPath(){//FileSystemXmlApplicationContext:不是从类路径中加载资源ApplicationContext applicationContext = new FileSystemXmlApplicationContext("D:\\spring6\\spring02\\spring02\\src\\spring2.xml");Object userBean2 = applicationContext.getBean("userBean2");System.out.println(userBean2);}

6.10、通过XmlBeanFactory获取Spring的容器

@Testpublic void getBeanFactory(){/*** ApplicationContext接口的父接口是 :BeanFactory(能够生产Bean对象的一个工厂对象)* BeanFactory是IoC容器的顶级接口* Spring的IoC容器实际上使用的就是工厂模式* Spring底层IoC容器实现的原理:XML解析+工厂模式+反射机制*/BeanFactory beanFactory  = new ClassPathXmlApplicationContext("spring1.xml");System.out.println(beanFactory.getBean("userBean1"));}

相关内容

热门资讯

应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...