1.Spring

(1)Spring是什么?

是一个轻量级的、用来简化企业级应用开发的开发框架。

注:
a.简化开发:
Spring对常用的api做了简化,比如,使用Spring
jdbc来访问数据库,就不用再考虑如何获取连接、关闭连接、处理异常等等。
b.解耦:
Spring容器(Spring框架的一个模块)帮我们管理
对象(包括对象的创建及对象之间的依赖关系),
这样一来,对象之间的耦合度会大大降低,提供高了
系统的维护性。
c.集成其它框架:
Spring可以将其它一些常用的框架集成进来,比如
可以将Quartz,MyBatis等集成进来。

(2)Spring容器

1)Spring容器是什么?

Spring框架的一个核心模块,用于管理对象。

注:
管理对象指的是,spring容器会用我们创建对象,
并且建立对象之间的依赖关系。

2)如何启动Spring容器?

step1.导包。

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.2.8.RELEASE</version>
</dependency>

step2.添加配置文件(applicationContext.xml)。

将配置文件添加到main/resources下。

step3.启动Spring容器。

ApplicationContext ac =
new ClassPathXmlApplicationContext(
"applicationContext.xml");

3)创建对象

a.方式一  使用无参构造器

step1. 给类添加无参构造器(缺省构造器)。
step2. 在配置文件当中,使用bean元素来进行配置。 <!--
使用无参构造器来创建对象。
id属性要求唯一。
class属性指定类名(要写完整的类名)。
注:
在spring框架当中,将Spring容器所管理
的对象称之为一个bean。
-->
<bean id="ap1" class="first.Apple"/> step3. 启动容器,调用容器提供的getBean方法。 //通过容器获得对象
Apple ap1 =
ac.getBean("ap1",Apple.class);

b.方式二  使用静态工厂方法 (了解)

<!--
使用静态工厂方法来创建对象。
factory-method属性用于指定一个静态
方法(static修饰的方法)。
注:
  容器会调用指定类的静态方法来创建
对象。
-->
<bean id="cal1"
class="java.util.Calendar"
factory-method="getInstance"/>

c.方式三  使用实例工厂方法 (了解)

<!--
使用实例工厂方法来创建对象。
factory-bean属性指定bean的id,
factory-method属性指定一个方法。
注:
容器会调用该bean的方法来创建一个
对象。
-->
<bean id="date2" factory-bean="cal1"
factory-method="getTime"/>

4)作用域

a.默认情况下,对于某个bean,容器只会创建一个实例。

b.如果要让容器创建多个实例,需要设置bean的作用域。

<!--
scope属性用于指定作用域,
缺省值是singleton,如果将值设置
为prototype,则容器会创建多个实例。
-->
<bean id="eb1"
class="basic.ExampleBean"
scope="prototype"/>

5)生命周期

spring容器在创建好对象之后,会调用初始化方法, 在销毁该对象之前,会调用销毁方法。

    <!--
init-method属性: 指定初始化方法
destroy-method属性:指定销毁方法。
注:
销毁方法只有当作用域为singleton
才有效。
-->
<bean id="mb1"
class="basic.MessageBean"
init-method="init"
destroy-method="destroy"
scope="singleton"/>

6)延迟加载

a.默认情况下,容器启动之后,会将所有作用域为singleton的bean实例化。

b.延迟加载指的是,通过设置lazy-init="true"告诉容器, 启动之后不再创建其实例。

    <!--
lazy-init属性如果值为true,表示
延迟加载。
-->
<bean id="lb1" class="basic.LazyBean"
lazy-init="true"/>

(3)IOC和DI

1)IOC是什么? (Inversion Of Controll 控制反转)

对象之间的依赖关系应该由容器来建立。

2)DI是什么? (Dependency Injection 依赖注入)

容器通过调用set方法或者构造器来建立对象之间的依赖关系。

注:
IOC是目标,DI是手段。

3)set方法注入

step1. 为类添加set方法。

step2. 在配置文件当中,使用property元素来配置set 方法注入。

    <!--
property元素表示采用set方法注入。
name属性用于指定set方法名
(容器会将b大写,前面添加set来
构造方法名)。
ref属性用于指定被注入的bean的id。
-->
<bean id="a1" class="ioc.A">
<property name="b" ref="b1"/>
</bean>

step3. 启动容器,调用getBean方法。

3)set方法注入

4)构造器注入

step1. 添加相应的带参的构造器。

step2. 使用<constructor-arg>元素来配置构造器注入。

 <bean id="cpu" class="ioc.Cpu"/>
<!--
constructor-arg元素用来配置构造器
注入。
index属性用于指定参数的下标。
ref属性用于指定被注入的bean的id。
-->
<bean id="cp" class="ioc.Computer">
<constructor-arg index="0"
ref="cpu"/>
</bean>

step3. 启动容器,调用getBean方法。

4)自动装配 (了解)

a.什么是自动装配?

容器依据某些规则,自动查找符合要求的对象,
然后建立对象之间的依赖关系。
注: 容器仍然要调用set方法或者构造器。

b.如何自动装配?

使用autowire属性指定装配的规则:
<bean id="wt1" class="autowire.Waiter"/>
<!--
autowire属性表示让容器自动建立
对象之间的依赖关系,有三个值:
byName:
以属性名作为bean的id,查找
对应的bean,然后调用set方法。
注:如果找不到对应的bean,
不会调用set方法。
byType:
以属性类型作为bean的类型,查找
对应的bean,然后调用set方法。
注:
如果找不到对应的bean,
不会调用set方法。
如果找到多个bean,会出错。
constructor:
类似于byType,只不过是调用构造器来
完成 注入。  
-->
<bean id="rest"
class="autowire.Restaurant"
autowire="byType"/> 

5)注入基本类型的值

<bean id="vb" class="value.ValueBean">
<property name="name" value="小包总"/>
<property name="age" value="20"/>
</bean>

6)注入集合类型的值

a.支持四种集合类型的值的注入,分别是List,Set,Properties,Map。

b.注入方式如下:

    <property name="interest">
<list>
<value>打猎</value>
<value>看书</value>
<value>编程</value>
<value>编程</value>
</list>
</property>
<property name="city">
<set>
<value>洛阳</value>
<value>金陵</value>
<value>开封</value>
</set>
</property>
<property name="score">
<map>
<entry key="english"
value="59.5"/>
<entry key="math"
value="17"/>
</map>
</property>
<property name="db">
<props>
<prop key="username">tom</prop>
<prop key="pwd">1234</prop>
</props>
</property>

7)引用的方式注入集合类型的值

    <!--
将集合类型的值配置成一个bean
-->
<util:list id="interestBean">
<value>打猎</value>
<value>看书</value>
<value>编程</value>
</util:list>
<util:set id="cityBean">
<value>北京</value>
<value>南京</value>
<value>东京</value>
</util:set>
<util:map id="scoreBean">
<entry key="english" value="80"/>
<entry key="math" value="90"/>
</util:map>
<util:properties id="dbBean">
<prop key="username">John</prop>
<prop key="pwd">1234</prop>
</util:properties>
<bean id="vb2" class="value.ValueBean">
<property name="interest"
ref="interestBean"/>
<property name="city"
ref="cityBean"/>
<property name="score"
ref="scoreBean"/>
<property name="db"
ref="dbBean"/>
</bean>

8)读取properties文件的内容

    <!--
读取properties文件的内容。
location属性用于指定要读取的文件的位置。
注:
classpath:表示依据类路径去查找相应的
文件。
-->
<util:properties id="config"
location="classpath:config.properties"/>

9)spring表达式

a.spring表达式的作用?

可以用来读取其它bean的属性

b.用法如下图:

												

Spring是什么、spring容器、Spring三大核心思想DI(依赖注入)、IOC(控制反转)、AOP(面向切面编程)的更多相关文章

  1. Spring:AOP面向切面编程

    AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果. AOP是软件开发思想阶段性的产物,我们比较熟悉面向过程O ...

  2. Spring Framework------>version4.3.5.RELAESE----->Reference Documentation学习心得----->Spring Framework的依赖注入和控制反转

    Dependency Injection and Inversion of Control 1.概述: 1.1相关概念 bean:由IoC容器所管理的对象,也即各个类实例化所得对象都叫做bean 控制 ...

  3. 简单解析依赖注入(控制反转)在Spring中的应用

    IoC——Inversion of Control  控制反转DI——Dependency Injection   依赖注入 大家都知道,依赖注入是Spring中非常重要的一种设计模式.可能很多初学者 ...

  4. Spring Boot2(六):使用Spring Boot整合AOP面向切面编程

    一.前言 众所周知,spring最核心的两个功能是aop和ioc,即面向切面和控制反转.本文会讲一讲SpringBoot如何使用AOP实现面向切面的过程原理. 二.何为aop ​ aop全称Aspec ...

  5. 详细解读 Spring AOP 面向切面编程(二)

    本文是<详细解读 Spring AOP 面向切面编程(一)>的续集. 在上篇中,我们从写死代码,到使用代理:从编程式 Spring AOP 到声明式 Spring AOP.一切都朝着简单实 ...

  6. 浅谈Spring AOP 面向切面编程 最通俗易懂的画图理解AOP、AOP通知执行顺序~

    简介 我们都知道,Spring 框架作为后端主流框架之一,最有特点的三部分就是IOC控制反转.依赖注入.以及AOP切面.当然AOP作为一个Spring 的重要组成模块,当然IOC是不依赖于Spring ...

  7. Spring 08: AOP面向切面编程 + 手写AOP框架

    核心解读 AOP:Aspect Oriented Programming,面向切面编程 核心1:将公共的,通用的,重复的代码单独开发,在需要时反织回去 核心2:面向接口编程,即设置接口类型的变量,传入 ...

  8. Git使用总结 Asp.net生命周期与Http协议 托管代码与非托管代码的区别 通过IEnumerable接口遍历数据 依赖注入与控制反转 C#多线程——优先级 AutoFac容器初步 C#特性详解 C#特性详解 WPF 可触摸移动的ScrollViewer控件 .NET(C#)能开发出什么样的APP?盘点那些通过Smobiler开发的移动应用

    一,原理 首先,我们要明白Git是什么,它是一个管理工具或软件,用来管理什么的呢?当然是在软件开发过程中管理软件或者文件的不同版本的工具,一些作家也可以用这个管理自己创作的文本文件,由Linus开发的 ...

  9. Spring框架(四)AOP面向切面编程

    一.前言 在以前的项目中,很少去关注spring aop的具体实现与理论,只是简单了解了一下什么是aop具体怎么用,看到了一篇博文写得还不错,就转载来学习一下,博文地址:http://www.cnbl ...

  10. 重新学习之spring第二个程序,配置AOP面向切面编程

    第一步:在配置好的ioc容器的基础上,导入面向切面编程所需要的jar包 (本案例用的是spring3.2.4,由于spring3.2.4的官网jar包中不再有依赖包,所以依赖包都是从网上找的) 第二步 ...

随机推荐

  1. Elasticsearch分页

    Elasticsearch的数据都存在每个节点的分片中,当执行搜索时每个分片独立搜索后,数据再经过整合返回.ElasticSearch的搜索请求一次请求最大量为10000.如果超过则会发生错误.那么, ...

  2. string的相关问题

    http://blog.csdn.net/seu_calvin/article/details/51404589 http://rednaxelafx.iteye.com/blog/774673 ht ...

  3. js处理url中的请求参数(编码/解码)

    在处理 a 链接跳转其他页面时,总会遇到需要传递一些当前页面的信息到其他页面,然后其他页面利用这些信息进行相关操作.利用 get 请求或 hash 传递是常见的方式. 首先,需要对传递的参数进行编码, ...

  4. Java MVC和三层架构

    一.设计模式 Model 1 和Model 2 Model 1 前面学习了Servlet和Jsp,对这两个有个大概的认识,Servlet就是为了解决静态页面的问题,能够实现动态的页面,使维护,开发更加 ...

  5. js中call、apply、bind的使用

    写在前面的话 这三个方法都是来自Function.prototype上,所以所有的函数都可以使用. 他们有一个共同点,就是可以指定函数执行时的内部this指向. call和apply的区别在于参数的方 ...

  6. nodeJS搭建一个简单的(代理)web服务器

    前端获取数据时经常遇见跨域问题,以前一直用nginx做反向代理.最近在用vuejs,发现webpack-dev-server的代理简单好用.于是仿照写了一个简单的web服务器,用于非webpack的项 ...

  7. 一元运算符 +,可用于将变量转换为数字;如果变量不能转换,它仍然会是一个数字,但值为 NaN (不是一个数字)

    一元运算符,可用于将变量转换为数字: var y = "5"; var x = + y; console.log(typeof y);//string 类型 console.log ...

  8. windows server 2016安装docker

    最近微软发布了windows server 2016,并原生支持docker,本文通过一系列的步骤,来学习怎么在windows server 2016安装docker. 1.下载 windows se ...

  9. Python的不定长参数研究

     通过观察程序和运行结果我们发现,传参时将1传给了a,将2传给了b,将3,4,5传给了*args,将m=6,n=7,p=8传给了**kwargs.为什么是这样传参呢?*args和**kwargs又是什 ...

  10. tensorflow进阶篇-4(损失函数1)

    L2正则损失函数(即欧拉损失函数),L2正则损失函数是预测值与目标函数差值的平方和.L2正则损失函数是非常有用的损失函数,因为它在目标值附近有更好的曲度,并且离目标越近收敛越慢: # L = (pre ...