spring

目录

概述

spring是什么

spring优点

核心模块

IOC

AOP

基本概念

spring搭建

spring bean管理

xml 配置方式

注解方式

依赖注入的几种方式

spring-Jdbc

搭建

使用

事务管理

spring AOP实现

AspectJ

Spring 事物管理 

编程式事务

声明式事务

spring事务的实现原理

spring事务失效

spring事物的传播行为

spring-mybatis

spring用到那些设计模式


概述

spring是什么

Spring 是于 2003 年兴起的一个轻量级非侵入式IOC 和、AOP一站式、的 Java 开发框架,它是为了简化企业级应用开发而生的

spring优点

轻量级

​ Spring 框架使用的 jar 都比较小,一般在 1M 以下或者几百 kb。Spring 核心功能的所需的 jar 总共在 3M 左右。 Spring 框架运行占用的资源少,运行效率高

非侵入式

​ 编写一些业务类(用户管理、servlet、service、dao)的时候不需要继承 spring 特定的类,通过配置完成依赖注入后就可以使用,此时,spring 就没有侵入到我业务类的代码里。

​ 像UserServlet extend HttpServlet就属于侵入式

一站式框架

​ 它是一个后端管理架构框架,集基础容器,数据访问(jdbc,事物管理),web(Servlet),AOP为一身的一站式框架

核心模块

  • Core:核心类库,提供IOC服务
  • Context:上下文对象,提供框架式的Bean访问
  • AOP:AOP服务
  • ORM:对ORM框架的支持
  • MVC:MVC的实现

IOC

就是控制反转思想,把什么的控制权 反转 给谁

以前写代码,在哪需要对象就就地 new() 一个,spring的理念是将生成对象的控制权 反转给spring框架 ,由spring框架通过反射机制 生成并管理对象;
如果在程序运行期间创建一个对象需要依赖其他的对象,就会通过名称或者类型在SpringIOC容器中查找并注入,这也就是依赖注入。

AOP

我们在增强方法的时候,需要在每个方法中显示调用这些非业务代码,比如说保存日志这些,非常麻烦,扩展性不强

就是面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术,不需要修改原有代码

  • 利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率
  • OOP是整体设计,AOP是针对业务代码中的公共部分进行提取
  • 可以实现在不修改代码的情况下为程序添加功能,前提抽取的代码与业务逻辑没有直接关系

基本概念

连接点(Joinpoint): 类中可以被增强的方法

切入点(Pointcut): 实际被增强的方法

通知(Advice): 通知是指一个切面在特定的连接点要做的事情 (增强的功能)(saveLog())

切面(Aspect): 把通知添加到切入点的过程叫切面

目标(Target): 代理的目标对象(要增强的类)

代理(Proxy): 向目标对象应用通知之后创建的代理对象

spring搭建

导入jar包

<!-- spring-context --> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-context</artifactId> 
    <version>5.2.2.RELEASE</version> 
</dependency>

创建spring.xml

在resources目录下创建一个spring.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">

<!--beans:配置需要spring管理的类
            配置进来后spring就会对其进行管理(生成对象,存储)
            由spring框架生成的对象称之为一个bean(特指spring框架创建的对象,它会添加额外的功能)
-->

    <!--
        id:生成的对象名
        class:对象全类名
        name:对象别名,可为多个
        scope:
            singleton(默认值):单例模式 在Spring中只存在一个bean实例
            prototype:原型 getBean()的时候都会new Bean()
    -->
    <bean id="user" class="com.ff.spring.model.User" scope="prototype"/>

</beans>

使用ClassPathXmlApplicationContext创建并管理对象

import com.ff.spring.model.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test1 {
    public static void main(String[] args) {

        /*
            ApplicationContext是spring的一个底层定义的接口,定义了一些规范
            ClassPathXmlApplicationContext()是spring中一个具体落地实现的类(创建并管理对象)
            
            spring思想:IOC    把生成对象的控制权 反转给 spring框架
                             在程序中需要对象的时候,直接从spring容器中获取即可(依赖注入)
         */
        
        //获取spring创建的bean对象          创建spring容器
        ApplicationContext app = new ClassPathXmlApplicationContext("spring.xml");

        //生成对象
        User user1 = app.getBean("user", User.class);
        User user2 = app.getBean("user", User.class);

        System.out.println(user1);
        System.out.println(user2);

    }
}

spring bean管理

依赖注入 Dependency Injection 为创建好的对象的属性注入值

xml 配置方式

构造方法

    <bean id="user" class="com.ff.spring.model.User">
        <constructor-arg type="java.lang.String" name="name" value="张三"/>
        <constructor-arg type="java.lang.Integer" name="age" value="20"/>
        <constructor-arg name="list">
            <list>
                <value>1</value>
                <value>2</value>
                <value>3</value>
            </list>
        </constructor-arg>
    </bean>

set方法

    <!--set方法注入-->
    <bean name="user" class="com.ff.spring.model.User">
        <property name="name" value="李四"/>
        <property name="age" value="20"/>
        <property name="list">
            <list>
                <value>4</value>
                <value>5</value>
                <value>6</value>
            </list>
        </property>
    </bean>

注解方式

开启注解扫描

<context:component-scan base-package="com.ff.spring"> </context:component-scan>

标记不同层的类

  • @Component(value=“user”) (model)
  • @Service (service)
  • @Repository (数据访问层dao)

@Scope

/*指定生成对象策略
    @Scope(value=“prototype”) 原型 
    @Scope(value=“ singleton ”) 单例
*/
@Scope(value = "singleton")

注解方式注入属性

@Autowired

  • @Autowired是spring自身提供的注解,直接在属性上添加注解来注入
  • @Autowired是根据属性的类型自动注入(根据属性的类型在spring容器中进行查找)(byType
@Service(value = "userService")
public class UserService {
    @Autowired
    private UserDao userDao;

    public void saveUser()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值