spring是一个框架,一个我理解为对象的大熔炉,它生产着各种bean,还可以对生产的对象进行加工。

这里有些概念需要理解一下,就是IOC和DI以及AOP,接下来,我们进入主题。

spring简介

  上图是官方直接copy下来的,主要是说明了各个组件的应用情况,在博客中的项目主要是应用了spring的核心容器部分。

  简介这个概念性的东西我们可以先看下百度百科的解释,因为我觉得我还不是很够格,而且我的表述能力一直是诟病

  还有就是上面说到的几个概念性的东西,我们一 一看来:

  

  • IOC,我们把它翻译为控制反转,我当时也是很晕,这是什么鬼,一番解释就是将我们新建对象的能力控制能力反转给了spring容器
  • DI ,依赖注入,这主要就是将容器中的对象通过一定的方法注入到我们需要的使用这个对象地方,一般是通过类中的setter方法将属性的值进行注入,我把DI看成是IOC的具体实现方式之一
  • AOP 面向切面编程,好像很高大上的样子,貌似面向对象都不是很能说出个道道,怎么就面向切面了,其实面向切面我的理解是将各个类中零散的,但是又是必须的,不能直接抽取出来的代码进行抽取,这些抽取的东西相当于一个切面,一个简单的切面的例子就是我们web中的filter,如下图

这里的各个servlet如果没有filter就需要自己去过滤编码问题了,但是,filter的出现解决了代码的重复,这我理解为抽取,把一些相同的,零碎的重复代码进行抽取,放入一个东西里面统一处理,这就是切面

最后我给出一些关于以上概念性的东西的链接,自己参考一下,以免我的个人局限耽误了你

http://www.yiibai.com/spring/spring_overview.html

https://www.zhihu.com/question/25392984?sort=created

http://blog.csdn.net/mdcmy/article/details/8542277

http://www.cnblogs.com/lonelydreamer/p/6197024.html

https://martinfowler.com/articles/injection.html

使用spring构建一个对象

首先需要构建一个项目,这里我使用了maven构建,需要在pom.xml中添加如下依赖

	<properties>
<spring.version>4.3.10.RELEASE</spring.version>
</properties> <dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${spring.version}</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency> </dependencies>

如果不使用maven就需要自己拷贝jar包了

这里有一个简单的bean,代码如下:

public class Dog {

    private String name;
private String breed;
private String sex;
//get和set方法请自己加上去
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
", breed='" + breed + '\'' +
", sex='" + sex + '\'' +
'}';
}
}

我们先看一下如果是没有使用spring直接new一个bean是怎么样的

	/**
* 一般的类的创建--new
*/
@Test
public void test01(){
Dog dog = new Dog();//这里使用new关键字
dog.setSex("公");
dog.setName("旺旺");
dog.setBreed("土狗");
System.out.println(dog);
}
//打印结果:Dog{name='旺旺', breed='土狗', sex='公'}

但是使用spring获取一个bean的话首先你需要配置xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
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">
<!--声明一个bean并且指定相应的类-->
<bean name="dog" class="cn.lger.domain.Dog"/> </beans>

然后需要通过bean工厂加载xml配置文件,获取信息,这里我们使用的是ClassPathXmlApplicationContext来获取bean的信息它是BeanFactory的子类,能够读取classpath下的一个或者多个xml,包括jar包里面的

	 /**
* 通过ClassPathXmlApplicationContext获取bean-->dog
*/
@Test
public void test02(){
//新建一个ClassPathXmlApplicationContext类型对象,并且加载xml文件
ClassPathXmlApplicationContext applicationContext =
new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
//通过bean的类型加载一个Dog类型对象
Dog dog = applicationContext.getBean(Dog.class);
//打印测试
System.out.println(dog);
}
//打印结果:Dog{name='null', breed='null', sex='null'}

上面两个都弄出了dog对象,只是下面的对象的属性值都为null,现在我们改一下xml文件

	<!--声明一个bean并且指定相应的类-->
<bean name="dog" class="cn.lger.domain.Dog">
<property name="name" value="小美"/>
<property name="breed" value="土狗"/>
<property name="sex" value="母"/>
</bean>

现在重新运行上面的test02方法打印的结果就是Dog{name='小美', breed='土狗', sex='母'}了,是不是很神奇。

但是,可能有一个问题就是new出来的不是更加简单吗,为什么还要通过这么复杂的配置等等等来获取一个bean呢。刚开始我也在疑问,不过,这个还是在使用的过程中慢慢体验吧。

到了这里就已经通过spring获取了一个bean,已经是基本的入门了spring

关于这篇博客

这两篇博客实在我学习了spring之后写的,隔的时间有好些天了,因为近期有点时间,所以创作这篇博客,想要分享一下学习的东西。还有就是自己在一些已经看过的东西、概念中还是比较模糊的,一些都已经忘了,没有经常练习的原因,所以,这也是算作笔记,这样的话,忘了一些东西从新起步可能会比较快一点

小提示:有些人一直跟我说看官方文档是最好的,因为这样可以掌握核心科技:-) So,

https://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#overview

哦,听说你不喜欢看英文的?

https://www.gitbook.com/book/waylau/spring-framework-4-reference/details

我的Spring学习记录(一)的更多相关文章

  1. 我的Spring学习记录(二)

    本篇就简单的说一下Bean的装配和AOP 本篇的项目是在上一篇我的Spring学习记录(一) 中项目的基础上进行开发的 1. 使用setter方法和构造方法装配Bean 1.1 前期准备 使用sett ...

  2. 我的Spring学习记录(四)

    虽然Spring管理这我们的Bean很方便,但是,我们需要使用xml配置大量的Bean信息,告诉Spring我们要干嘛,这还是挺烦的,毕竟当我们的Bean随之增多的话,xml的各种配置会让人很头疼. ...

  3. 我的Spring学习记录(五)

    在我的Spring学习记录(四)中使用了注解的方式对前面三篇做了总结.而这次,使用了用户登录及注册来对于本人前面四篇做一个应用案例,希望通过这个来对于我们的Spring的使用有一定的了解. 1. 程序 ...

  4. Spring 学习记录3 ConversionService

    ConversionService与Environment的关系 通过之前的学习(Spring 学习记录2 Environment),我已经Environment主要是负责解析properties和p ...

  5. Spring 学习记录8 初识XmlWebApplicationContext(2)

    主题 接上文Spring 学习记录7 初识XmlWebApplicationContext refresh方法 refresh方法是定义在父类AbstractApplicationContext中的. ...

  6. Spring 学习记录6 BeanFactory(2)

    主题 除了Spring 学习记录5 BeanFactory 里写的几个接口外,BeanFactory的实现类还实现了一些其他接口,这篇文章主要介绍这些接口和实现类. 结构 DefaultListabl ...

  7. Spring学习记录(九)---通过工厂方法配置bean

    1. 使用静态工厂方法创建Bean,用到一个工厂类 例子:一个Car类,有brand和price属性. package com.guigu.spring.factory; public class C ...

  8. Spring学习记录(七)---表达式语言-SpEL

    SpEL---Spring Expression Language:是一个支持运行时查询和操作对象图表达式语言.使用#{...}作为定界符,为bean属性动态赋值提供了便利. ①对于普通的赋值,用Sp ...

  9. Spring 学习记录5 BeanFactory

    主题 记录我对BeanFactor接口的简单的学习. BeanFactory我感觉就是管理bean用的容器,持有一堆的bean,你可以get各种bean.然后也提供一些bean相关的功能比如别名呀之类 ...

  10. Spring学习记录(十四)---JDBC基本操作

    先看一些定义: 在Spring JDBC模块中,所有的类可以被分到四个单独的包:1.core即核心包,它包含了JDBC的核心功能.此包内有很多重要的类,包括:JdbcTemplate类.SimpleJ ...

随机推荐

  1. AVL树的插入与删除

    AVL 树要在插入和删除结点后保持平衡,旋转操作必不可少.关键是理解什么时候应该左旋.右旋和双旋.在Youtube上看到一位老师的视频对这个概念讲解得非常清楚,再结合算法书和网络的博文,记录如下. 1 ...

  2. [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示

    javascript面向对象编程方式,对于初学者来说,会比较难懂. 要学会面向对象以及使用面向对象编程,理解对象的创建在内存中的表示,至关重要. 首先,我们来一段简单的对象创建代码 var obj = ...

  3. [目标检测]YOLO原理

    1 YOLO 创新点: 端到端训练及推断 + 改革区域建议框式目标检测框架 + 实时目标检测 1.1 创新点 (1) 改革了区域建议框式检测框架: RCNN系列均需要生成建议框,在建议框上进行分类与回 ...

  4. Ta-lib函数功能列表

    import tkinter as tk from tkinter import ttk import matplotlib.pyplot as plt import numpy as np impo ...

  5. 论文写作office实用技巧

    最近在写论文,然后要按照模板来写,其中office排版有很多技巧;先前一直没有弄透彻,今晚上终于完美收工! 主要问题如下 MathType破解版 Mathtype试用版,到期后要卸载干净,才能再次下载 ...

  6. Java数组笔记

    # 数组--------内存 # 2017/8/31 15:29:19  ## 数组(容器) ## - 为了存储同种数据类型的多个值 - 概念     - 数组是可以存储同一种数据类型多个元素的集合, ...

  7. css 找到隐藏元素个数

    <form>   <input type="hidden" name="email" />   <input type=" ...

  8. Kosaraju算法详解

    Kosaraju算法是干什么的? Kosaraju算法可以计算出一个有向图的强连通分量 什么是强连通分量? 在一个有向图中如果两个结点(结点v与结点w)在同一个环中(等价于v可通过有向路径到达w,w也 ...

  9. Selenium常规操作---基于python

    from selenium import webdriver 1. 打开浏览器 driver=webdriver.Firefox()  #火狐浏览器 driver=webdriver.Ie()  #打 ...

  10. Spring Boot + Dubbo 可运行的例子源码-实现服务注册和远程调用

    最近公司的一个分布式系统想要尝试迁移到Dubbo,项目本身是Spring Boot的,经过一些努力,最终也算是搭建起一个基础的框架了,放到这里记录一下.需要依赖一个外部的zookeeper. 源码地址 ...