你能和面试官聊的spring 技术点有哪些,从哪里开始聊?

你能和面试官聊的spring 技术点有哪些,从哪里开始聊?

目前在我脑中关于spring 技术就是  大量的bean 配置, ioc 、aop  

ioc : 控制反转....

     控制反转是一种思想,就是创建对象从程序员原来的硬编码(手动new 对象),改成用set()形式注入对象,只需要传入要引用的对象名称

public class UserServiceImpl implements UserService{

// 这里要引用userDao 对象 原来是硬编码的直接new
//    private UserDao userDao = new UserDaoImpl();
    private UserDao userdao;

    // 控制反转ioc (现在通过set 方法将要引用的对象直接传进来)
    public void setUserdao(UserDao userdao){
        this.userdao = userdao;
    }
    @Override
    public void getUser() {
        userdao.getUserById();
    }
}
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
        UserServiceImpl userService = new UserServiceImpl();

        // 注入userDaoImpl  需要 传入new 对象
        userService.setUserdao(new UserDaoImpl());
        userService.getUser();
    }

}

spirng  的控制反转的实现是由DI (依赖注入)实现的,即如果想使用的对象 直接交给bean 容器,bean容器就是spring 管理对象的方式,他是通过bean.xml 配置对象的名称属性,然后通过ClassPathXMlapplicationContent (''bean.xml)对象 getBean("类名")获取。。。

aop: 面向切面编程.,首先要说说代理模式

1, 静态代理:

     正常的像实现类里面的每个方法都加一个调用日志的方法,由于开闭原则(开闭原则规定“软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的”)

    不到万不得已,不要修改人家代码,(修改了会增加bug 发生率),IT行业的套娃理论出现了,就是说如果一个困难的事情解决不了,那就增加一层,还处理不了,那就在增加一层,所以这里就出现了代理模式,静态代理 ,

 就是增加一个代理类,实现要修改的 服务的接口interface ,实现接口所有服务,增加一个私有方法,log() 打印日志,还需引入要代理的类,使用set() 方法

Class Proxy{

private User uer;   

public void Set(User user){ this.user = user} //引入对象

......

}

2, 动态代理:

//动态代理类的模板,抽象实现

public class ProxyInvcationHandler Implents ProxyInvcationHandler

{

    //被代理的接口

    private Object target;

    public void setTarget(Object target){

        this.target = target

    }


 

    //生成得到代理类

    public Object getProxy(){

        return Proxy.newProxyInstance(this.getClass.getClassLoad(), this.getClass.rent.getClass.getInterfaces,this)

    }

    //处理代理类的实例,并返回结果

    public Object invock(Oject Proxy, Method method, Object[] args) throws Throwable {

        //动态代理的本质,就是使用反射机制实现的

        seeObject(); // 看对象

        Object result = method.invock(rent,args);

        seeFaimliy(); //像门户

        return result;

    }

    // 代理(媒人)干的活

    public void seeObject(){}

    public void seeFaimliy(){}

    public static void main (String[] args){

        UserServiceImpl UserService = New UserServiceImpl;

        //代理角色不存在

        ProxyInvcationHandler pih = new ProxyInvcationHandler();

        pih.setTarget(UserService);  // 设置要代理的对象

        Proxy.query();// 代理去执行 定亲操作

    }

}

Aop的概念是:面向切面编程,通过预编译和运行时动态代理实现程序功能的统一维护的一种技术,利用aop 可以对业务逻辑各个部分进行隔离,从而是业务逻辑各个部位分之间的耦合降低,提高程序可用性。

   使用方法:引入织入配置在pom中,定义配置类使用@Aspect  注解表示类(代替xml 配置文件)

  

package com.syxl.framework.config;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

@Aspect
public class Demo {
    @Before("execution(* com.syxl.system.service.impl.SysOperLogServiceImpl.*(..))")
    public void before(){

    }
    @After("execution(* com.syxl.system.service.impl.SysOperLogServiceImpl.*(..))")
    public void after(){

    }

    @Around("execution(* com.syxl.system.service.impl.SysOperLogServiceImpl.*(..))")
    public void around(ProceedingJoinPoint joinPoint) throws Throwable {

      Object proceed = joinPoint.proceed() ;
    }


}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值