标签:反射 对象 Spring 编译 早上 属性 提问 IOC
早上提问总结
1.Spring底层用到过哪些设计模式?
(1)工厂模式:BeanFactory 就是简单工厂模式的体现,用来创建对象的实例;
(2)单例模式:Bean 默认为单例模式。
(3)代理模式:Spring 的 AOP 功能用到了 JDK 的动态代理和 CGLIB 字节码生成技术;
(4)模板方法:用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。
(5)观察者模式:定义对象键一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都
会得到通知被制动更新,如 Spring 中 listener 的实现.
2.解释beanFactory?
BeanFactory 是什么
BeanFactory 是用于Spring, Bean 容器的根接口,它是 IOC 的基本容器,
负责管理和加载 Bean,它为其他具体的IOC容器提供了最基本的规范,
BeanFactory是实现IOC容器的核心接口,它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。
3.IOC/DI
DI 介绍
Dependency Injection 依赖注入.需要有IOC 的环境,Spring 创建这个类的过程中,Spring 将类的依赖的属性设置进去.
IOC与DI的的区别:
IOC: 控制反转,将类的对象的创建交给Spring类管理创建.
DI: 依赖注入,将类里面的属性在创建类的过程中给属性赋值.
spring 的依赖注入常见的有两种方式:
构造注入和 setter 注入;
(1)、所谓构造注入,就是读取<bean>标签的<constract-arg index="" value="">, 通过 class 字节码文件对象,获取构造参数;
(2)、setter 注入,就是通过反射的<property name="" value="">;
DI和IOC的关系: DI不能单独存在,DI需要在IOC的基础上来完成.
这样做得好处:做到了单一职责,并且提高了复用性,解耦。
4.java的反射有几种获取字节码方式?
三种
Class.forName("全限定类名")
类名.class
对象.getClass
5.为什么使用反射机制
1).增加程序的灵活性,避免将程序写死到代码里(动态获取属性和方法)。
2)代码简洁 提高复用率
3.)对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法
反射的缺点
1)性能问题:使用反射基本上是一种解释操作,用于字段和方法接入时要远慢于直接代码(编写便利但是执行速度慢)
使用反射会模糊程序内部逻辑
2)程序人员希望在源代码中看到程序的逻辑,反射等绕过了源代码的技术(不利于维护)
3)使用反射技术要求程序必须在一个没有安全限制的环境中运行
4)内部暴露:由于反射允许代码执行一些在正常情况下不被允许的操作(比如访问私有的属性和方法)
6.反射都能做什么
1)、获取类型的相关信息
2)、动态调用方法
3)、动态构造对象
4)、从程序集中获得类型
7.可以获取私有属性和方法嘛?
反射可以获取类的详细信息,要获取私有属性的值,只需将对应属性的ReflectionProperty实例设置为可访问再取值即可。
8.反射创建对象的几种方式
通过Class.newInstance()直接创建对象。
通过Class实例获取到Constructor(构造器),通过构造器创建对象。
9.反射的方式如何创建一个对象
创建对象 通过反射来生成对象需要先使用 Class 对象获取指定的 Constructor 对象(构造器),再调用 Constructor 对象的 newInstance () 方法来创建该 Class 对象对应类的实例。
10.反射创建对象和直接new的区别?
一、**********************************************************************
a1:new属于静态编译
b1:反射属于动态编译,意思就说只有到运行时才会去获得该对象的实例
二、**********************************************************************
a2:静态编译类似于在编译的时候把你所有的模块都编译进exe里去,编译后就存在。
b2:动态编译则相反,编译的时候那些些模块都没有编译进去,而是在运行的时候,用到哪个模块就会利用反射去取模块
三、**********************************************************************
a3:反射对象是直到程序运行期间才知道类的名字的实例,这时才获取对象的成员,并设置属性
b3:new是给类直接在内存中创建一个实例,并且可以直接初始化等。不需要类的全路径。
标签:反射,
对象,
Spring,
编译,
早上,
属性,
提问,
IOC
From: https://www.cnblogs.com/XieLingYu/p/17119033.html