转载

Spring初识

Spring简介以及简单使用

由于最近需要在组内进行一次关于Spring的分享,因此从本周连续几周,开始从源码的粒度深入分析下Spring的原理。虽然网上有很多类似的文章,但是还是需要自己梳理一遍才能更加有助于理解。那么既然是再写一遍,那就试图写的更加清楚明白些。

什么是Spring(本部分总结自博客 Spring学习总结 )

  • 开源框架
  • 解决企业应用开发的复杂性
  • 可理解为bean对象管理的容器,也可理解为构建复杂企业应用的基础框架

优势

  • 不需要关心事务,API可以执行数据库事务操作
  • 不用关心远程API,直接可以进行远程API操作
  • 不用关心JMX,API可以进行管理
  • 不用关心JMS,API可以进行消息处理

Spring组件关系

Spring初识

Spring框架特征与功能

  • 轻量:大小与开销均是轻量级的。jar包只有1MB,Spring应用中的对象不依赖于Spring中任何的特定类
  • Ioc: Spring通过控制反转(Ioc)技术促进了低耦合。其反转的内容是获取依赖的控制权被反转。当使用Ioc后,一个对象依赖的其他对象会通过容器自动的被传递进来,而不需要这个对象显式的进行创建(JNDI是对象主动的去寻找其依赖的对象)。
  • Aop:Spring提供了面向切面编程的支持,可以将业务逻辑与系统服务(审计,事务管理)分离。用户只需关心业务逻辑本身,而不需要关注系统管理的功能。
  • 容器:Spring提供了应用对象的配置和生命周期的管理,Spring从这个角度可被理解为一种容器。用户可以配置每个Bean如何被创建,这个bean可以是单例的也可以每次使用时都生成新的实例。
  • 框架:Spring中用户将简单的组件进行配置,并组合形成为复杂的应用。
  • MVC:Spring MVC是一个非常受欢迎的轻量级Web框架。

Spring构成

Spring初识

Spring框架中的每个模块都可以单独存在,或联合存在。各个组件的功能简介如下:

  • Spring Core:核心容器统共Spring框架的基本功能。核心是提供Ioc支持,主要通过BeanFactory实现。
  • Spring Context:Spring Context是一个配置文件,向Spring框架提供上下文信息。包括JNDI、EJB等等。
  • Spring Aop:主要提供Aop支持,可以使Spring框架管理的任何对象都支持Aop。AOP模块为基于Spring的应用程序中的对象提供了事务管理机制。
  • Spring DAO:数据访问层,其下对接各个厂商的数据库,并自行处理异常。
  • Spring Web:Web上下文模块构建在应用程序上下文模块上,为Web应用提供了上下文。
  • Spring MVC:Web应用的MVC实现。

在本系列的博客中,我将主要介绍Spring核心框架中的Ioc和Aop原理。这几篇博客中我将以最新的版的Spring进行实验以及源码的分析研究,并辅助以一些自行的代码设计对Spring的Ioc以及Aop原理展开分析。

Spring环境基本搭建

我们使用maven构建一个基础的Spring应用

1、填写pom.xml:

<dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
            <version>4.10</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.3.13.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.8.13</version>
        </dependency>
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>3.2.7</version>
        </dependency>
</dependencies>

2、编写一个接口IBookDAO,提供一个方法addBook

public interface IBookDAO {
    String addBook(String bookName);
}

3、编写一个实现类BookDAO并实现抽象方法addBook

public class BookDAO implements IBookDAO {
    @Override
    public String addBook(String bookName) {
        return "添加图书" + bookName + "成功";
    }
}

4、编写meta文件告知依赖注入的bean信息

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="bookdao" class="com.bryantchang.springtest.dao.BookDAO"></bean>
</beans>

5、编写BookService正式注入依赖

public class BookService {
    IBookDAO bookDAO;

    public BookService() {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("IOCBean1.xml");//告知meta文件的路径,并获取Context对象
        bookDAO = (IBookDAO)ctx.getBean("bookdao");//通过ID注入具体的bean
    }

    public void storeBook(String bookName) {
        System.out.println("New book comming...");
        String result = bookDAO.addBook(bookName);
        System.out.println(result);
    }
}

6、最后,我们在测试类中对Bean的注入流程进行测试

public class DemoTest {
    @Test
    public void testStoreBook() {
        BookService service = new BookService();
        service.storeBook("《Java编程思想》");
    }
}

至此我已经介绍了Spring框架的基本概念以及基本使用,下一篇博客开始将重点介绍Spring的Ioc原理,并实现一个简易的Ioc框架

谢谢你请我吃糖果

原文  https://bryantchang.github.io/2018/07/28/spring1/
正文到此结束
Loading...