Spring && SpringMVC 总结

Spring:

IOC(控制反转):

原理:

(1). IoC(Inversion of Control)是指容器控制程序对象之间的关系,⽽不是传统实现中,由程序代码直接操控。控制权
由应⽤代码中转到了外部容器,控制权的转移是所谓反转。 对于Spring⽽⾔,就是由Spring来控制对象的⽣命周期和对象之间的
关系;IoC还有另外⼀个名字——“依赖注⼊(Dependency Injection)”。从名字上理解,所谓依赖注⼊,即组件之间的依赖关系
由容器在运⾏期决定,即由容器动态地将某种依赖关系注⼊到组件之中。

(2). 在Spring的⼯作⽅式中,所有的类都会在spring容器中登记,告诉spring这是个什么东⻄,你需要什么东⻄,然后
spring会在系统运⾏到适当的时候,把你要的东⻄主动给你,同时也把你交给其他需要你的东⻄。所有的类的创建、销毁都由
spring来控制,也就是说控制对象⽣存周期的不再是引⽤它的对象,⽽是spring。对于某个具体的对象⽽⾔,以前是它控制其他对
象,现在是所有对象都被spring控制,所以这叫控制反转

(3). 在系统运⾏中,动态的向某个对象提供它所需要的其他对象。

(4). 依赖注⼊的思想是通过反射机制实现的,在实例化⼀个类时,它通过反射调⽤类中set⽅法将事先保存在HashMap中
的类属性注⼊到类中。 总⽽⾔之,在传统的对象创建⽅式中,通常由调⽤者来创建被调⽤者的实例,⽽在Spring中创建被调⽤者
的⼯作由Spring来完成,然后注⼊调⽤者,即所谓的依赖注⼊or控制反转。 注⼊⽅式有两种:依赖注⼊和设置注⼊; IoC的优
点:降低了组件之间的耦合,降低了业务对象之间替换的复杂性,使之能够灵活的管理对象。

jdbcTemplate 组件:

概述: 是spring提供的一个模板类,底层封装jdbc,用户持久层操作,作用:使用简单方便;

  • JdbcTemplate主要提供以下五类方法:
    1、execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句
    2、update方法:update方法用于执行新增、修改、删除等语句
    3、batchUpdate方法:用于执行批处理相关语句
    4、query方法及queryForXXX方法:用于执行查询相关语句
    5、call方法:用于执行存储过程、函数相关语句

XML配置:

1】IOC管理dataSource数据源的配置
	<bean id="dataSource" class=
     	"org.springframework.jdbc.datasource.DriverManagerDataSource">
        <!--${}用于按key取得配置文件中的配置-->
        <property name="driverClassName" 
                      value="${dataSource.driverClassName}"></property>
        <property name="url" value="${dataSource.url}"></property>
        <property name="username" value="${dataSource.username}"></property>
        <property name="password" value="${dataSource.password}"></property>
    </bean>2】IOC管理jdbcTemplate的配置
	<!--配置jdbc查询模板,注入dataSource-->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"></property>
    </bean>3】加载外部配置文件
	<!--读取外部根目录下资源配置文件-->
    <context:property-placeholder 
         location="classpath:db.properties"></context:property-placeholder>

AOP(面向切面):

AOP(Aspect-OrientedProgramming,面向方面编程):使用动态代理技术,在不修改源码的情况下,对类中的方法进行增强;
利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。AOP代表的是一个横向的关系,如果说“对象”是一个空心的圆柱体,其中封装的是对象的属性和行为;那么面向方面编程的方法,就仿佛一把利刃,将这些空心圆柱体剖开,以获得其内部的消息。而剖开的切面,也就是所谓的“方面”了。然后它又以巧夺天功的妙手将这些剖开的切面复原,不留痕迹。

实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。

相关术语:

#Joinpoint(连接点):
在spring中,连接点指的都是方法(指的是那些要被增强功能的候选方法)

#Pointcut(切入点):
切入点是指我们要对哪些Joinpoint进行拦截的定义。

#Advice(通知):
通知指的是拦截到Joinpoint之后要做的事情。即增强的功能
通知类型:前置通知、后置通知、异常通知、最终通知、环绕通知

#Target(目标对象):
被代理的对象。

#Proxy(代理对象):
一个类被AOP织入增强后,即产生一个结果代理类。

#Weaving(织入):
织入指的是把增强用于目标对象。创建代理对象的过程

#Aspect(切面):
切面指的是切入点和通知的结合`

Spring七大事务传播属性 && 五大隔离级别

  • 传播属性:
  1. PROPAGATION_REQUIRED – ⽀持当前事务,如果当前没有事务,就新建⼀个事务。这是最常⻅的选择。
  2. PROPAGATION_SUPPORTS – ⽀持当前事务,如果当前没有事务,就以⾮事务⽅式执⾏。
  3. PROPAGATION_MANDATORY – ⽀持当前事务,如果当前没有事务,就抛出异常。
  4. PROPAGATION_REQUIRESNEW – 新建事务,如果当前存在事务,把当前事务挂起。
  5. PROPAGATION_NOTSUPPORTED – 以⾮事务⽅式执⾏操作,如果当前存在事务,就把当前事务挂起。
  6. PROPAGATION_NEVER – 以⾮事务⽅式执⾏,如果当前存在事务,则抛出异常。
  7. PROPAGATIONNESTED – 如果当前存在事务,则在嵌套事务内执⾏。如果当前没有事务,则进⾏与
    PROPAGATIONREQUIRED类似的操作。
  • 隔离级别:
  1. ISOLATION_DEFAULT 这是⼀个PlatfromTransactionManager默认的隔离级别,使⽤数据库默认的事务隔离级别.
  2. 另外四个与JDBC的隔离级别相对应:
  3. ISOLATION_READUNCOMMITTED: 这是事务最低的隔离级别,它充许别外⼀个事务可以看到这个事务未提交的数
    据。这种隔离级别会产⽣脏读,不可重复读和幻读。
  4. ISOLATION_READCOMMITTED 保证⼀个事务修改的数据提交后才能被另外⼀个事务读取。另外⼀个事务不能读取
    该事务未提交的数据。这种事务隔离级别可以避免脏读出现,但是可能会出现不可重复读和幻读。
  5. ISOLATION_REPEATABLEREAD 这种事务隔离级别可以防⽌脏读,不可重复读。但是可能出现幻读。它除了保证
    ⼀个事务不能读取另⼀个事务未提交的数据外,还保证了避免不可重复读。
  6. ISOLATION_SERIALIZABLE 这是花费最⾼代价但是最可靠的事务隔离级别。事务被处理为顺序执⾏。除了防⽌脏
    读,不可重复读外,还避免了幻读。

SpringMVC :

Srping MVC 是一种基于Servlet的技术,它提供的核心控制组件DispatcherServlet 和相关的组件,并制定了松散的结构,已适应各种灵活的需要。

springMVC组件

SpringMVC请求处理流程:

1、请求解析和匹配DipatcherServlet路径:客户端发出⼀个http请求给web服务器,web服务器对http请求进⾏解析,
如果匹配DispatcherServlet的请求映射路径(在web.xml中指定),web容器将请求转交给DispatcherServlet.

2、匹配处理器Handler:DipatcherServlet接收到这个请求之后将根据请求的信息(包括URL、Http⽅法、请求报⽂头
和请求参数Cookie等)以及HandlerMapping的配置找到处理请求的处理器(Handler)。

3-4、处理器进⾏处理:DispatcherServlet根据HandlerMapping找到对应的Handler,将处理权交给
Handler(Handler将具体的处理进⾏封装),再由具体的HandlerAdapter对Handler进⾏具体的调⽤。

5、处理器返回逻辑视图ModelAndView对象给DispatcherServlet:Handler对数据处理完成以后将返回⼀个
ModelAndView()对象给DispatcherServlet。

6、Dispatcher通过ViewResolver将逻辑视图转化为正式视图view:Handler返回的ModelAndView()只是⼀个逻辑视
图并不是⼀个正式的视图,DispatcherSevlet通过ViewResolver将逻辑视图转化为真正的视图View。

7、Dispatcher通过model解析出ModelAndView()中的参数进⾏解析最终展现出完整的view并返回给客户端。

注解汇总

【Spring-IOC相关】
注解xml说明
@Component父注解
@Controller:用于响应层的注解
@Service:用于业务层的注解
@Repository:一般用于持久层的注解
< bean id="" class="">声明bean交于springIOC管理
@Scopescope=“singleton/prototype”生命周期
@PostConstructinit-method初始化方法
@PreDestroydestroy-method销毁方法
【Spring-DI相关】
注解xml说明
@Autowired、@Qualifierref=“类型”默认按照bean的类型注入数据
@Resourceref=“类型”默认按照bean的名称注入数据
@Valueref=“基础数据类型”给基本数据类型赋值
【Spring-AOP相关】
注解xml说明
@Aspect<aop:aspect >声明切面
@Before<aop:before >前置通知
@AfterReturning<aop:after-returning >后置正常通知
@AfterThrowing<aop:after-throwing >后置异常通知
@After<aop:after >最终通知
@Around<aop:around >环绕通知
【Spring-TX相关】

@Transactional

@Transactional 注解可以作用于接口、接口方法、类以及类方法上,但是 Spring 建议不要在接口或者接口方法上使用该注解,因为这只有在使用基于接口的代理时它才会生效。另外, @Transactional 注解应该只被应用到 public 方法上,这是由 Spring AOP 的本质决定的。如果你在 protected、private 或者默认可见性的方法上使用 @Transactional 注解,这将被忽略,也不会抛出任何异常。

【属性】

属性类型说明
valueString可选的限定描述符,指定使用的事务管理器
propagationenum: Propagation可选的事务传播行为设置
isolationenum: Isolation可选的事务隔离级别设置
readOnlyboolean读写或只读事务,默认读写
timeoutint (in seconds granularity)事务超时时间设置
rollbackForClass对象数组,必须继承自Throwable导致事务回滚的异常类数组
rollbackForClassName类名数组,必须继承自Throwable导致事务回滚的异常类名字数组
noRollbackForClass对象数组,必须继承自Throwable不会导致事务回滚的异常类数组
noRollbackForClassName类名数组,必须继承自Throwable不会导致事务回滚的异常类名字数组
【Spring-JUNIT相关】
注解说明
@RunWith指定使用SpringJUnit4ClassRunner
@ContextConfiguration指定加载配置文件
【Spring-MVC相关】
注解说明
@RequestMapping配置映射地址
@GetMapping配置映射地址GET:得到资源
@PutMapping配置映射地址PUT:修改整体内容
@PostMapping配置映射地址POST:新增内容
@DeleteMapping配置映射地址DELETE:删除内容
@PatchMapping配置映射地址PATCH:修改部分内容
@PathVariable绑定URL中的参数值
@RequestParam绑定单个请求数据,既可以是URL中的参数,也可以是表单提交的参数
@RequestBody请求参数格式为json
@RestController注释在类上,生命一个bean,且表示此类中返回类型都是json(@Controller+@ResponseBody)
@ResponseBody注解在方法上,表示此方法返回类型为json
@ExceptionHandler异常处理
@ControllerAdvice对controller层进行增强
【配置类相关】
注解XML说明
@Configuration/声明此类为配置类
@EnableAspectJAutoProxy<aop:aspectj-autoproxy >开启AOP
@EnableTransactionManagement<tx:annotation-driven >开启事务管理器
@EnableWebMvc(*)<mvc:annotation-driven >开启springMVC
@PropertySource<context:property-placeholder >导入外部配置
@MapperScan(*)/mybatis的扫描配置
@Bean< bean >声明bean
@ComponentScan<context:component-scan >扫描配置
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值