JavaEE 框架篇一 Spring

目录

说一下你对 Spring 的理解?

Spring 常用的注解

简单说一下SpringMVC与Spring是如何整合的

详细的说一下 springaop 的实现原理

Spring中@Autowired和@Resource的区别?

你给我说一下 SpringBoot 吧?

SpringCloud 的常用组件挨个介绍一下?

SpringBoot和SpringMVC与springCloud关系及运行原理?

springboot 如果要直接获取 form 数据的话要怎么做?

SpringCloud 用的什么版本

单元测试的时候怎么启动 spring 容器的

spring是如何管理事务的

Spring 里的声明式事务?

事务的传播特性?

Spring 的三种注入方式?

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是使用的形参接收前台数据的,线程比较安全

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 19
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xinyi_java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值