很难出错的Spring5(一)—— spring介绍、IOC、HelloSpring

📅 2026/7/27 17:23:22
很难出错的Spring5(一)—— spring介绍、IOC、HelloSpring
一、Spring简介SSM三个框架——SpringMVC、Spring、MyBatis用Spring写代码比用java基础写代码还要轻松一切java代码都可以套spring框架无论是普通java项目还是web项目SSH Struct2 Spring HibernateSSM SpringMVC Spring Mybatis历史spring 全程 spring frameworkRod johnson, Spring Framework的创始人,音乐学的博士。 以interface212002年为基础于2004年发布了1.0正式版。官网Spring Framework官方下载Maven (如何用Spring?需要导两个包Spring的优点开源免费轻量级导入spring web MVC这个包就能用非入侵式导入包以后不会导致之前的项目不能用了控制翻转IOC、面向切面编程AOP支持事物的处理唯一的缺点spring发展到后期配置越来越繁琐“配置地狱”---去找springboot二、Spring 7大组成模块三、IOC思想3.1 IOC思想一句话之前是手动new 对象---变成spring统一管理开发规范需要IOC无状态的对象/用来走流程的比如controller、service、component层对象需要手动new的有状态的对象。控制反转实际上是控制权的反转① 什么的控制权 创建对象的控制权②在spring出现之前这个控制权在谁手里spring出现之后又到了谁手里spring出现之前对象是由程序去创建的所以创建对象的控制权在程序手里。spring出现之后对象是由容器创建的控制权就到了容器手里。③ 控制反转的好处是什么之前需要程序员手动创建对象一旦用户需求改变创建的对象需要改变程序就得改。而spring通过容器去创建通过xml文件传入不同的参数实现程序的控制程序并不需要改变实现了程序执行逻辑和创建对象的解耦。实现IOC思想有3种手段https://blog.csdn.net/qq_44886213/article/details/127238572?sharetypeblogdetailsharerId127238572sharereferPCsharesourceqq_44886213spm1011.2480.3001.8118spring使用的是其中依赖注入这个方式。DI依赖注入本质上就是用setter方法。3.2 依赖注入的应用实例依赖注入的应用实例其实我们早就写过了就是策略模式策略模式的“策略”就是甲方持续变更的业务程序员只需要根据甲方的需求更改、增加、删除策略部分业务部分即可。比如增加一个“火箭带着飞”的策略。【精选】设计模式二—— 策略模式其实就是面向接口编程的应用场景_接口属于策略模式吗_玛丽莲茼蒿的博客-CSDN博客四、Hello Spring创建一个空的maven项目项目下面新建一个空maven module在设置中查看maven发现我们之前更改过IDEA的自带maven为自己本地的maven成功永久设置了maven导入spring-webmvc依赖在project下面添加一个module后project有一个pom.xml文件module也有一个。我们在项目的pom.xml里导入jar包这样以后创建的所有module都不用导入了这里我用的最新版本6.0.3!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -- dependency groupIdorg.springframework/groupId artifactIdspring-webmvc/artifactId version6.0.3/version /dependency换成一个低版本的5.3.16就可以了。在resources中新建beans.xml文件把官网提供的配置信息粘进去?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beans xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd bean id... class... !-- collaborators and configuration for this bean go here -- /bean bean id... class... !-- collaborators and configuration for this bean go here -- /bean !-- more bean definitions go here -- /beans新建Hello 类spring容器—— 创建Hello类的对象在beans.xml中添加如下beanbean idhello classHello //class里填【包名】【类名】 property namestr valueHello Spring 2023 1/7/property /bean这就创建好了一个Hello类的对象spring中IOC思想的实现必须依赖于setter方法如果我们删掉了这个方法使用Spring来创建对象在spring中对象一律称为bean我们发现使用这种方法不需要new一个对象了以后我们的对象都在spring中管理需要用的时候用getBean调出来就可以了这也就是我们的IOC思想Spring容器xml文件中的beans/beans代码块包裹的部分就是spring容器往beans/beans中添加一个个的bean相当于把一个个的对象扔进这个容器里。getBean( ) 获取Hello对象 , Hello Spring!只要用了xml文件作为配置必须有如下一行代码意为“读入xml中的配置信息”也就是获取spring的上下文。//获取spring的上下文 ApplicationContext context new ClassPathXmlApplicationContext(beans.xml);7. IDEA方便使用的配置可以点一下右上角的提示然后创建bean的类就会有一个小叶子表示“这个类托管给spring了”value和ref我们在bean的priority标签给对象的属性赋值的时候有value和ref两种方式value就是直接赋值property namestr valueHello Spring 2023 1/7/propertyref就是引用也就是在这里实现的依赖注入property namestr ref 赋值为另一个对象 /property五、探究——IOC是如何创建对象的写了一个配置文件就实现了new操作底层一定帮我们做了很多事情也就是我们导入的jar包帮我们做了很多事情有一个问题spring帮助我们创建对象也是用的构造器吗实践一下就知道了我们发现spring创建对象也是调用的构造器。并且我们还发现new ClassPathXmlApplicationContext(beans.xml)这一行代码不仅加载了xml文件而且创建完毕所有对象。还有一个问题那我们只写一个有参构造器不写无参构造器还能创建成功吗有了上面“spring创建对象也是调用构造器”这一结论现在没有了无参构造器自然就不能创建成功了5.1 无参构造创建对象这也是spring默认的方式。上面我们我们的实践都是调用的无参构造器5.2 有参构造器创建对象Hello类设置了3个属性private String str; private int date; private Part part; public Hello(){ } public Hello(String str, int date,Part part){ this.str str; this.date date; this.part part; }方式一下标赋值bean idpart classPart/bean bean idhello classHello constructor-arg index0 valueHello Spring/ constructor-arg index1 value7 / constructor-arg index2 refpart/ !--给引用赋值用ref-- /bean方式二类型赋值不建议使用bean idpart classPart/bean bean idhello classHello constructor-arg typejava.lang.String valueHello Spring/ constructor-arg typeint value7 / constructor-arg typePart refpart/ /beanPS: String这种以前需要import的java常用类要写全路径PS:当一个类中有两个String类型时就没法用了方式三参数名赋值bean idpart classPart/bean bean idhello classHello constructor-arg namestr valueHello Spring/ constructor-arg namedate value7 / constructor-arg namepart refpart/ /bean