spring基础(1:基本概念)

本系列笔记来自对《Spring实战》第三版的整理,Spring版本为3.0   spring是为了解决企业级应用开发的复杂性而创建的,spring最根本的使命是:简化Java开发。为降低开发复杂性有以下四种关键策略。

  • 基于POJO的轻量级和最小侵入性编程
  • 通过依赖注入和面向接口实现松耦合
  • 基于切面和惯例进行声明式编程
  • 通过切面和模板减少样板式代码

1.依赖注入

​  假设类A依赖类B,通常做法是在类A中声明类B,然后使用,这样一方面具有极高的耦合性,将类A与类B绑定在一起;另一方面也让单元测试变得很困难,无法在A外部获得B的执行情况。

​  通过依赖注入,对象的依赖管理将不用对象本身来管理,将由一个第三方组件在创建对象时设定,依赖关系将被自动注入到对应的对象中去。

2.创建应用上下文

  • ClassPathXmlApplicationContext()从类路径创建
  • FileSystemXmlApplicationContext()读取文件系统下的xml配置
  • XmlWebApplicationContext() 读取web应用下的XML配置文件并装载上下文定义

3.声明Bean

  1. 最简单 <bean id="bean1" class="com.example.Class"/>
  2. 带构造器 <bean id="bean1" class="com.example.Class"> <contructor-arg value="12"/> //基本数据类型使用value <contructor-arg ref="bean2"/> //对象使用ref </bean>
  3. 通过工厂方法创建 如果想声明的Bean没有一个公开的构造函数,通过factory-method属性来装配工厂生产的Bean <bean id="bean1" class="com.example.class" factory-method="getInstance"/>//getInstance为获取实例的静态方法。

4.Bean的作用域

​ 所有Spring Bean默认都是单例的。通过配置scope属性为prototype可每次请求产生一个新的实例。

<bean id="bean3" class="com.example.class" scope="prototype">

scope可选值:

  • singleton:每个容器中,一个Bean对象只有一个实例。(默认
  • prototype:允许实例化任意次 ,每次请求都会创建新的
  • request:作用域为一次http请求
  • session:作用域为一个http session会话
  • global-session:作用域为一个全局http session,仅在Protlet上下文中有效

5.初始化和销毁Bean

​ 当实例化需要执行初始化操作,或者销毁时需要执行清理工作。两种实现方式:

  1. xml配置,类中编写初始化方法和销毁方法,在bean中定义。 <bean id="bean4" class="com.example.Class" init-method="start" destroy-method="destroy"/> 也可在Beans中定义默认初始化和销毁方法。 <beans . . . default-init-method="" default-destroy-method=""/>
  2. 实现InitializingBeanDisposableBean接口

6.setter注入

​ 在bean中使用<property>元素配置属性,使用方法类似于<constructor-arg>

<property name="name" value="fxg"/> //注入基本数据类型
<property name="sex" ref="sex"/>  //注入类
可使用p简写,**-ref**后缀说明装配的是一个引用
<bean id="bean5" class="com.example.class" 
                p:name="fxb" 
                p:sex-ref="sex"/>

7.注入内部Bean

​ 既定义其他Bean内部的Bean,避免共享问题,可在属性节点或者构造器参数节点上使用。

<property name="sex">
    <bean class="com.example.sex"/>  //没有id属性,因为不会被其他bean使用
</property>
<constructor-arg>
    <bean class="com.example.sex"/>
</constructor-arg>

8.装配集合

集合元素

用途

<list>

装配list类型,允许重复

<set>

set,不能重复

<map>

map类型

<props>

properties类型,键值都为String

  • list <property name="instruments"> <list> <ref bean="guitar"/> <ref bean="cymbal"/> <ref bean="harmonica"/> </list> </property> <ref>用来定义上下文中的其他引用,还可使用<value>,<bean>,<null/>
  • set <set> <ref bean="fasdf"/> </set> 用法和list相同,只是不能重复
  • Map <map> <entry key="GUITAR" value-ref="guitar"/> </map> entry元素由一个key,一个value组成,分别有两种形式。 key 键为String key-ref 键为Bean的引用 value 值为String value-ref 值为Bean的引用
  • props <props> <prop key="GUITAR">guitar</prop> </props> 键值都是String

9.装配空值

<property name="name"><null/></property>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术记录

通讯协议序列化解读(一) Protobuf详解教程

55270
来自专栏大闲人柴毛毛

跟着柴毛毛学Spring(1)——纵观Spring

Spring根本任务 Spring的根本任务就是简化Java开发。 目前许多框架如果要使用他们,就必须要继承或实现这些框架的各种类。这使得框架与我们的程序...

35340
来自专栏一名合格java开发的自我修养

spring常用注解使用解析

spring没有采用约定优于配置的策略,spring要求显示指定搜索哪些路径下的Java文件。spring将会把合适的java类全部注册成spring Bean...

8610
来自专栏java闲聊

# SpringBoot thymeleaf基本使用

52040
来自专栏pangguoming

Spring mvc整合freemarker详解

16050
来自专栏云计算与大数据

研发:学习shell中的特殊字符01

部分引用[双引号, 即"]. "STRING"将会阻止(解释)STRING中大部分特殊的字符

8630
来自专栏武培轩的专栏

Runtime源码解析(JDK1.8)

package java.lang; import sun.reflect.CallerSensitive; import sun.reflect.Refle...

36990
来自专栏阮一峰的网络日志

Generator 函数的含义与用法

本文是《深入掌握 ECMAScript 6 异步编程》系列文章的第一篇。 Generator函数的含义与用法 Thunk函数的含义与用法 co函数库的含义与...

37360
来自专栏ImportSource

原来JVM中的堆栈TM这么简单!

二话不说先上图! ? 好,也许你已经懂了,如果想更懂,请看今天的正文! ---- 以下是正文: 也许你会在网上查询到很多有关栈啊,堆啊的很多内容,或者一些jav...

56690
来自专栏weixuqin 的专栏

JSP 语法

脚本程序可以包含任意量的Java语句、变量、方法或表达式,只要它们在脚本语言中是有效的。(其中声明的变量为局部变量)

13620

扫码关注云+社区

领取腾讯云代金券