Spring学习总结

ch01-hello-spring:使用的ioc(控制反转), 由spring创建对象
实现步骤:
1.创建maven项目
2.加入maven的依赖
spring的依赖,版本5.2.5版本
junit依赖
3.创建类(接口和他的实现类)
和没有使用框架一样,就是普通的类。
4.创建spring需要使用的配置文件(beans.xml)
声明类的信息,这些类由spring创建和管理
在beans.xml中,类似tomcat,起一个名字,后面放他的类的地址
他会帮我们创建这个类的对象,我们只需要使用这个自己起的名字就可以使用这个类的对象了

  <bean id="someService1" class="com.bjpowernode.service.impl.SomeServiceImpl" scope="prototype"/>

5.测试spring创建的对象。
在MyTest类中,通过自己配置中定的名字,拿到配置的地址类的对象,为你所用,自己细看。
test02:创建对象并使用对象调用方法
test03:获取spring容器中 java 对象的信息
test04: 获取一个非自定义的类对象,就是已经存在的类的对象,不是自己写的类

ch02-di-xml:在spring的配置文件中,用基于xml的di给java对象的属性赋值。(经常改值的用配置文件方式赋值,还是推荐用注解)
di:依赖注入,表示创建对象,给属性赋值。

di的实现有两种:
1.在spring的配置文件中, 使用标签和属性完成,叫做基于XML的di实现(理解)
2.使用spring中的注解,完成属性赋值, 叫做基于注解的id实现(现在使用很多,必须会)
di的语法分类:

  1. set注入(设置注入): spring调用类的set方法,在set方法可以实现属性的赋值。
    百分之80左右都是使用的set注入
  2. 构造注入,spring调用类的有参数构造方法,创建对象。在构造方法中完成赋值。

实现步骤:
1.创建maven项目
2.加入maven的依赖
spring的依赖,版本5.2.5版本
junit依赖
3.创建类(student)(包和包一一对应)
ba01对应资源的ba01,每一个包下的类和资源包一一对应
4.创建spring需要使用的配置文件(applicationContext.xml)
声明类的信息,这些类由spring创建和管理
通过spring的语法,完成属性的赋值
5.test测试。
MyTest:简单类型的set注入(设值注入)(spring中规定java的基本数据类型和String都是简单类型。)
MyTest02:引用类型的set注入 MyTest03:构造注入
MyTest04:引用类型自动注入(byName) MyTest05:引用类型自动注入(byType)
MyTest06:包含关系的配置文件(多个配置文件,一个配置文件一个模块,例如购物车模块)

ch03-ioc-homework:作业,ioc的熟练操作(注解方式赋值)

ch04-di-anno:基于注解的di,通过spring的注解完成java对象的创建,属性。代替xml文件(不经常改值的使用注解方式赋值,推荐使用,是一个流行的趋势)
使用注解必须使用spring-aop依赖,在你加入spring-context的同时, 间接加入了spring-aop的依赖,
实现步骤:
1.加入依赖
2.创建类,在类中加入注解
3.创建spring的配置文件,声明组件扫描器的标签,指名注解在你的项目的中的位置。声明类用的注解方式,而不是xml中的所以必须声明组件扫描器
4.使用注解创建对象, 创建容器ApplicationContext

学习的注解:
ba01:
@Component:创建对象的,等同于的功能,@Respotory、@Service、@Controller、基础功能和他一样,只是有了额外的功能
@Respotory:(用在持久层类的上面): 放在dao的实现类上面, 表示创建dao对象,dao对象是能访问数据库的。
@Service:(用在业务层类的上面):放在service的实现类上面,创建service对象,service对象是做业务处理,可以有事务等功能的。
@Controller:(用在控制器的上面):放在控制器(处理器)类的上面,创建控制器对象的,控制器对象(和servlet一样),能够接受用户提交的参数,显示请求的处理结果。
ba02:
@Value:简单类型的属性赋值和使用配置文件+${}取值
ba03:
@Autowired(byType模式,默认): spring框架提供的注解,实现引用类型的赋值。
ba04:
@Autowired(byName模式): spring框架提供的注解,实现引用类型的赋值。
bao5:
@Autowired(required = false)赋值为true和false的区别
bao6:
@Resource:自jdk中的注解,spring框架提供了对这个注解的功能支持,可以使用它给引用类型赋值,使用的也是自动注入原理,支持byName, byType .默认是byName

ch05-aop-leadin:动态代理(jdk):可以在程序的执行过程中,创建代理对象。
通过代理对象执行方法,给目标类的方法增加额外的功能(功能增强)

SomeServiceImpl一开始只有两个业务方法,如果我们要给他增加新的非业务功能,甚至很多个这个类都要增加新的非业务功能
就会变成SomeServiceImpl2,SomeServiceImpl3。。。会修改原有代码且代码重复,不能专注业务逻辑代码,耦合度高
使用jdk的动态代理,完成这个非业务功能的增加,例子:

SomeService SomeServiceImplServiceTools,MyIncationHandlerMyApp

jdk动态代理实现步骤:
1.创建目标类, SomeServiceImpl目标类,给它的doSome, doOther增加 输出时间,事务功能。
2.创建InvocationHandler接口的实现类(MyIncationHandler), 在这个类实现给目标方法增加功能。
3.使用jdk中类Proxy,创建代理对象。 实现创建对象的能力。

ch06-aop-aspectj:使用aspectj框架实现aop。
使用aop:目的是给已经存在的一些类和方法,增加额外的功能。并且是不改变原来的类的代码。

使用aspectj实现aop的基本步骤:
1.新建maven项目
2.加入依赖
1)spring依赖
2)aspectj依赖
3)junit单元测试
3.创建目标类:接口和他的实现类。
要做的是给类中的方法增加功能

4.创建切面类(用于给目标类增加方法):普通类
1)在类的上面加入 @Aspect
2)在类中定义方法, 方法就是切面要执行的功能代码
在方法的上面加入aspectj中的通知注解,例如@Before
有需要指定切入点表达式execution()

5.创建spring的配置文件:声明对象,把对象交给容器统一管理
声明对象你可以使用注解(一般是非事务业务使用)或者xml配置文件(一般是事务业务使用)
这里使用bean

  1. 声明目标对象
    2)声明切面类对象
    3)声明aspectj框架中的自动代理生成器标签。
    自动代理生成器:用来完成代理对象(例子5的:Proxy对象)的自动创建功能的。

6.创建测试类,从spring容器中获取目标对象(实际就是代理对象)。
通过代理的对象执行方法,实现目标方法执行时,增强了功能
通过代理执行方法,实现aop的功能增强。

例子:
ba01:
@Before: 前置通知注解,JoinPoint参数。用aspectj框架实现aop(面向切面编程)增加功能,底层是动态代理
ba02:
@AfterReturning:后置通知,returning参数。
ba03:
@Around:环绕通知,ProceedingJoinPoint参数。环绕通知等同于jdk动态代理的InvocationHandler接口,等同于动态代理中的invoke,功能极强
环绕通知:经常做事务,在目标方法之前开启事务,执行目标方法, 在目标方法之后提交事务
上面3个为重点,后面的了解就可以
ba04:
@AfterThrowing:异常通知
ba05:
@After:最终通知 1.总是会执行,即使有异常也会执行 2.在目标方法之后执行的 一般用于最后的清理
ba06:
@Pointcut: 定义和管理切入点, 如果你的项目中有多个切入点表达式是重复的,可以复用的。可以使用@Pointcut
ba07:
有接口是jdk的动态代理,proxy对象来自:com.sun.proxy. P r o x y 0 没 有 是 c g l i b 代 理 , p r o x y 对 象 来 自 : c o m . b j p o w e r n o d e . b a 07. S o m e S e r v i c e I m p l Proxy0 没有是cglib代理,proxy对象来自:com.bjpowernode.ba07.SomeServiceImpl Proxy0cglibproxy:com.bjpowernode.ba07.SomeServiceImpl E n h a n c e r B y S p r i n g C G L I B EnhancerBySpringCGLIB EnhancerBySpringCGLIB$acd25725
ba08:
cglib代理:有继承就可以使用,所以有接口也可以使用cglib代理,需要在配置文件中设置为: <aop:aspectj-autoproxy proxy-target-class="true"/>

ch07-spring-mybatis:spring和mybatis的集成,和实际项目非常相似了
步骤:
1.新建maven项目
2.加入maven的依赖
1)spring依赖
2)mybatis依赖
3)mysql驱动
4)spring的事务的依赖
5)mybatis和spring集成的依赖: mybatis官方提供的,用来在spring项目中创建mybatis
的SqlSesissonFactory,dao对象的
3.创建实体类 (对象)
4.创建dao接口和mapper文件 (增删改查方法和SQL语句)
5.创建mybatis主配置文件 (配置sql映射文件,别名,日志等)
6.创建Service接口和实现类,属性是dao。 (模拟业务,通过service操作dao,实现类中要根据业务在前面定义dao对象并写上set方法完成属性的赋值,后面需要使用哪个就定义哪个)
7.创建spring的配置文件(这里面的东西会用就可以了,原理很复杂):声明mybatis的对象交给spring创建
1)数据源DataSource (在配置文件applicationContext.xml中,设置为DruidDataSource)
2)SqlSessionFactory (声明mybatis中提供的SqlSessionFactoryBean类并赋值)
3) Dao对象 (通过MapperScannerConfigurer并给里面的属性赋值得到dao代理对象,固定写法 )
4)声明自定义的service (声明并将dao对象【studentDao】赋值给service,通过service操作dao对象调用接口方法访问数据库)

8.创建测试类,获取Service对象,通过service调用dao完成数据库的访问

spring2个核心技术,分别是ioc(控制反转)和aop(面向切面编程),spring是容器,存放项目中的各种对象,我们只需要取就可以了
整合mybatis就是运用了ioc,由spring创建我们需要的dao对象,aop用于给已经存在的一些类和方法,增加额外的功能。并且是不改变原来的类的代码。

ch08-spring-trans: 做事务的环境项目,这个项目因为没有添加事务会在有些时候报错
实现步骤:
1.新建maven项目
2.加入maven的依赖
1)spring依赖
2)mybatis依赖
3)mysql驱动
4)spring的事务的依赖
5)mybatis和spring集成的依赖: mybatis官方体用的,用来在spring项目中创建mybatis
的SqlSesissonFactory,dao对象的
3.创建实体类
Sale, Goods
4.创建dao接口和mapper文件
SaleDao接口 ,GoodsDao接口
SaleDao.xml , GoodsDao.xml
5.创建mybatis主配置文件
6.创建Service接口和实现类,属性是saleDao, goodsDao。
7.创建spring的配置文件:声明mybatis的对象交给spring创建
1)数据源DataSource
2)SqlSessionFactory
3) Dao对象
4)声明自定义的service
8.创建测试类,获取Service对象,通过service调用dao完成数据库的访问
表中有100个东西,测试类中,买200个东西,销售记录表增加200个销售记录,然后报错商品不足,不执行接下来的商品类减少200个
此时造成了,销售记录表显示卖出去了,但是实际上东西并没有卖出去,还是100个。这个时候就需要事务进行回滚了
我们需要让事务来帮助我们,添加成功了,该减少的就一定要减少,而不是因为报错异常导致一个增加了而另一个没有减少

ch09-spring-trans-anno:解决08的问题,给08项目添加事务,解决问题,使用的是中小型项目中常用的注解事务
1.在配置文件applicationContext.xml中声明事务管理器(内部实现了事务开启,回滚等)
2.开启事务注解驱动,告诉spring使用注解管理事务,创建代理对象
实际开发中,我们在要有事务的公共方法上面加上事务注解就可以了,就是这么简单,当然我们也可以修改事务默认值
中小型项目中,使用spring的注解事务就足够了,大型项目中通常有大量的事务配置,需要使用aspectj框架的功能
在xml配置文件中实现,实现方法和事务配置完全分离

ch10-spring-trans-aspectj:解决08的问题,给08项目添加事务,解决问题,使用的是大型项目中常用的aspectj框架功能实现事务
1.要使用的是aspectj框架,需要加入依赖
2.声明事务管理器对象
3.声明方法需要的事务类型(配置方法的事务属性【隔离级别,传播行为,超时】)
4.配置aop:指定哪些哪类要创建代理。

ch11-spring-web:1.基于07的web学生注册功能。2配置监听器
在web项目中使用spring,完成学生注册功能

实现步骤:
1.创建maven,web项目
2.加入依赖
拷贝ch7-spring-mybatis中依赖
jsp,servlet依赖

3.拷贝ch7-spring-mybatis的代码和配置文件
4.创建一个jsp发起请求,有参数id,name ,email,age.
5.创建Servlet,接收请求参数, 调用 Service ,调用dao完成注册
6.创建一个jsp作为显示结果页面

初始完成功能后发现,每次提交请求,容器中的对象就都要创建一次,如果一下子提交了很多请求并且对象很多,内存马上就不够用了
需求:将web项目中容器对象只在开始需要时创建一次,然后把容器对象放入到全局作用域ServletContext中。
怎么实现:
使用监听器 当全局作用域对象被创建时 创建容器 存入ServletContext
监听器作用:
1)创建容器对象,执行 ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
2)把容器对象放入到ServletContext, ServletContext.setAttribute(key,ctx)
监听器可以自己创建,也可以使用框架中提供好的ContextLoaderListener
1.添加监听器依赖
2.web.xml中注册配置监听器

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值