您现在的位置是:首页 >技术杂谈 >Spring-【回顾】网站首页技术杂谈
Spring-【回顾】
简介
轻量级的IOC AOP框架
组成
七大模块
AOP
ORM
DAO
Web
Context
WebMVC
Core
IOC理论推理
增加需求的时候不需要改变原来的代码,降低耦合性
IOC本质
控制:谁来控制对象的创建,传统应用程序的对象是由程序本身创建的,使用pring后,对象由Spring创建
反转:程序本身不创建对象,而变成被动接受对象
依赖注入:就是利用set方法来进行注入
IOC是一种编程思想,由主动的编程编程被动的接受
我们彻底不用在程序中去改动了,要实现不同的操作,只需要在xml配置文件中进行修改。
IOC创建对象的方式
默认使用无参构造
假设我们要使用有参构造创建对象
下标赋值
类型
参数名
在配置文件加载的时候,容器中管理的对象就已经初始化了
配置说明
import可以将多个bean放在一个配置文件,使用时直接导入总的配置文件即可
DI依赖注入环境
构造器注入
Set方式注入【重点】
依赖:bean对象的创建依赖于容器
注入:bean对象中的所有属性,由容器来注入
普通植入
对象注入
数组注入
集合List注入
集合Map注入
集合Set注入
字符串注入
拓展方式注入
c、p命名空间
p对应set注入
c对应构造器注入
Bean的作用域 scope
单例
原型
request
session
application
websocket
后面四个只能在web开发中使用
自动装配Bean
自动装配是Spring满足bean依赖的一种方式
Spring会在上下文自动寻找,并自动给bean装配属性
在Spring中有三种装配方式
xml
java中显示配置
隐式的自动装配【重要】
byName:根据对象的set方法后面对应的beanid
byType:对象属性相同的bean
注解实现自动装配
@Autowired配合@Qualifier使用属于Spring注解
@Resource为jdk注解
都是自动装配的,都可以放在属性字段上
@Autowired 通过byType的方式实现,而且必须要求这个对象存在!【常用】
@Resource 默认通过byname的方式实现,如果找不到名字,则通过byTye实现!如果两个都找不到的 情况下就报错!【常用】
@执行顺序不同:@Autowired通过byType的方式实现。@Resource默认通过byname的方式实现。
类型重复的话,如果名字不是默认的(如cat11,cat111,而没有默认的cat)
@Autowired配合@Qualifier(value = “cat11”)使用
@Resource直接使用@Resource(name = “cat11”)
@Nullable :字段标记了这个注解,说明字段可以为null
使用javaconfg实现配置
javaconfg是Spring的一个子项目,在Spring4之后称为一个核心功能
@Configuration
public class Apponfig{
@Bean
piublic Myservice myService(){
return new MyServiceImpl();
}
}
代替
<beans>
<bean id="myService" class="com.service.MyServiceImpl"/>
<beans>
总结一
所有的类都需要装配到Bean里面
所有的Bean 都需要通过容器去取
容器取得的Bean就会一个对象
AOP
设计模式:代理模式
SpringAop底层就是代理模式
代理模式:
静态代理
动态代理
角色分析
抽象角色:一般会使用接口或者抽象类来解决
真实角色:被代理的角色
代理角色:代理真实角色,代理真实角色后,我们一般会做一些附属操作
客户:访问代理对象的角色
代码步骤:
接口
真实
代理:实现接口的方法、引入真实属性、设置set方法并把属性设置为参数、写方法在需要添加功能的方法上调用该方法
客户
动态代理
解决静态代码代码复杂的问题
底层是反射
动态代理分为两大类:基于接口、基于类
基于接口:jdk动态代理:jdk动态代理要求目标对象必须实现接口
基于类:cglib
另外:java字节码实现:javasist
两个类:Proxy:代理,InvocationHandler:调用处理程序
动态代理:在程序执行中,使用jdk的反射机制,创建代理类对象,并动态的指定要代理的目标类
换句话说:使用jdk的反射机制,创建对象的能力,创建的是代理类的对象。而不用你创建类文件。不用写java文件
动态:在程序的执行时,调用jdk提供的方法才能创建代理类的对象。
实现:
jdk:使用java反射包中的类和接口实现动态代理的功能
InvocationHandler,Method,Proxy
cglib:继承,不能是final修饰的类
jdk动态代理:
1:反射,Method