spring学习知识点总结

一:反射机制

    反射机制是spring的底层灵魂,与反编译有点类似,指定一个类名,直到运行时才加载这个类,运行时通过反编译来获取这个类的成员方法等。

    作用是实现类、方法间的解耦,不需要频繁地 new 不同的对象,在编译阶段不报错,例子如两个合作开发但进度不同的程序猿。

一个需要调用另一个写的类,可以用 forname 函数先申明,通过编译后等另一个人的函数实现,即可直接运行。

    在spring中,更是通过将指定的类名写入配置文件(properties文件)来实现控制翻转,即把new instance 的工作交给了 ioc 容器,而不是程序员在一个方法中new 另一个。

    spring的工厂模式解耦,实际是将所有需要配置的类名,都写进了配置文件,每个类在调用配置文件中的类名的时候,使用 forName().newInstance 函数来创建这个类的实例,给发出请求的类使用。

    https://www.cnblogs.com/yrstudy/p/6500982.html

    https://blog.csdn.net/Appleyk/article/details/77879073?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

 

Bean:可重用的组件

JavaBean: 用java编写的可重用组件

javaBean > 实体类

servlet:小程序,是单例对象,只有一个

单例对象和多例对象:单例是一个类产生的一个对象。多例是从同一个类产生的多个不同的对象。

多例对象被创建多次,多次初始化,效率不如单例

在spring中,因为 forName().newInstance 每次都会产生新对象,而很多情况,我们只需要单例,因此,用一个Map来存放创建的对象,称之为 容器

Ioc 控制翻转:

左边这种,一个类主动调用另一个类,使用 new 一个对象

右边,这个类在找对象时,并非直接要对象,而是问工厂要,这个工程就是 BeanFactory.getBean,这种方式,将找对象的控制权力,发放给了自定义的工厂,或算法定义的工厂,则称为控制反转。

控制反转类似于货币的产生,左边是一对一的资源交换,可能需要多次,而工厂或框架就类似于货币,实现一个中间者的角色。只能削减依赖,不能完全解除,如果完全解除,两个类变成了一个类,那就没有存在两个类的意义了。所以ioc的作用是解耦,降低程序间的依赖。

https://www.bilibili.com/video/BV1Sb411s7vP?p=15

Spring 中的 Ioc 配置:

 

步骤

    1.在resources下面创建 xml 配置文件,添加bean标签,这个bean就是上文的工厂类,BeanFactory,只不过Spring化了

    

    2. 获取到 Spring 的核心容器, 也就是上文的 Map,把 Bean 添加进去

Bean :

依赖注入:

    在配置文件(bean.xml)中添加bean,这个bean的作用是给某个类传参并且实例化那个类。

1.一般不用的构造注入,因为类必须使用带参的构造函数,来让bean注入初始化参数。

被注入的类:

注入的数据:

2.set方法注入:更常用

 

 

    

Spring 中的 Ioc 注解:

注解的功能与xml配置bean有重叠,创建对象的注解的目的就是将类实现反射并加入容器中,注解较为简单


 

如果容器中,只有一个value 和当前类所需的类型符合,则autowired 可以直接掏出这个值,不看key:

 

仅使用autowire时,如果容器中,有两个 value 的类型都符合,则看key 的名称,如果有key名称一样的,则取出这个bean,如果没有则报错。

qualfiler 和 autowire 组合使用,指定bean id, resouce = 前两者的组合,直接指定id

注解的作用和xml配置文件是有大量重合的,如何用类的方法来代替xml配置文件,得使用到@Configration注解配置类

用配置类的方法去配置数据库连接,注意注解

通过propertySource指定另外的属性文件,将数据库的信息抽离,导入

Spring整合Junit 用于单元测试,Spring为了 测试,需导入 Spring-test 依赖

1.Spring单元测试的问题:

2.解决方案:

在测试时,让junit 注解使用Spring的测试类

AOP:

动态代理:用客户买电脑的例子,代理为经销商,被代理的是生产工厂。一个方法在调用另一个类的方法前,都会经过代理。

代理的作用,1. 把线程用完后放回线程池, 2.方法增强

在演示例子中是为了service 层 调用 dao 层时,在同一个事务中的一套转账过程具有原子性的同时,减少繁琐的代码,实现两层代码的分离,减少依赖。 即减少下部分事务同步代码的重复编写。

面向切面可认为是面向代理编程

 

代理商实现供应商(工厂)的接口,被称为基于接口的代理

调用cglib 创建代理类

Spring 中的 AOP:

实现方式还是动态代理,可以减少重复代码,方便维护,spring中的aop是通过注解方式实现动态代理。

与oop面向对象编程比,子类中的每一个方法通过代理,减少重复代码量,比如例子中,服务层每个函数在调用dao时,都要创建一个事务,但通过走代理,则只要直接调用dao层即可

连接点和切入点:

所有切入点是连接点,连接点是服务层一个类中所有方法,切入点只是被增强的方法。

几种通知:

通知就是dao层调用的方法,在数据库操作中就是crud

method.invoke():执行某方法

spring的aop配置:

例子是在一些方法前调用另一个类的logger方法

将通知和切入点方法关联起来,需要使用pointcut属性

对服务层所有类的所有方法都增强

实际开发中会指定类下所有方法进行增强

使用环绕通知时,如何保证切入点方法执行

环绕通知可以转变为其他三种通知,只需要根据你在原类中写入的位置

基于注解的aop:

用注解+自己编写类的方式,实现切面类,但四个通知执行顺序会有问题,环绕通知没这个问题,所以建议用注解方式

Spring中的JDBC Template:

在不用spring的方法时,在select时,要自己写一个类,将查询结果,以这种类的方式读取出来

用spring的beanPropertyRowMapper则不需要自己编写类,这个在实际开发中用的多

Spring的xml事务控制配置:

基于注解的spring事务控制器:

直接在业务层类或者方法上加Transactional注解,并先在bean.xml里添加注解bean以启用事务注解。

关注spring5.0新特性。响应式编程等

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值