Spring框架-简(还没总结完)

Spring小总结

Spring由Rod Johnson研发,Spring框架是针对bean的生命周期进行管理的轻量级容器。其中核心技术 IOC和AOP

面向接口开发

面向接口编程可以解决属性与方法之间的耦合性问题。

Spring容器

Spring容器的数据结构是Map集合. Map<key,value> key=“user” value=“通过反射机制实例化的对象”

<bean id="user" class="com.jt.demo.User"></bean>
反射机制

反射机制在框架中 一般使用比较多,给定类型的路径就可以获取其中的对象.但是要求必须有无参构造. 否则程序运行必报异常.

IOC设计思想

1.概述:Ioc全称Inversion of Control,即“控制反转”
对象创建由Spring框架完成且管理对象的生命周期。
2.优化及总结:
1) 在此之前对象由手动创建,耦合性高,如果类变化,代码全都得改。
2) 现在对象都由Spring容器管理,不需要手动实例,容器负责对象的注入,也降低了代码的耦合性
xml配置文件管理对象:
1.准备xxx.xml配置文件
2.准备bean标签
3.spring容器管理对象
测试中写 ApplicationContext容器顶级接口
ClassPathXmlApplicationContext 加载配置文件的实现类对象
3.全注解的方式管理对象
面试:根据当前spring的配置类/xml,实例化接口,一般不写这些代码,如果想看也可 以通过ApplicationContext 查找指定的实现类.

注解开发

@configuration //标识当前为配置类
@Bean //标识反射的方法返回值 (指定某个方法)
@value("${类名.属性名}")为属性赋值
@PropertySource(value=“classpath:/xxxx.properties”,encoding = “UTF-8”)
classpath:/ 代表resources根目录
。。。。。

工厂模式(创建对象)

抽象类对象不可以直接无法实例化!!!
通过容器管理Spring反射机制自动 创建对象。

注解

1.@Component //将当前类,交给Spring容器管理,由Spring通过反射自动创建对象。
2.@ComponentScan(“com.jt”) //扫描包路径 子孙包,通常写在配置类

创建工厂模式

1.FactoryBean是Spring提供的接口(实现),spring自动完成调用,获取指定对象。
重写getObject/getObjectType -----现阶段,为固定写法.@Component(“calendar”)
2.模式以MapKey:calendar,value=Calendar对象结合的形式获取
1) key:当前类型,以自己编辑的注解为准。
2) value:调用getObject获取返回值对象
数据由spring容器管理
3.工厂模式在
1) 某个对象不能实例化使用
2) 整合其他第三方框架对象使用.

单例和多例模式

1.单例:在内存中所有请求用同一个对象来处理,通过单例模式,可以保证系统中一个类只有一个实例
2.多例:在内存中中每个请求用一个新的对象来处理

注解

1.Spring默认都是单例
2.通过@Scope控制对象单例/多例
@Scope(“singleton”)单例
@Scope(“prototype”)多例

懒加载机制

Spring容器创建,对象立即创建则该加载方式为 “立即加载“.
Spring容器创建,对象在被使用的时候才创建称为“懒加载”.

注解

@Lazy //懒加载 通常写在方法上

单例多例和懒加载的关系

不懂时,可以再看看,这个作者的https://blog.csdn.net/qq_32224047/article/details/106994783
Spring容器管理的bean默认都是单例,即一个bean只会创建一个对象,存在内置map中,之后获取多少该bean,都只返回同一个对象. 目的是为了减少对象的创建,减少内存的消耗.
多例.getBean()获取bean时,Spring都会重新创建对象返回,每次都是一个新对象,

懒加载,只正对单例bean有作用,多例没有意义,本身多例就占用内存每次都是新的对象.
懒加载只是延后了对象创建的时机,对象仍然时单例的.

Spring对象生命周期(自动调用)

总共为四个阶段:初始化,对象创建,对象使用,摧毁。
作用:各个时期对对象进行干预(回调函数/钩子函数/接口回调)

注解

@PostConstruct //对象创建之后立即调用
@PreDestroy //对象结束销毁,进行调用

依赖注入DI

注解

@Autowired //对象需要使用属性注入使用。
注入方式:
1.默认按类型注入(接口)自动注入实现类
2.按名称注入(key),一般不用

@Qualifier(“cat”) //必须配合Autowired
@Resource(name = “dog”) // @Autowired+@Qualifier(“cat”)

MVC设计思想

M: model 数据/业务层 V: view视图/用户界面 C: control 控制层负责根据用户从View层输入的指令, 选取"数据层"中的数据, 然后对其进行相应的操作, 产生最终的结果.
优点:
1.降低代码的耦合性
2.前端专注于开发页面view
3.后端专注于开发后端model
4.前后端通过 control 进行控制

注解:
1.@Controller // 控制层与前端页面交互
2.@Service //业务层 编辑业务逻辑(方法)
3.@Repository //持久层Mapper/Dao 实现数据库操作

IOC/DI

功能:
1.Ioc 由Spring容器管理对象的生命周期
2.对象与对象之间的耦合性降低
3.DI是依赖注入,默认采用类型注入,如果由特殊需求采用名称,例:@Qualifier(“cat”)
4.Spring中IOC和DI相互配合,可以极大程度的降低耦合性
意义:
Spring由于采用了IOC/DI的设计方式,可以整合其它的第三方框架.使得程序的调用"浑然一体"

JDK/CGlib动态代理

传统业务代码存在的问题:
1.拥有多个方法时,每个方法都需要控制事务,代码重复率较高
2.service业务层,应当只处理业务,不和事务代码耦合在一起,拓展性低,耦合性高。

代理模式

特点:解耦,通用方法写到代理对象。

JDK

1.JAVA原生api无需导包
2.代理要求:被代理者是接口/实现接口
3.代理对象方法与被代理者方法相同
Spring中@Autowired 注入代理对象自动代理 Spring默认jdk代理,SpringBoot默认CGlib代理

CGLib

被代理者有无接口都可以.
代理对象是目标对象的子类 重写子类方法

总结

1.JDK代理工具API: Proxy.newProxyInstance(类加载器,接口数组,invocationHandler接口)
2.CGlib代理工具API: Enhancer 增强器对象 获取代理对象 enhancer.create(); 回调接口
MethodInterceptor接口
3.JDK中执行目标方法
-method.invoke(target,args);
CGlib中执行目标方法
-method.invoke(target,args);

AOP切面编程

利用AOP对业务逻辑各个部分再进行分割独立,从而降低业务逻辑之间的耦合,提高重用性,提高开发效率。
AOP利用代理对象在不修改源码的条件下,对方法进行扩展

注解

@EnableAspectAutoProxy //开启AOP
@Aspect //表示该类是一个切面
@Pointcut(“bean(xxxxx)”) ///切点 xxx代理对象类
@Before(“pointcut()”) //前置通知,目标方法执行之前执行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值