[学习笔记] Spring之Spring概念核心

# 学习 # · 2021-01-05

初识Spring

1、企业级应用系统的特点:大规模、性能和安全要求高、业务复杂、灵活应变。

2、Spring:Spring是提供一站式的服务,服务于表示层、控制器、业务逻辑层和数据访问层,Spring以高度开发性与已有的框架做无缝整合。

3、Spring框架大约由20个功能模块组成,这些模块被分成六个部分:Core Container、Data Access/Integration、Web、AOP(Aspect Oriented Programming)、Instrumentation、Test。

(1)Spring Core是框架的最基础部分,提供了IoC特性。

(2)Spring Context为企业级开发提供了便利和集成的工具。

(3)Spring AOP是基于Spring Core的符合规范的面向切面编程的实现。

(4)Spring JDBC提供了JDBC的抽象层,简化了JDBC编码,使代码更健壮。

(5)Spring ORM对市面上流行的ORM框架提供了支持。

(6)Spring Web为Spring在Web应用程序中的使用提供了支持。

4、Spring的优良特性:

(1)非侵入式:基于Spring开发的应用中的对象可以不依赖于Spring的API。

(2)控制反转(IOC):将对象的创建权交给Spring去创建。

(3)依赖注入(DI):依赖的对象不需要手动调用set方法去设置,而是通过配置赋值。

(4)面向切面编程(AOP)。

(5)容器:Spring是一个容器,因为它包含并且管理应用对象的生命周期。

(6)组件化:Spring实现了使用简单的组件配置组合成一个复杂的应用。在Spring中可以使用XML和Java注解组合这些对象。

(7)一站式:在IOC和AOP的基础上可以整合各种企业应用的开源框架和优秀的第三方类库。

(8)Spring是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的容器框架。

5、Spring设计理念:Spring是面向Bean的编程,使现有的技术更加容易使用。

6、Spring两大技术核心:

(1)控制反转(IoC:Inversion of Control ) 即依赖注入(DI:Dependency Injection ) 。

(2)面向切面编程(AOP:Aspect Oriented Programming)。


初识Spring IoC

1、控制反转(IoC:Inversion of Control ) ,控制反转是一种设计思想,依赖注入(DI)是实现IoC的一种方法。没有IoC的程序中 , 我们使用面向对象编程 , 对象的创建与对象间的依赖关系完全硬编码在程序中,对象的创建由程序自己控制,控制反转后将对象的创建转移给第三方,即所谓控制反转就是:获得依赖对象的方式反转了。

2、依赖:一般是指通过局部变量、方法参数、返回值等建立的对于其他对象的调用关系。例如,在A类中实例化了B类的对象并调用其方法以完成特定的功能,就称为A类依赖于B类。

3、IoC的理论推导:使用setter设值注入

(1)创建数据访问层接口及实现类、业务逻辑接口及实现类。

//数据访问层接口实现类1
public class MysqlDaoImpl implements DataDao {
    public void getData() {
        System.out.println("通过MySQL读取数据");
    }
}

//数据访问层接口实现类2
public class OracleDaoImpl implements DataDao {
    public void getData() {
        System.out.println("通过Oracle读取数据");
    }
}

//业务逻辑接口实现类
public class DataServiceImpl implements DataService {
    //原始写法:
    //实例化Dao接口,调用Dao从MySQL中读取数据
    private DataDao dao = new MysqlDaoImpl();

    public void getData() {
        dao.getData();
    }
}

(2)创建测试类。

@Test
public void getData() {
    DataService service = new DataServiceImpl();
    service.getData();
}

(3)实现IoC的常用思路:通过JavaBean的属性(如setter方法)分配依赖性。

//业务逻辑接口实现类
public class DataServiceImpl implements DataService {
    private DataDao dao;
    //使用setter方法分配依赖
    public void setDao(DataDao dao) {
        this.dao = dao;
    }
    public void getData() {
        dao.getData();
    }
}

//测试类
@Test
public void getData() {
    DataService service = new DataServiceImpl();
    //使用setter方法分配依赖
    service.setDao(new OracleDaoImpl());
    service.getData();
}

Hello Spring

1、创建Maven项目,配置pom.xml,导入Spring依赖包。

<!--Spring-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.0.RELEASE</version>
</dependency>

2、编写HelloSpring实体类:

public class HelloSpring {
    // 定义who属性,该属性的值将通过Spring框架进行设置
    private String who = null;

    //getter/setter方法
    public String getWho() {
        return who;
    }

    public void setWho(String who) {
        this.who = who;
    }

    /**
     * 定义打印方法,输出一句完整的问候。
     */
    public void print() {
        System.out.println("Hello," + this.getWho() + "!");
    }
}

3、编写Spring配置文件:resources/applicationContext.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-3.2.xsd">

    <!--
        通过bean元素声明需要Spring创建的实例。
        该实例的类型通过class属性指定,并通过id属性为该实例指定一个名称,以便在程序中使用

        普通写法:类型 变量名=new 类型(),即HelloSpring hello=new HelloSpring();
        bean = 对象,即bean=new HelloSpring();
        id=变量名,class=new的对象
    -->
    <bean id="helloSpring" class="com.demo.pojo.HelloSpring">
        <!--
            property元素用来为实例的属性赋值
            此处实际是调用setWho()方法实现赋值操作
        -->
        <property name="who">
            <!-- 此处将字符串"Spring"赋值给who属性 -->
            <value>Spring</value>
        </property>
    </bean>

</beans>

(4)添加测试方法:

@Test
public void run() {
    // 通过ClassPathXmlApplicationContext实例化Spring的上下文
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

    // 通过ApplicationContext的getBean()方法,根据id来获取bean的实例
    HelloSpring helloSpring = (HelloSpring) context.getBean("helloSpring");

    // 执行print()方法
    helloSpring.print();
}

4、控制:谁来控制对象的创建 , 传统应用程序的对象是由程序本身控制创建的 , 使用Spring后 , 对象是由Spring来创建的。

5、反转:程序本身不创建对象 , 而变成被动的接收对象。

6、依赖注入:就是利用set方法来进行注入。

初识Spring AOP

1、面向切面编程(AOP,Aspect Oriented Programming)是软件编程思想发展到一定阶段的产物,是对面向对象编程(OOP)是有益补充。AOP一般适用于具有横切逻辑的场合,如访问控制、事物管理、性能监测等。

2、基本概念:

(1)横切关注点:跨越应用程序多个模块的方法或功能,如日志、安全、缓存、事务等。

(2)切面(Aspect):横切关注点被模块化的特殊对象,即它是一个类。

(3)增强处理(Advice):切面在某个特定连接点上执行的代码逻辑,即它是类中的一个方法。

(4)目标对象(Target object):被一个或多个切面增强的对象。

(5)连接点(Join Point):程序执行中的某个具体的执行点。

(6)切入点(Pointcut):对连接点的特征进行描述,可以使用正则表达式。增强处理和一个切入点表达式相关联,并在与这个切入点匹配的某个连接点上运行。

(7)AOP代理(AOP proxy):由AOP框架所创建的对象,实现执行增强处理方法等功能。

(8)织入(Weaving):将增强处理连接到应用程序中的类型或对象上的过程。

(9)增强处理类型:前置增强、后置增强、环绕增强、异常抛出增长、最终增强等类型。

3、AOP原理:

(1)将复杂的需求分解出不同方面,将散布在系统中的公共功能集中解决。

(2)采用代理机制组装起来运行,在不改变原程序的基础上对代码段进行增强处理,增加新的功能。


Spring配置说明

1、别名:

<bean id="UserService" class="com.demo.service.impl.UserServiceImpl"></bean>
<!--如果添加了别名,我们也可以使用别名获取到这个对Bean-->
<alias name="UserService" alias="UsService"></alias>

2、Bean的配置:

<!--
    id:bean的唯一标识符,也就是相当于对象名
    class:bean对象所对应的全限定名
    name:别名,可以同时取多个别名
-->
<bean id="UserService" class="com.demo.service.impl.UserServiceImpl" name="Us1,Us2">
    <property name="name" value="你好"></property>
</bean>

3、import导入:一般用于团队开发使用,它可以将多个配置文件,导入合并为一个。

<import resources="user1.xml"></import>
<import resources="user2.xml"></import>
如无特殊说明,本博所有文章均为博主原创。

如若转载,请注明出处:一木林多 - https://www.l5v.cn/archives/191/

评论