spring笔记

Spring开发步骤

1.导入spring开发的基本包坐标
2.编写Dao接口和实现类
3.创建spring核心配置文件
4.在spring配置文件中配置UserDaoImpl
5.使用spring的API获取Bean实例

Spring配置文件

1. Bean标签

1.1 调用无参

用于配置对象交由Sprig来创建,默认情况调用无参构造,没有无参构造则不能创建成功

1.2 基本属性

id: Bean实例在spring容器中的唯一标识 class:Bean的全限定名

1.3 Bean标签范围配置

image-20210128102346077

singleton在加载配置文件的时候就会实例化对象(饿汉式)容器在对象再容器毁对象毁

prototype在每次getBean的时候实例化对象 ,只要对象在使用中,就一直活着,当对象长时间不用时,被java的垃圾回收器回收了

1.4Bean生命周期配置

init-method:指定类中的初始化方法名称

destroy-method:指定类中销毁方法名称

image-20210128104848541

image-20210128104831266

image-20210128105321469

在测试类中要手动关闭容器,ApplicationContext是接口他的子类ClassPathXmlApplicationContext才有close方法所以要强转

2. Bean实例化三种方式

无参构造方法实例化

工厂静态方法实例化(静态方法不需要实例化可以用类名直接调用)

image-20210128105956430

image-20210128110023915

工厂实例方法实例化(要实例化才可以调用因为不是静态方法)

image-20210128110554878

image-20210128110632347

3. Bean的依赖注入分析

image-20210128144918429

4. Bean的依赖注入概念

image-20210128145507658

5. Bean的依赖注入方式(引用注入)

5.1 构造方法

image-20210128152710823

image-20210128152724025

5.2 set方法

5.2.1 原始方法

image-20210128150438801

image-20210128150524573

5.2.2 简便方法 P命名空间

image-20210128151222511

6. Bean的依赖注入(普通属性)

image-20210128153518374

image-20210128153541914

image-20210128153601964

7. Bean的依赖注入(集合属性)

image-20210128160435616

image-20210128160647523

image-20210128160721934

8. 引入其他配置文件(分模块开发)

image-20210128161020177

image-20210128161038196

image-20210128161052203

***spring的重点配置

image-20210128161416420

Spring相关API

ApplicatioContext实现类

image-20210128162743179

getBean()方法使用

1.源代码

image-20210128163227637

2.具体使用

image-20210128163014162

Spring配置数据源

1. 数据源的手动创建

package com.txy.test;

import com.alibaba.druid.pool.DruidDataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.junit.Test;

import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.util.ResourceBundle;

public class DataSourceTest {
    @Test
    //测试手动创建c3p0数据源
    public void test1() throws Exception {
        //获取数据源
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setDriverClass("com.mysql.jdbc.Driver");
        dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/votes?useUnicode=true&characterEncoding=utf-8");
        dataSource.setUser("root");
        dataSource.setPassword("root");
        //获取数据
        Connection connection = dataSource.getConnection();
        System.out.println(connection);
        //关闭
        connection.close();
    }

    @Test
    //测试手动创建druid数据源
    public void test2() throws Exception {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/votes?useUnicode=true&characterEncoding=utf-8");
        dataSource.setUsername("root");
        dataSource.setPassword("root");
        //获取数据
        Connection connection = 	dataSource.getConnection();
        System.out.println(connection);
        //关闭
        connection.close();
    }

    @Test
    //测试手动创建c3p0数据源(加载properties配置文件【properties配置文件是为了解耦合】)
    public void test3() throws Exception {
        //读取配置文件
        ResourceBundle rb = ResourceBundle.getBundle("jdbc");//这个参数是填相对加载是的路径也就是resource下的路径并且不用写扩展名
        String driver = rb.getString("jdbc.driver");
        String url = rb.getString("jdbc.url");
        String username = rb.getString("jdbc.username");
        String password = rb.getString("jdbc.password");
        //创建数据源对象
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setDriverClass(driver);
        dataSource.setJdbcUrl(url);
        dataSource.setUser("root");
        dataSource.setPassword(password);
        Connection connection = dataSource.getConnection();
        System.out.println(connection);
        connection.close();
    }
}

image-20210129202727742

2. spring配置数据源

image-20210129204507232

image-20210129204519188

3. 抽取jdbc配置文件

applicationContext.xml加载jdbc.properties配置文件获得链接信息(为了解耦合)

image-20210129205211198

image-20210129205229411

image-20210129205407557

image-20210129205717087

Spring注解开发

1. spring原始注解

Spring原始注解主要是替代的配置

image-20210129210045174

image-20210130144352907

image-20210130140226000

image-20210130140301056

使用注解方式可以不用写set方法

引用类型注入如下

image-20210130141019730

普通类型注入

image-20210130141419001

image-20210130141502519

2. spring新注解

使用原始注解不能全部代替xml配置文件,还需要使用注解代替的配置如下

非自定义的Bean的配置:< bean >

加载properties文件的配置:< context:property-placeholder >

组件扫描的配置:< context:component-scan >

引入其他文件:< import >

新注解

image-20210130143019905

image-20210130151012372

image-20210130151033047

image-20210130151118229

Spring集成Junit

1. 原始Junit测试Spring的问题

image-20210130151348494

2. 解决思路

image-20210130151523092

3. Spring集成Junit步骤

image-20210130152237230

image-20210130154751354

image-20210130154816643

image-20210130154844894

Spring AOP

1. AOP的作用及其优势

作用:在程序运行期间,在不修改源代码的情况下对方法进行功能增强

优势:减少重复代码,提高开发效率,并且便于维护

2. AOP的底层实现

image-20210130162621957

3. 动态代理技术

image-20210130163010089

4. AOP相关概念

image-20210201160234482

5. AOP开发明确的事项

5.1 需要编写的内容

  1. 编写核心业务代码(目标类的目标方法)
  2. 编写切面类,切面类中有通知(增强功能方法)
  3. 在配置文件中,配置织入关系,即将哪些通知与哪些连接点进行结合

5.2 AOP技术实现的内容

Spring框架监控切入点方法的执行。一旦监控到切入点方法被运行,使用代理机制,动态创建目标对象的代理对象,根据通知类型,在代理对象的对应位置,将通知对应的功能织入,完成完整的代码逻辑运行

5.3 AOP底层使用哪种代理方式

在spring中,框架会根据目标类是否实现了接口来决定采用哪种动态代理方式。

6. 知识要点

image-20210201161359124

7. 基于XML的AOP开发

1. 切点表达式的写法

表达式语法:execution([修饰符]返回值类型 包名.类名.方法名(参数))

[里可写可不写]

返回值类型、包名、类名、方法名可以使用星号*代表任意

包名与类名之间一个点.代表当前包下的类 两个点…表示当前包及其子包下的类

参数列表可以使用两个点…表示任意个数,任意类型的参数列表

2. 通知的类型

image-20210201220813267

3. 切点表达式的抽取

image-20210201222611847

image-20210201222601047

4. 具体代码实现

结构:

image-20210201222918318

目标接口:

package com.txy.aop;

public interface TargetInterface {
    public void save();
}

目标类:

package com.txy.aop;

public class Target implements TargetInterface {
    public void save() {
        //int i=1/0;
        System.out.println("save txy save save hey running....................");
    }
}

切面类:

package com.txy.aop;

import org.aspectj.lang.ProceedingJoinPoint;

public class MyAspect {
    public void before(){
        System.out.println("这是前置增强方法,天天在家当废物,微笑");
    }
    public void afterreturning(){
        System.out.println("后置增强...........fdaf..............");
    }
    //ProceedingJoinPoint:正在执行的连接点==切点
    public Object around(ProceedingJoinPoint pjp) throws Throwable {
        System.out.println("环绕前增强····");
        Object proceed = pjp.proceed();//切点方法
        System.out.println("环绕后增强····");
        return proceed;
    }
    public void afterThrowing(){
        System.out.println("异常抛出增强·····");
    }
    //最终通知不管怎样最后都会执行
    public void after(){
        System.out.println("最终增强····");
    }
}

配置文件:

image-20210201223207998

image-20210201223216180

目标接口

8. 基于注解的AOP开发

1. 快速入门

目标接口:

package com.txy.anno;

public interface TargetInterface {
    public void save();
}

目标类:

package com.txy.anno;

import org.springframework.stereotype.Component;

@Component("target")
public class Target implements TargetInterface {
    public void save() {
        //int i=1/0;
        System.out.println("save txy save save hey running....................");
    }
}

切面类:

image-20210201225150537

配置文件:

image-20210201225213831

2. 注解配置AOP详解

1. 注解通知的类型

通知的配置语法:@通知注解(“切点表达式”)

image-20210201225339209

2. 切点表达式的抽取

image-20210201225632816

3. 知识要点

image-20210201230155713

Spring的事务控制

1. 编程式事务控制相关对象(了解即可)

1.1 PlatformTransactionManager

image-20210202161720601

1.2 TransactionDefinition

image-20210202161938782

  1. 事务隔离级别

image-20210202162113330

  1. 事务传播行为

image-20210202162521212

  1. TransactionStatus

image-20210202162844597

2. 基于XML

image-20210202163613793

2.1 声明式事务控制的实现

  1. 声明式事务控制明确事项:

    谁是切点? 谁是通知? 配置切面?

    注:

image-20210202194606452

image-20210202194518290

3. 基于注解

image-20210202215124609

image-20210202213258261

Spring 集成web环境

1. ApplicationContext应用上下文获取方式

1.1 前提

image-20210203135450291

1.2 spring集成web环境步骤

image-20210203144741364

自己写:

image-20210203144911497

image-20210203144944473

listener-class应该要用自己写的类的路径,这里是spring框架提供的路径

image-20210203145042852

红框为了解开applicationContext.xml名字的耦合

image-20210203145116235

image-20210203145129039

image-20210203145146383

蓝色的框是为了解开app字符串的耦合

spring提供的方式:

配置文件:

image-20210203145321337

Controller

img-mWwx52vc-1614756558644)]

1.2 spring集成web环境步骤

​ [外链图片转存中…(img-exU8rzg8-1614756558647)]

自己写:

[外链图片转存中…(img-S1OJySSa-1614756558650)]

[外链图片转存中…(img-19b05HIZ-1614756558653)]

listener-class应该要用自己写的类的路径,这里是spring框架提供的路径

[外链图片转存中…(img-vLyfPsts-1614756558665)]

红框为了解开applicationContext.xml名字的耦合

[外链图片转存中…(img-x9uw7lt3-1614756558668)]

[外链图片转存中…(img-10kwARbe-1614756558669)]

[外链图片转存中…(img-WsEJHhT5-1614756558671)]

蓝色的框是为了解开app字符串的耦合

spring提供的方式:

配置文件:

[外链图片转存中…(img-mVGYsG6n-1614756558674)]

Controller

image-20210203145347730

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
第一课:面向抽象编程 4 第二课:Jdom的基本使用 4 第三课:模拟Spring功能 5 第四课:搭建sping的运行环境 8 一、 建立一个新的项目 8 二、 建立spring的配置文件 8 三、 引入spring的jar包 8 四、 测试代码: 8 五、 注意接口的使用: 8 第五课:IOC(DI)配置及应用 9 一、 什么是IOC、DI 9 二、 编辑xml文件时,没有提示 9 三、 注入类型(Injecting dependencies) 9 (一) setter注入类型Setter Injection 9 (二) 构造方法Constructor Injection 10 四、 id、name 11 五、 简单属性的注入 11 六、 Bean的作用范围scope 12 七、 集合注入 12 八、 自动装配autowire 13 (一) byName 13 (二) byType 14 (三) 注意 14 九、 生命周期 15 (一) lazy-init/default-lazy-init 15 (二) init-method destroy-method 不要和prototype一起用(了解) 15 第六课:annotation方式Spring 16 一、 开始使用annotation配置Spring 16 二、 @Autowired、@Qualifier 16 (一) @Autowired 16 (二) @Qualifier 17 三、 @Resource(重要、推荐) 17 (一) JSR-250 17 (二) @Resource 17 四、 @Componet 18 五、 @Scope、@PostConstruct、@PreDestroy 19 六、 注解对应的jar包 19 第七课:AOP(面向切面编程) 19 一、 AOP概念 19 二、 利用动态代理实现面向切面编程 20 第八课:Spring AOP配置选项 21 一、 AOP配置annotation方式 21 (一) 搭建annotation开发环境 21 (二) aspectJ类库 22 (三) AOP的annotation实例 22 (四) AspectJ的专业术语 23 (五) 织入点语法 23 (六) Advice 24 (七) Pointcut 26 (八) annotatin方式的AOP实例 26 二、 AOP配置xml方式 27 三、 AOP实现动态代理注意 28 第九课:DataSource 28 一、 Sping配置数据源: 28 二、 注入使用 29 三、 dbcp.BasicDataSource 29 第十课 Spring整合Hiberante3 30 一、 Spring配置hibernate3的SessionFactory 30 (一) xml形式的SessionFactory 30 (二) annotation注解方式的SessionFactory 30 二、 引入hibernate所需要使用的jar 31 (一) 基本jar 31 (二) 加入annotation功能的jar包 31 (三) 搭建日志环境并配置显示DDL语句jar包 31 三、 Spring整合hibernate3事务 31 (一) Annotation注解方式配置事务管理 31 (二) Spring事务选项 35 (三) XML文件形式配置Spring事务管理 37 四、 HibernateTemplate 38 (一) HibernateTemplate 38 (二) HibernateDaoSupport 39 第十一课:Spring整合-SSH 40 一、 第一步:加入jar包(需要的jar包列表) 40 二、 第二步: 首先整合Spring + Hibernate 41 三、 第三步:再来整合Struts2 41 四、 struts的读常量: 43 第十二课:DTO、VO 43 一、 DTO 43 二、 VO 43 第十二课:SSH整合存在的问题 43 一、 Jsp中访问Session时,Session已经关闭 43 二、 如果不配置事务,openSessionView出现异常 44 三、 中文乱码问题: 44 第十三课:SSH整合的jar包 45 一、 Struts2 45 二、 Hibernate3.3.2 45 三、 Spring 46

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值