##走过路过不容错过之##JavaEE 框架篇一 Spring
Posted xinyi_java
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了##走过路过不容错过之##JavaEE 框架篇一 Spring相关的知识,希望对你有一定的参考价值。
目录
说一下你对 Spring 的理解?
Spring中@Autowired和@Resource的区别?
SpringBoot和SpringMVC与springCloud关系及运行原理?
springboot 如果要直接获取 form 数据的话要怎么做?
SpringMVC 的 controller 里可不可以写成员变量
说一下你对 Spring 的理解?
-
关于Spring的话,我们平时做项目一直都在用,不管是使用ssh还是ssm,都可以整合。Spring里面主要就三点,也就是核心思想,IOC,DI,AOP。
-
其实spring这个框架也用到了java里的反射机制
-
DI就是依赖注入,把我们需要的类啊,接口啥的注入到spring中去。
-
IOC控制反转,像我们之前开发,如果想创建一个对象,就new一个,如果想这个对象中定义其他的变量或者对象,就在对象内部内部创建一个成员变量。但是现在的话,如果想用这个类的对象,咱们可以在spring的配置文件中配置一个bean,指定对应的全路径名称。spring通过配置文件用反射的方式,就可以直接帮我们获取到这个类的对象。还有AOP,就是面向切面编程,它的原理的话,我看过它的底层代码,它实际上就是实现了JDK的动态代理,以前的话用这个做过事物的控制,现在的话我我们都用注解来控制事务。AOP执行过程是一个纵向的过程,把每个方法当做一个点。基于这些点可以进行增强处理。形成了横向的切面,包含了原有方法和增强方法。不改变原代码结构,还添加额外的功能。
-
你了解的AOP的使用场景有哪些?
-
事务管理,日志打印,还有就是在老项目中也有可能用它来做权限管理
-
-
-
整体来说的话,spring在使用的时候非常方便,在配置文件中配置要依赖的对象,或者在配置文件中将对象及属性进行注入,当然现在基本都用注解的方式,更方便
-
除了这些,我们之前的项目也用过spring的其他产品,像springboot(简化spring应用的初始搭建以及开发过程,用我的话来理解,就是springboot其实不是什么新的框架,它默认配置了很多框架的使用方式,就像maven整合了所有的jar包,springboot整合了所有的框架),springcloud微服务框架。比spring更简单,快速,方便
-
Spring 常用的注解
-
我们开发的时候常用的注解也就@Service业务逻辑,@Transational事务的注解,有时候需要注入DAO的话还会用到@Repository还有就是springMVC里的注解啦,比如说@Controller对应表现层的注解在spring未来的版本中,@RestController这个控制器返回的都是json格式,还有就是@RequestMapping进入的URL,@ResponseBody也是定义该方法返回JSON格式,还有就是@RequestParam获取参数,@RequestBody获取前台的数据是JSON格式的数据,@PathVariable从URL请求路径中获取数据,大概常用的也就这些吧
简单说一下SpringMVC与Spring是如何整合的
-
简单的说springMVC在ssm中整合就是web.xml 里边配置springMVC的核心控制器:DispatcherServlet;它就是指定后缀进行拦截;然后在springMVC.xml里边配置扫描器,可以扫码秒到带@Controller注解的这些类,现在用springMVC都是基于注解式开发,像@Service,@Repository,@Responsebody啦这些注解标签等等,都是开发时用的,每个注解标签都有自己的作用它还配置了一个视图解析器,主要就是对处理之后的跳转进行统一配置,大致就是这些
-
如何使用springMVC获取表单里的数据?
-
通过形参和表单里的name值保持一致就能获取到
-
-
详细的说一下 springaop 的实现原理
-
它的底层是通过动态代理实现的面向切面编程,主要用在管理事务这一块,我们在配置文件中配置切入点,比如以save/insert/update等开头的方法我们开启事务,配置了一个REQUIRED开头的事务特性,还可以用在日志管理,还有权限方面也可以用aop来实现,但现在基本上没有人去这样控制权限,都用shiro框架来实现权限管理,springaop大概就是这样,咱们公司是用什么来管理事务的,应该使用注解的方式来管理的吧。
-
spring AOP 事务的描述:(难点)
-
在spring-common.xml 里通过里面先设定一个表达式,设定对service里面哪些方法,如:对add,delete,update*等开头的方法,进行事务拦截。我呢需要配置事务的传播(propagation="REQUIRED")特性,通常把增删改以外的操作需要配置成只读事务(readonly=“true”)。只读事务可以提高性能。之后引入tx:advice,在tx:advie引用transactionManager(事务管理),在事务管理里再引入sesseionFactory,sessionFactory注入DataSource,最后通过引入txAdvice。
-
Spring实现iod控制反转描述:
-
原来我们需要我们自己进行bean的创建以及注入,而现在交给spring容器去完成bean的创建以及注入。所谓的“控制反转”就是“对象控制权的转移”,从程序代码本身转移到了外部容器
-
-
Spring中@Autowired和@Resource的区别?
-
@Autowired默认的是按照类型进行注入,如果没有类型会按照名称进行注入,如果想直接按照名称注入需要加入@Qualifiter(“gatheringDao”)
-
@Autowired
-
@Qualifier("gatheringDao")
-
private GatheringDao gatheringDao;
-
-
@Resource默认的会按照名称注入,名称找不着会按照类型来找,如果这里写了名称,就直接按照名称找了不会按照类型找@Resource(name=”aaa“)
-
@Resource
-
private GatheringDao gatheringDao;
-
你给我说一下 SpringBoot 吧?
-
SpringBoot是我们最近的项目开始用的,我个人觉得SpringBoot比以前的SpringMVC更好用,因为他的配置文件少了,原来SpringMVC的ssm整合的配置文件特别多,用了SpringBoot之后配置文件特别少。就需要一个yml文件几乎全部搞定,我们用SpringBoot时结合的MyBatis去做的,springboot基本是一些yml文件,properties,MyBatis全程用的注解方式开发。springboot和springmvc用法上大同小异,无非就是少了一些配置文件。启动SpringBoot服务器的时候是他自带的Tomcat和Jetty服务器,可以通过main方法启动。启动的注解是@SpringBootApplication。我们也用过spring的全家桶,springboot + JPA + springcloud组件
-
然后把springcloud里的每一个组件说一下,下面【SpringCloud 的常用组件挨个介绍一下?】
-
SpringBoot的优点:
-
快速创建独立运行的Spring项目以及主流框架继承jpa mybatis,使用嵌入式的servlet容器应用无需打成war包,Starters(场景启动器)自动依赖与版本控制,大量的自动配置,简化开发,也可以修改默认值,无需修改大量的xml,无代码生成,开箱即用
-
-
SpringCloud 的常用组件挨个介绍一下?
-
Eureka组件(服务发现):相当于我们使用dubbox的时候zookeeper注册中心
-
Feign组件:丁代勇服务的时候用的组件
-
Hystrix(熔断器):我们在调用服务的时候,有可能设计到服务的连锁调用,比如说A服务调用B服务,B服务里还调用了C服务,使用A服务的时候,B服务和C服务都得正常运行才可以使用,B代用C没有调通的时候,B直接给A返回内容,不至于像以前报错
-
网关服务zuul:前后端进行调用的时候可以走同一个IP地址,因为项目端口号太多,配置这个以后可以直接走一个端口号,它会自动给你分配具体调用的哪一个端口
-
分布式配置Spring Cloud Config:我们把多个项目的配置文件归置为一个,修改配置文件以后,不用再重新部署某一个项目啦
-
消息总线:SpringCloud Bus: 修改完配置文件以后不用重启项目
SpringBoot和SpringMVC与springCloud关系及运行原理?
-
springboot是springMVC的升级版,其实就是把springMVC里的配置文件,改为全注解的开发,SpringCloud通过springboot把其它的通信组件等等进行了封装,你如果使用springcloud的话,那就必须得使用springboot,使用soringboot的话不一定非得使用springcloud
-
运行原理
-
springboot在启动时扫描项目所以来的jar包,寻找含spring.factories文件的jar
-
根据spring.factories配置加载AutoConfigure类
-
根据@Conditional注解的条件,进行自动配置并且将bean注入spring context
-
springboot 如果要直接获取 form 数据的话要怎么做?
-
也是通过形参里添加参数就行啊,和from表单里的name值对应上就行了啊,在form表单里的action中配置上请求该方法的路径不就行了么
SpringCloud 用的什么版本
-
我们用的是2.0的版本,我那会学springcloud的时候也了解过,他们的版本是根据伦敦的地铁站进行命名的,我们同德也是比较稳定版本的就是2,0这个版本
单元测试的时候怎么启动 spring 容器的
-
这个可以通过读取配置文件的方式也行,用applicationContext读取xml配置文件,其实我更喜欢用spring配合Junit用注解的方式去启动
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations={"classpath*:spring-config-test.xml"})public class TestProjectDao { @Autowired ProjectDao projectDao; @Test public void testCreateProjectCode(){ long applyTime = System.currentTimeMillis(); Timestamp ts = new Timestamp(applyTime); Map codeMap = projectDao.generateCode("5", "8",ts,"院内"); String projectCode = (String)codeMap.get("_project_code");
spring是如何管理事务的
-
我们用spring管理事务的时候用的是注解的方式管理的,他底层实现也是AOP的方式来管理的事务
Spring 里的声明式事务?
-
是spring里的那其中传播特性,用aop配置切入点,开启或者关闭事务
事务的传播特性?
-
1.PROPAGATION _REQUIRED
-
required支持当前事务,如果当前没有事务,那就新建一个事务,这是最常见的选择
-
-
2.PROPAGATION _SUPPORTS
-
supports支持当前事务如果当前没有事务,就以非事务方式执行。
-
-
3.PROPAGATION _MANDATORY
-
mandatory,支持当前事务,如果当前没有事务,就抛出异常
-
-
4.PROPAGATION _REQUIRES_NE W
-
required_new新建事务,如果当前存在事务,把当前事务挂起
-
-
5.PROPAGATION _NOT_SUPPORT ED
-
not_supported以非事务方式执行啊哦做,如果当前存在事务,那就把当前事务挂起
-
-
6.PROPAGATION _NEVER
-
never以非事务方式执行,如果当前存在事务,则抛出异常
-
-
7.PROPAGATION _NESTED
-
nested支持当前事务,新增Savepoint点,与当前事务同步提交或回滚
-
Spring 的三种注入方式?
-
我们项目中是配置扫描包,通过注解方式注入的,还有通过seter和构造方法的方式注入
SpringMVC 的 controller 里可不可以写成员变量
-
可以写啊,注入的service不就是成员变量吗,你是不是想问struts2里的获取参数的方式啊?struts2早就不用了,他那种成员变量获取参数的方式,在高并发下会造成线程不安全,springMVC是使用的形参接收前台数据的,线程比较安全
以上是关于##走过路过不容错过之##JavaEE 框架篇一 Spring的主要内容,如果未能解决你的问题,请参考以下文章