Spring入门与常用配置

什么是Spring

 SpringSE/EE开发的一站式框架。

     一站式框架:有EE开发的每一层解决方案。

     WEB SpringMVC

      Service SpringBean管理,Spring声明式事务

     DAO SpringJdbc模板,SpringORM模块

为什么学习Spring

 Spring的入门(IOC

什么IOC?

IOC: Inversion of Control(控制反转)

  控制反转:将对象的创建权反转给(交给)Spring

下载Spring的开发包

官网:http://spring.io/

 

 docs Spring的开发规范和API

libs Spring的开发的jar和源码

schema Spring的配置文件的约束

创建web项目,引入jar包

 

创建接口和类

问题:如果底层的实现切换了,需要修改源代码,能不能不修改程序源代码对程序进行扩展?

将实现类交给Spring管理

spring的解压路径下spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html\xsd-configuration.html

 

编写测试类

编写userDAO和userDAOImp

userDAO

public interface userDAO {public void save();
}

 userDAOImp

public class userDAOImp implements userDAO {@Overridepublic void save() {System.out.println("userDAOImp执行了......");}
}

 设置spring的xml applicationContext.xml   可以随意命名

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:p="http://www.springframework.org/schema/p"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">
<!--spring入门的配置--><bean id="userDAO" class="spring.learn.userDAOImp"></bean>
</beans>

 最后编写SpringDemo1对功能进行实现

package spring.learn;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class SpringDemo1 {//传统的调用方式public void demo1(){userDAO userDAO=new userDAOImp();userDAO.save();}//Spring的方式的调用public void demo2(){//创建Spring的工厂ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");userDAO userDAO=(userDAO)applicationContext.getBean("userDAO");userDAO.save();}public static void main(String[] args) {SpringDemo1 springDemo1=new SpringDemo1();springDemo1.demo1();springDemo1.demo2();}
}

结果显示

IOCDI*****

IOC:控制反转,将对象的创建权反转给了Spring。
DI:依赖注入,前提必须有IOC的环境,Spring管理这个类的时候将类的依赖的属性注入(设置)进来。
面向对象的时候
依赖
Class A{}Class B{public void xxx(A a){}
}
继承:is a
Class A{}
Class B extends A{}

Spring的工厂类

Spring工厂类的结构图

ApplicationContext继承BeanFactory

    BeanFactory:老版本的工厂类        BeanFactory:调用getBean的时候,才会生成类的实例。

 ApplicationContext:新版本的工厂类

ApplicationContext:加载配置文件的时候,就会将Spring管理的类都实例化。

ApplicationContext有两个实现类

ClassPathXmlApplicationContext:加载类路径下的配置文件

FileSystemXmlApplicationContext :加载文件系统下的配置文件

Bean的相关配置

<bean>标签的id和name的配置

  id :使用了约束中的唯一约束。里面不能出现特殊字符的。

        name :没有使用约束中的唯一约束(理论上可以出现重复的,但是实际开发不能出现的)。里面可以出现特殊字符。

           SpringStruts1框架整合的时候

           <bean name=”/user” class=””/>

1Bean的生命周期的配置(了解)

        init-method :Bean被初始化的时候执行的方法

  • destroy-method :Bean被销毁的时候执行的方法(Bean是单例创建,工厂关闭)

Bean的作用范围的配置(重点)

scope    :Bean的作用范围 

  1. singleton:默认的,Spring会采用单例模式创建这个对象。
  2.  prototype:多例模式。(Struts2Spring整合一定会用到)
  3.  request :应用在web项目中,Spring创建这个类以后,将这个类存入到request范围中。
  4. session :应用在web项目中,Spring创建这个类以后,将这个类存入到session范围中。
  5.  globalsession :应用在web项目中,必须在porlet环境下使用。但是如果没有这种环境,相对于session

 Spring的Bean实例化方式(了解)

Bean已经都交给Spring管理,Spring创建这些类的时候,有几种方式:

无参构造的方式(默认)

编写无参构造类 

public class Bean1 {public Bean1(){System.out.println("Bean1的无参构造方法执行了......");}
}
<!--配置无参构造方法--><bean id="bean1" class="spring.learn.demo1.Bean1"></bean>

实现功能

public class SpringDemo1 {public static void main(String[] args) {//创建Spring的工厂ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");Bean1 bean1=(Bean1) applicationContext.getBean("bean1");}
}

静态工厂实例化方式

 配置

实例工厂实例化的方式

 配置

 Spring的属性注入

构造方法属性注入

编写类

public class Car {public String name;public double price;public Car(String name,double price){this.name=name;this.price=price;}@Overridepublic String toString() {return "Car{" +"name='" + name + '\'' +", price=" + price +'}';}
}
 <!--构造方法的方式注入--><bean id="car" class="spring.learn.demo2.Car"><constructor-arg name="name" value="宝马" /><constructor-arg name="price" value="800000" /></bean>

实现

public class SpringDemo2 {public static void main(String[] args) {//创建Spring的工厂ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");Car car=(Car)applicationContext.getBean("car");System.out.println(car.toString());}
}

set方法方式的属性注入

public class Car2 {public String name;public double price;public void setName(String name) {this.name = name;}public void setPrice(double price) {this.price = price;}@Overridepublic String toString() {return "Car2{" +"name='" + name + '\'' +", price=" + price +'}';}
}

 配置

<!--Set方法的方式的属性注入--><bean id="car2" class="spring.learn.demo2.Car2"><property name="name" value="奔驰" /><property name="price" value="10000000000" /></bean>

 实现方式

public class SpringDemo2 {public static void main(String[] args) {//创建Spring的工厂ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");Car2 car2=(Car2)applicationContext.getBean("car2");System.out.println(car2.toString());}
}

set方法设置对象类型的属性

public class Employee {public String name;public Car2 car2;public void setName(String name) {this.name = name;}public void setCar2(Car2 car2) {this.car2 = car2;}@Overridepublic String toString() {return "Employee{" +"name='" + name + '\'' +", car2=" + car2 +'}';}
}

配置

<!--Set方法的方式的属性注入--><bean id="car2" class="spring.learn.demo2.Car2"><property name="name" value="奔驰" /><property name="price" value="10000000000" /></bean><!--Set方法设置对象类型的属性--><bean id="employee" class="spring.learn.demo2.Employee"><!--Value:设置普通类型的值,ref设置其他类的id或者name--><property name="name" value="zyz" /><property name="car2" ref="car2" /></bean>

实现

public class SpringDemo3 {public static void main(String[] args) {//创建Spring的工厂ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");Employee employee=(Employee)applicationContext.getBean("employee");System.out.println(employee.toString());}
}

 P名称空间的属性注入(Spring2.5以后)

    通过引入p名称空间完成属性的注入:

      写法:

        普通属性 p:属性名=

        对象属性 p:属性名-ref=

 p名称空间的引入

使用p名称空间

 SpEL的属性注入(Spring3.0以后)

     SpELSpring Expression LanguageSpring的表达式语言。

 

集合类型属性注入(了解)

<!-- 注入数组类型 -->

 

import java.util.Arrays;public class CollectionBean {public String arr[];public void setArr(String[] arr) {this.arr = arr;}@Overridepublic String toString() {return "CollectionBean{" +"arr=" + Arrays.toString(arr) +'}';}
}
<!--注入数组类型--><bean id="collectionBean" class="spring.learn.demo2.CollectionBean"><!--数组类型的--><property name="arr"><list><value>王东</value><value>赵洪</value><value>李冠希</value></list></property></bean>
public void arrdemo1(){//创建Spring的工厂ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");CollectionBean collectionBean=(CollectionBean)applicationContext.getBean("collectionBean");System.out.println(collectionBean.toString());}

 

 

<!--注入list集合-->

import java.util.List;public class ListBean {public List list;public void setList(List list) {this.list = list;}@Overridepublic String toString() {return "ListBean{" +"list=" + list +'}';}
}
<!--注入list集合--><bean id="listBean" class="spring.learn.demo2.ListBean"><property name="list"><list><value>王东</value><value>赵洪</value><value>李冠希</value></list></property></bean>
public void listdemo1(){//创建Spring的工厂ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");ListBean listBean=(ListBean)applicationContext.getBean("listBean");System.out.println(listBean.toString());}

 

注入Set集合

import java.util.Set;public class SetBean {public Set set;public void setSet(Set set) {this.set = set;}@Overridepublic String toString() {return "SetBean{" +"set=" + set +'}';}
}
<!--注入Set集合--><bean id="setBean" class="spring.learn.demo2.SetBean"><property name="set"><set><value>aaa</value><value>bbb</value><value>ccc</value></set></property></bean>
public void setdemo1(){//创建Spring的工厂ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");SetBean setBean=(SetBean)applicationContext.getBean("setBean");System.out.println(setBean.toString());}

 

注入Map集合

import java.util.Map;public class MapBean {public Map map;public void setMap(Map map) {this.map = map;}@Overridepublic String toString() {return "MapBean{" +"map=" + map +'}';}
}
<!--注入Map集合--><bean id="mapBean" class="spring.learn.demo2.MapBean"><property name="map"><map><entry key="aaa" value="111"/><entry key="bbb" value="222"/><entry key="ccc" value="333"/></map></property></bean>
public void mapdemo1(){//创建Spring的工厂ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");MapBean mapBean=(MapBean)applicationContext.getBean("mapBean");System.out.println(mapBean.toString());}

 

Spring的分模块开发的配置

在加载配置文件的时候,加载多个

 

 

在一个配置文件中引入多个配置文件

 

转载于:https://www.cnblogs.com/byczyz/p/11588133.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/386163.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MMKV集成与原理,详细学习指南

前言 本文主要是javascript和css方面的基础面试题&#xff0c;适合面试前以及平时复习食用。 基础知识是前端一面必问的&#xff0c;如果你在基础知识这一块翻车了&#xff0c;就算你框架玩的再6&#xff0c;webpack、git、node学习的再好也无济于事&#xff0c;因为对方就不…

第五周课程总结实验报告(三)

实验三 String类的应用 一、实验目的 &#xff08;1&#xff09; 掌握类String类的使用&#xff1b; &#xff08;2&#xff09; 学会使用JDK帮助文档&#xff1b; 二、实验内容 1.已知字符串&#xff1a;"this is a test of java".按要求执行以下操作&#xff1a;&a…

MMKV集成与原理,赶紧学起来

开头 Web前端开发基础知识学习路线分享&#xff0c;前端开发入门学习三大基础&#xff1a;HTML、CSS、JavaScript。除此之外还要学习数据可视化、Vue、React、Angular相关框架&#xff0c;熟练运用框架提升开发效率&#xff0c;提升稳定性。 [外链图片转存失败,源站可能有防盗…

MMKV集成与原理,轻松拿下offer

从事前端开发工作差不多3年了&#xff0c;自己也从一个什么都不懂的小白积累了一定的理论和实践经验&#xff0c;并且自己也对这3年来的学习实践历程有一个梳理&#xff0c;以供后面来细细回忆品味。 1、为什么选择学习前端开发&#xff1f; 你可能是因为兴趣&#xff0c;完成…

React面试题总结,一文说清!

前言 JavaScript是面向 Web 的编程语言&#xff0c;获得了所有网页浏览器的支持&#xff0c;是目前使用最广泛的脚本编程语言之一&#xff0c;也是网页设计和 Web 应用必须掌握的基本工具。 JavaScript主要用途 嵌入动态文本与HTML页面对浏览器时间做出相应读写HTML元素在数…

React面试题总结,含爱奇艺,小米,腾讯,阿里

前言 校招 -1 年 这个阶段还属于成长期&#xff0c;更需要看重的是你的基础和热情。对于 JS 基础&#xff0c;计算机基础&#xff0c;网络通信&#xff0c;算法等部分的要求会相对高一些。毕竟这个阶段比较难考察你的业务项目中的沉淀&#xff0c;所以只能从基础部分入手考察。…

React面试题总结,就是这么简单

前言 昨天有幸去字节面试了&#xff0c;顺便拿到了offer&#xff0c;把还记得的东西写下来&#xff0c;供大家参考一下。 计算机网络篇 HTTP HTTP 报文结构是怎样的&#xff1f;HTTP有哪些请求方法&#xff1f;GET 和 POST 有什么区别&#xff1f;如何理解 URI&#xff1f;如…

CSS清除默认样式,成功入职腾讯

前言 又逢金三银四&#xff0c;拿到大厂的offer一直是程序员朋友的一个目标&#xff0c;我是如何拿到大厂offer的呢&#xff0c;今天给大家分享我拿到大厂offer的利器&#xff0c;前端核心知识面试宝典&#xff0c;内容囊括Html、CSS、Javascript、Vue、HTTP、浏览器面试题\数…

CSS清除默认样式,技术详细介绍

前言 JavaScript是面向 Web 的编程语言&#xff0c;获得了所有网页浏览器的支持&#xff0c;是目前使用最广泛的脚本编程语言之一&#xff0c;也是网页设计和 Web 应用必须掌握的基本工具。 JavaScript主要用途 嵌入动态文本与HTML页面对浏览器时间做出相应读写HTML元素在数…

CSS清除默认样式,看完这篇彻底明白了

前端的兴起 前端真正兴起和开始频繁出现在大家的视线里&#xff0c;大概是在十年前。彼时的 Web 开发基本是由后端主导&#xff0c;前端能做的只是校验一下数据、操作一下 DOM。&#xff08;其中数据检验是 JS 产生的根本原因&#xff1a;当时网络太慢&#xff0c;在服务端检验…

CSS清除默认样式,经典好文

前言 不要为了面试而去背题&#xff0c;匆匆忙忙的&#xff0c;不仅学不进去&#xff0c;背完了几天后马上会忘记。 你可能会说&#xff0c;“没办法&#xff0c;这不是为了能找份工作嘛&#xff01;”。我想说的是&#xff0c;“那你没开始找工作的时候&#xff0c;咋不好好…

java实现k-means算法(用的鸢尾花iris的数据集,从mysq数据库中读取数据)

k-means算法又称k-均值算法&#xff0c;是机器学习聚类算法中的一种&#xff0c;是一种基于形心的划分方法&#xff0c;其中每个簇的中心都用簇中所有对象的均值来表示。其思想如下&#xff1a; 输入&#xff1a; k&#xff1a;簇的数目&#xff1b;D&#xff1a;包含n个对象的…

CSS清除默认样式,聪明人已经收藏了!

1、ant-design的使用总结及常用组件和他们的基本用法? ant-design为React&#xff0c;Angular和Vue都提供了组件&#xff0c;同时为PC和移动端提供了常用的基础组件。ant-design提供的demo非常的丰富并且样式能够基本的覆盖开发需求。antd的Demo因为是多人编写的&#xff0c;…

浅谈“==”、equals和hashcode,以及map的遍历方法(可用作上一篇k-means博文参考)

前不久看到一个公司的面试题&#xff0c;问到“”和“equals”的区别&#xff0c;些许上答不上来&#xff0c;于是木羊搜索并整理了一下。此外&#xff0c;木羊前面写了k-means算法实现的博文&#xff0c;其中提到要重写equals和hashcode类&#xff0c;看完这篇博文&#xff0c…

CSS清除默认样式,面试篇

前言 过完年了&#xff0c;准备实习的你是已经在实习了&#xff0c;还是已经辞职回家过年&#xff0c;准备年后重新找工作呢&#xff0c;又或者是准备2021年春招&#xff1f; 那么还没没踏出校门或者是刚出校门没多久的同学们该如何准备前端校招的面试呢&#xff1f; 学习建议…

CSS的三种基础选择器,面试必问

前言 最近在准备面试&#xff0c;然后复习下之前写过的项目&#xff0c;书籍&#xff0c;笔记&#xff0c;文章。一看很多知识点都没有印象&#xff0c;最可拍的是连自己为了防止忘记写的文章竟然都感觉不是自己写的。有些开始怀疑人生了。 好了&#xff0c;废话少说&#xf…

html知识笔记(一)——head和body标签

标签的用途&#xff1a;我们学习网页制作时&#xff0c;常常会听到一个词&#xff0c;语义化。那么什么叫做语义化呢&#xff0c;说的通俗点就是&#xff1a;明白每个标签的用途&#xff08;在什么情况下我可以使用这个标签才合理&#xff09;比如&#xff0c;网页上的文章的标…

CSS的三种定位,100%好评!

前言 跳槽&#xff0c;这在 IT 互联网圈是非常普遍的&#xff0c;也是让自己升职加薪&#xff0c;走上人生巅峰的重要方式。那么作为一个普通的Android程序猿&#xff0c;我们如何才能斩获大厂offer 呢&#xff1f; 疫情向好、面试在即&#xff0c;还在迷茫踌躇中的后浪们&…

CSS的三种定位,成功入职字节跳动

前言 校招 -1 年 这个阶段还属于成长期&#xff0c;更需要看重的是你的基础和热情。对于 JS 基础&#xff0c;计算机基础&#xff0c;网络通信&#xff0c;算法等部分的要求会相对高一些。毕竟这个阶段比较难考察你的业务项目中的沉淀&#xff0c;所以只能从基础部分入手考察。…

html知识笔记(三)——img标签、form表单

<img>标签&#xff1a;在网页中插入图片。 语法&#xff1a; <img src"图片地址" alt"下载失败时的替换文本" title "提示文本"> 举例&#xff1a; <img src "myimage.gif" alt "My Image" title "…