我的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 ...
随机推荐
- eval & exec(绕过长度限制思路学习)
eval & exec知识点记录--原文章phithon,只是记录一下我自己的学习过程. 1.eval & exec if(strlen($param)<17 && ...
- 利用OpenCms9提供的模块创建新站点
OpenCms 9中提供b一个Demo,Demo使用了alkacon的bootstrap模板.如果已经安装了OpenCms 9,可以登陆http://localhost:8080/opencms/op ...
- 新鲜出炉的JSON,拿走不谢!
一.JSON简介 1.JSON全称是JavaScript Object Notation即JavaScript对象标记法. JSON是一种轻量级(Light-Weight).基于文本的(Text-Ba ...
- Python | 多种编码文件(中文)乱码问题解决
问题线索 1 可以知道的是,文本文件的默认编码并不是utf8. 我们打开一个文本文件,并点击另存为 2 我们在新窗口的编码一栏看到默认编码是ANSI.先不管这个编码是什么编码,但是通过下拉列表我们 ...
- zoj3785 What day is that day?
It's Saturday today, what day is it after 11 + 22 + 33 + ... + NN days? Input There are multiple tes ...
- Tomcat闪退的问题
问题:双击tomcat bin下的startup.bat,tomcat的窗口一闪而过,未成功启动: 原因是:在启动tomcat是,需要读取环境变量和配置信息,缺少了这些信息就会导致了tomcat的闪退 ...
- 斐波那契数列—Java
斐波那契数列想必大家都知道吧,如果不知道的话,我就再啰嗦一遍, 斐波那契数列为:1 2 3 5 8 13 ...,也就是除了第一项和第二项为1以外,对于第N项,有f(N)=f(N-1)+f(N-2). ...
- XWPFRun属性详解
XWPFRun是XWPFDocument中的一段文本对象(就是一段文字) 创建文档对象 XWPFDocument docxDocument = new XWPFDocument(); 创建段落对象 X ...
- HDMI转MIPI DSI芯片方案TC358870XBG
型号:TC358870XBG功能:HDMI1.4b转MIPI DSI通信方式:IIC分辨率:2560*1600@60fps/4k*2k@30fps电源:3.3/1.8/1.2/1.1封装形式:BGA8 ...
- java多线程设计模式
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt220 java多线程设计模式 java语言已经内置了多线程支持,所有实现Ru ...