Spring基础知识回顾-1
复习基础知识
一. Bean定义:
- 配置文件配置:纯XMl 配置来管理bean 的话,所有与bean相关的一切配置都会写在配置文件中
- xml和注解配置:bean可以不在xml配置文件中去定义
- <context:component-scan base-package=“相关bean配置的目录”></context:component-scan>
- Java代码中作为bean 配置的话需要加上@Component
@Component //声明这是一个SpringFramework 的组件 - Qualifier(“beanid/name”) 作用:根据beanid/name 去查找bean 的定义,Qualifier不能单独使用,需要结合Autowired使用,
- Autowired 默认是ByType,
- @Qualifier(“getStudent”) :弥补Bytype时class有多个定义的场景
- @Resource 是JDK提供的做自动注入用的注解,相当于Autowired与Qualifier 的结合体.
二、动态代理
- JDK动态代理实现:被代理者、代理者—实现统一接口
代码创建阶段生成一个代理对象,只有在代码运行到这个地方加载类,创建代理对象比较快。整体运行慢一点
InvocationHandler下面的invoke方法,在实现该方法的返回一个代理的对象-需要一个被代理的对象targetObj 将传进来的被代理对象给先前定义的对象
调用创建代理对象的方法-newProxyInstance(targetObj .getClassLoader() ,targetObj.getInterfaces())
targetObj .getClassLoader():类加载器,动态或静态加载类 targetObj .getClass().getInterfaces()获取一个类所实现的任何接口- 在invoke方法里面通过method.invoke(targetObj, args)来得到切入的点
- CGLiB方式实现动态代理:通过字节码技术在运行的时候动态地创建一个被代理类的子类作为代理
– 依赖包:cglib包
运行阶段创建一个子类去继承被代理类,运行效率高,创建对象稍微慢一点
MethodInterceptor的intercept方法 --创建代理对象-- Enhancer类做代理对象的创建-- .setSurperclass(被代理对象的父类)–回调通知.setCallback()
.create()创建代理对象 在intercept()方法里面methodProxy.invokeSuper()
ClassLoad–类装载器,
三、自动装配
- 自动装配的方式:
<property name="teacher" ref="teacher">
- list和set的简单装配:
<value><value/>
- map的entryset
- autowire=“byName” 根据Beanid去配置文件当中寻找对应的bean
注意id名字和类里面定义的属性类的名称 - autowire=“byType” 根据Class后面配置的类的路径信息去做装配
- 通过autowired对对象进行自动装配,默认bytype方式
- @Configuration和@Bean注解来实现配置文件中的功能
@Configuration标明该类为spring配置类,而@Bean则标明这是bean的配置,相当于xml文件中的<bean id=""/>
- 导入其他配置文件时需要加上:
<context:component-scan base-package=""></context:component-scan>
Spring Boot:快速搭建框架
- 在spring基础上二次开发,使用大量注解减少spring的配置文件与代码量 约定大于配置
springFramework问题:开发企业级项目会产生大量配置文件 - springBoot运行:
(1)创建项目
(2)业务处理类,加一个注解@springBootApplication(一个有springBoot提供的组合注解:接收客户端的请求做处理)
(3)运行,制定窗口访问
- web的一套流程:浏览器发起请求–>服务器接收请求–>业务逻辑–>操作DB—>返回数据–>给业务逻辑层–>服务器响应–>浏览器响应
SpringMVC用到的注解
@Controller:作用在类上,声明这是一个控制器类,并且在ApplicationContext启动时自动加载进容器
@RequestMapping()来声明真正处理的方法,通常需要给RequestMapping指定一个路径,
路径不可重复,一个RequestMapping下面只能接一个方法
依赖:
@PathVariable:适用于接口与接口之间进行交互, “/”后面的内容统一归在/{ }大括号内。