spring
2021-05-31 08:45:24 0 举报
AI智能生成
spring完整全部笔记,有这一篇就够了
作者其他创作
大纲/内容
什么是spring
是一个框架,核心技术是ioc,aop,实现解耦合
spring是一个容器,容器中存放的java对象,需要做的事,我们要把对象放入容器中
怎么使用spring
spring是一个容器,把项目中用的对象放入到spring容器中
让我们的容器来完成对象的创建,对象的管理(属性赋值)
我们在代码中来获取容器中的对象
什么样的对象,应该放到容器中
dao类,service,controller类,工具类
1、使用xml配置文件,使用bean标签
2、注解
spring中的对象,默认都是单例的。在容器中,叫这个名称的对象,只有一个
不放到容器中的对象
实体类,实体类的数据来自于数据库的
servlet,listener,filter等
使用spring框架的步骤
1、加入依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.6</version>
</dependency>
2、创建类:类可以有接口、实现类、没有接口的类
3、创建spring的配置文件,使用bean标签声明对象
4、使用容器中的对象,通过ApplicationContext接口,和他的实现类,ClassPathXmlApplicationContext ,他的方法getBean()
核心技术
1、ioc:控制翻转
1、是一个理论,思想,概念:指导开发人员在容器中,代码之外管理对象,给属性赋值,管理依赖
2、ioc技术实现使用di(依赖注入):开发人员在项目中只需要提供对象的名称,对象的创建,查找,赋值由容器内部实现
3、spring使用的是di的技术。底层使用的反射机制
4、di给属性赋值
1、set注入,spring调用类的set方法,来实现给属性的赋值
1、简单类型的set注入<property name="属性名"(属性名就是setXXX这里的XXX) value="属性的值" />
2、引用类型的set注入<property name="属性名" ref="bean的id" />
2、构造注入,spring调用的是有参数构造方法
1、<constructor-arg>使用标签的name属性,name表示构造方法的形参名
2、<constructor-arg/>的 index属性,用0123的方式表示构造方法形参名下标,可以省略,但是必须按照顺序
3、自动注入
由spring通过某些规则,给引用类型完成赋值,常用的由byName,byType
byName :按名称注入,java类中引用类型的【属性名称】和spring容器中bean的【id】一样,数据类型一样,这样的bean赋值给引用类型
byType:按类型注入,java类中,引用类型的【数据类型】和spring容器中bean的【class】是同源关系的。
常用注解
1、@Component:创建对象
2、@Repository:创建dao对象,访问数据库的
3、@Service:创建service对象,处理业务逻辑的,可以有事务功能
4、@Controller:创建Controller对象,接收请求,显示处理结果的
赋值操作
5、@Value简单类型的赋值
6、@Aotuwired:spring框架中给引用数据类型的赋值注解,支持byName,byType,默认是byType
7、@Resource:jdk中的注解,使用自动注入给引用数据类型赋值,支持byName,byType。默认是byName
8、注解的使用步骤
1、加入依赖:spring-context,间接加入了spring-aop
2、在类中加入注解
3、在spring的配置文件中,加入组件扫描器标签
<context:component-scan base-package="包名" />
ioc可以解耦合的
ioc能实现业务对象之间的解耦合,例如service和dao对象之间的解耦合
2、aop:面向切面编程
底层是动态代理
1、jdk动态代理
使用jdk反射包中的类实现创建代理对象的功能
要求:目标类必须实现接口
2、cglib动态代理
使用第三放的工具库,来实现代理对象的创建
要求:目标类必须能够继承,不能是final
原理:就是继承,子类就是代理
aop就是动态代理的规范化,把实现动态代理的步骤进行一个规范化
aop的作用
1、在目标类不修改源代码的时候,增加功能
2、减少重复的代码
3、专注于业务功能的实现
4、解耦合,业务功能和日志,事务这些非业务功能的耦合
什么时候考虑使用aop技术
1、要给系统中存在的类修改功能,原有类的功能不完善,还没有源代码,可以使用aop增加功能
2、给系统中多个类增加一个相同的功能,使用aop
3、给业务方法增加事务,日志输出
aop的实现框架
1、spring实现了aop,实现方式是接口
2、aspectj框架
1,使用注解可以实现aop的功能
2、使用xml配置文件中的标签实现aop功能
aop中的概念
1、aspect:切面,表示给业务方法增加功能,一般日志输出,事务,权限检查等是切面
2、pointcut:切入点,是一个或多个joinPoint的集合,表示切面功能执行的位置
3、advice:通知,也叫增强,表示切面执行的时间,在方法前,方法后等等
aspectj框架的使用
1、表示切面的执行时间,使用的通知注解
1、@Before:前置通知,在目标方法之前先执行切面的功能
2、@AfterReturning 后置通知,在目标方法之后执行的,能够获取到目标方法的返回值
3、@Around 环绕通知,在目标方法 前后都能增强功能,控制目标方法的访问,修改返回值,影响方法的执行结果
4、@AfterThrowing 异常通知在目标方法抛出异常后执行通知
5、@After 最终通知,总是会被执行的代码
6、@Pointcut 定义和管理切入点的辅助注解
7、代理的使用方式
1、如果目标类有接口,会使用jdk动态代理
2、如果目标类没有接口,默认使用cglib动态代理
3、有接口也可以强制使用cglib动态代理
2、表示切面位置的,切入点表达式:execution(【访问修饰符】 【返回值】 【包名 .类名,方法名(方法参数)】【方法抛出的异常】)
3、spring整合mybatis
整合的思路,使用的spring的IOC核心技术,把mybatis框架中使用的对象交给spring统一创建和管理,spring是容器,存放项目中要使用的对象,例如service对象,Dao对象,工具类对象等等
交给spring的mybatis对象
1、数据源DateSource,使用阿里公司的Druid连接池
2、SQLSessionFactory对象 使用SQLSessionFactoryBean在内部创建的SQLSessionFactory
3、Dao代理对象,使用MapperScannerConfigure,在这个类内部调用getMapper(),创建接口的Dao对象
0 条评论
下一页