我的Spring学习记录(一)

spring是一个框架,一个我理解为对象的大熔炉,它生产着各种bean,还可以对生产的对象进行加工。
这里有些概念需要理解一下,就是IOC和DI以及AOP,接下来,我们进入主题。

spring简介

spring framework

  上图是官方直接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

posted @ 2017-09-20 19:21  Lger  阅读(860)  评论(4编辑  收藏  举报