zoukankan      html  css  js  c++  java
  • 蚂蚁金服java研发岗二面“谈谈你对spring的理解”

    1.spring的工作原理

    spring 是按照设计模式精心打造的,它实现了工厂模式的工厂类,这个类名为BeanFactory(接口),在程序中通常使用它的子类ApplicationContext(也是接口)。

    spring的核心是IOC(反转控制)容器,IOC也是一种编程思想,用于实现模块之间的解耦,在Spring中它的作用是对对象的创建,维护和销毁等生命周期的控制。IOC:把对象的创建、初始化、销毁交给spring来管理,而不是由开发者控制,实现控制反转。

    spring是一个大的工厂类,spring的特点就是基于配置,在其配置文件中通过元素来创建实例对象。

    根据业务逻辑来看,对象经常不是独立的,一个对象的创建往往涉及另一个对象的创建,当然这个对象也要由IOC容器负责,负责的方式就是依赖注入DI,通过反射机制实现。有三种注入方式:

    (1)接口注入

    (2)构造器注入

    (3)Setter方法注入。

    2.spring的核心技术

    spring的核心技术有:IOC,AOP

    java 的 高级特性:反射机制,代理

    AOP:面向切面编程,系统中有很多各不相干的类的方法,在这众多方法中加入某种系统功能的代码,如加入日志,权限判断等,AOP可以实现横切关注点(如日志,安全,缓存和事务管理)与他们所影响的对象之间的解耦。

    实现AOP 功能采用的是代理技术,调用代理类,代理类与目标类具有相同的方法声明。

    AOP 在spring中主要表现在两个方面:提供声明式的事务管理 、spring支持用户自定义切面。

    AOP主要包括通知(Advice)切点(PointCut)连接点(JoinPoint)

    下面贴一段在springboot 中使用AOP的代码

        <!-- aop -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
    
    @Aspect
    @Component
    public class ControllerInterceptor {
     
        private final Logger logger = LogManager.getLogger(this.getClass());
        @Pointcut("execution(public * com.example.homework.controller..*(..))")
        public void controllerMethodPointcut(){}
     
        @Before("controllerMethodPointcut()") //指定拦截器规则
        public Object interceptor(JoinPoint jp){
            MethodSignature signature = (MethodSignature) jp.getSignature();
            Method method = signature.getMethod(); //获取被拦截的方法
            String methodName = method.getName(); //获取被拦截的方法名
            logger.info("interceptor ***************************");
            logger.info("methodName: "+methodName);
            return null;
        }
    }
    
    2018-08-21 11:07:22.906  INFO 10392 --- [nio-8088-exec-1] a.s.s.m.AbstractValidatingSessionManager : Enabling session validation scheduler...
    2018-08-21 11:07:22.987  INFO 10392 --- [nio-8088-exec-1] c.e.h.controller.ControllerInterceptor   : interceptor ***************************
    2018-08-21 11:07:22.987  INFO 10392 --- [nio-8088-exec-1] c.e.h.controller.ControllerInterceptor   : methodName: loginIn
    

    3.spring 的优缺点

    Spring 的核心概念是IOC和AOP,这两个核心服务的对象算是bean(POJO),定位是一个轻量级的框架,但是随着他的发展变得很庞大,我们称它为spring 全家桶。

    它具备以下优点:

    spring中避免了关键字new造成的耦合问题。
    spring本身就是一个工厂,不需要再编写工厂类了。
    spring不需要进行明确的引用关系的传递,直接通过配置完成
    所有框架几乎都可以在spring中整合在一起使用。
    spring编程=factory设计模式+proxy设计模式

    当然,它的缺点也是不少的:

    spring基于大量的xml 配置文件,使得我们花了大量的时间放在配置上,拖慢了开发的进度,springboot 问世后,提倡代码优于配置解决了这个问题。

    spring 的内容太庞大,随便打断点查看的时候会出现十几二十层代码,阅览性不强,在实际开发的过程中spring的角色更像是胶水一样,充当整合各种技术的角色,同时作为bean的容器。

    感谢你看到这里,我是程序员麦冬,一个java开发从业者,深耕行业六年了,每天都会分享java相关技术文章或行业资讯

    欢迎大家关注和转发文章,后期还有福利赠送!

  • 相关阅读:
    $Poj2228$/洛谷$SP283 Naptime$ 环形$DP$
    $Poj1952 $洛谷$1687 Buy Low,Buy Lower$ 线性$DP+$方案计数
    $Poj3585 Accumulation Degree$ 树形$DP/$二次扫描与换根法
    洛谷$1541$ 乌龟棋 线性$DP$
    $Loj10157$ 皇宫看守 树形$DP$
    $loj10156/$洛谷$2016$ 战略游戏 树形$DP$
    $Loj10155$ 数字转换(求树的最长链) 树形$DP$
    洛谷$2015$二叉苹果树
    $CH5302$ 金字塔 区间$DP$/计数类$DP$
    [hiho1035] 自驾旅行III
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13290183.html
Copyright © 2011-2022 走看看