我的Spring学习记录(一)
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学习记录(一)的更多相关文章
- 我的Spring学习记录(二)
本篇就简单的说一下Bean的装配和AOP 本篇的项目是在上一篇我的Spring学习记录(一) 中项目的基础上进行开发的 1. 使用setter方法和构造方法装配Bean 1.1 前期准备 使用sett ...
- 我的Spring学习记录(四)
虽然Spring管理这我们的Bean很方便,但是,我们需要使用xml配置大量的Bean信息,告诉Spring我们要干嘛,这还是挺烦的,毕竟当我们的Bean随之增多的话,xml的各种配置会让人很头疼. ...
- 我的Spring学习记录(五)
在我的Spring学习记录(四)中使用了注解的方式对前面三篇做了总结.而这次,使用了用户登录及注册来对于本人前面四篇做一个应用案例,希望通过这个来对于我们的Spring的使用有一定的了解. 1. 程序 ...
- Spring 学习记录3 ConversionService
ConversionService与Environment的关系 通过之前的学习(Spring 学习记录2 Environment),我已经Environment主要是负责解析properties和p ...
- Spring 学习记录8 初识XmlWebApplicationContext(2)
主题 接上文Spring 学习记录7 初识XmlWebApplicationContext refresh方法 refresh方法是定义在父类AbstractApplicationContext中的. ...
- Spring 学习记录6 BeanFactory(2)
主题 除了Spring 学习记录5 BeanFactory 里写的几个接口外,BeanFactory的实现类还实现了一些其他接口,这篇文章主要介绍这些接口和实现类. 结构 DefaultListabl ...
- Spring学习记录(九)---通过工厂方法配置bean
1. 使用静态工厂方法创建Bean,用到一个工厂类 例子:一个Car类,有brand和price属性. package com.guigu.spring.factory; public class C ...
- Spring学习记录(七)---表达式语言-SpEL
SpEL---Spring Expression Language:是一个支持运行时查询和操作对象图表达式语言.使用#{...}作为定界符,为bean属性动态赋值提供了便利. ①对于普通的赋值,用Sp ...
- Spring 学习记录5 BeanFactory
主题 记录我对BeanFactor接口的简单的学习. BeanFactory我感觉就是管理bean用的容器,持有一堆的bean,你可以get各种bean.然后也提供一些bean相关的功能比如别名呀之类 ...
- Spring学习记录(十四)---JDBC基本操作
先看一些定义: 在Spring JDBC模块中,所有的类可以被分到四个单独的包:1.core即核心包,它包含了JDBC的核心功能.此包内有很多重要的类,包括:JdbcTemplate类.SimpleJ ...
随机推荐
- TensorFlow框架(2)之TensorBoard详解
为了更方便 TensorFlow 程序的理解.调试与优化,TensorFlow发布了一套叫做 TensorBoard 的可视化工具.你可以用 TensorBoard 来展现你的 TensorFlow ...
- $MarkDown$ 中使用$ \LaTeX$ 数学式
最近看了些机器学习的书籍, 想写点笔记记录下. 由于需要使用到很多的数学推导, 所以就看了下如何在 Markdown 中插入数学式,发现在 Markdown 中可以直接插入 LaTeX 数学式. 排版 ...
- 把elipse非maven的Struts2+Spring+Ibatis项目导入Idea中
1.按图示操作 2.选中自己要得到的项目 3.之后设定得到的项目放在哪里 项目得到之后,对项目点击右键Open Module Settings,点击Project,设置生成的编译文件存储路径 4.单击 ...
- 第二章 R语言数据结构
R语言存储数据的结构包括:标量.向量.矩阵.数组.数据框和列表:可以处理的数据类型包括:数值型.字符型.逻辑型.复数型和原生型. 数据结构 向量 向量是用来存储数值型.字符型或逻辑型数据的一维数组.单 ...
- 部署和使用kibana
背景 上一篇介绍了在阿里云上部署ES,本文将主要介绍ELK的可视化工具Kibana的部署和使用.主要分为三个步骤来实现最终呈现: 1.导入数据到ES: 2.部署kibana并完成配置: 3.使用kib ...
- Javascript中的浅拷贝和深拷贝
很多开发语言中都有浅拷贝和深拷贝的说法,这里简单区分一下它们在Javascript中的区别,以及jQuery中深拷贝的实现. 在谈浅拷贝和深拷贝之前,先要屡清楚Javascript中的按值访问和按引用 ...
- java二分查找详解
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好:其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表.首先,假设表中元素是按升序排列,将表 ...
- 学习笔记GAN003:GAN、DCGAN、CGAN、InfoGAN
GAN应用集中在图像生成,NLP.Robt Learning也有拓展.类似于NLP中的Actor-Critic. https://arxiv.org/pdf/1610.01945.pdf . Gen ...
- CSS编码技巧
前面的话 本文将从DRY.currentColor.inherit和合理使用简写这几方面来详细介绍CSS编码技巧 DRY DRY,即don`t repeat yourself,尽量减少代码重复 在软件 ...
- 关于SpringMVC项目报错:java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/xxxx.xml]
关于SpringMVC项目报错:java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/xxxx ...