一,Sping的配置文件 放在容器中的组件 我们写在该配置文件中 根据自己需求取名,将spring所需的配置写在该文件当中。容器中放着具体的对象,也就是我们常说的ioc控制反转。 二,创建对象的形式: 1,new 2,反射 class.forName(包+类) 3,反序列化 4,克隆【浅拷贝和深拷贝】 bean的作用域:默认是单实例,默认scope=“singleton” 多实例scope=“prototype” 每次从容器中拿组件 默认容器都给一个新的对象 三,给容器中的组件赋值的几种形式: 1,set注入(主流) property name=“name” value=“张三” name:set后面的名字 value:属性值 2.构造注入(循环依赖)AB互相套娃 <constructor-arg name="name" value="张三"/> 3.设置方法 多态:接口 对象名=new 子类对象() 父类的引用不能调用子类特有的属性和方法(想用就强转) init-method:指定初始化方法 destroy-method:指定销毁方法 4.注解开发
@Component(Value=id):标注在实例化的类上 @Service:service层 服务层 具体业务逻辑的层 @Repository:DAO层 连接数据库的层 @Controller:控制层 @Value @Scope 四,Spring面试题: 1,IOC容器的初始化过程 2,给组件赋值有几种形式?构造注入的弊端是什么?set注入方式也会有循环依赖 如何解决? 三级缓存解决的循环依赖 必须要用三级缓存吗?二级缓存就能解决 为什么需要三级? AOP 代理对象 3,bean的作用域? 4,bean的生命周期? 5,Spring中的Bean是线程安全的吗? 多个线程共享同一个资源时并且对资源进行修改会出现线程安全问题 单实例:有线程安全问题 对bean中的成员变量进行查询 没有线程安全问题 对bean的成员变量进行修改 有线程安全 1,多实例:没有线程安全问题 每个线程拿到自己的组件 2,ThreadLocal解决问题 在类中定义ThreadLocal变量 并且将要修改的变量放在ThreadLocal中 ThreadLocal本身具有隔离性 6,Beanfactory和FactoryBean的区别? Beanfactory 帮我们生产组件的工厂 工厂模式:实例工厂 静态工厂 FactoryBean 通过工厂模式生产的组件 7,Beanfactory和ApplicationContext的区别? Beanfactory 帮我们生产组件的工厂 ApplicationContext 放组件的位置 bean的生命周期 单实例 先调用构造方法 ======》postProcessBeforeInitialization======》初始化方法=======》postProcessAfterInitialization===========》容器关闭==========》销毁方法 多实例 先调用构造方法 ======》postProcessBeforeInitialization======》初始化方法=======》postProcessAfterInitialization===========》容器关闭不会调用销毁方法 通过实现beanPostProcessor接口 实现对bean的创建过程的操作 懒加载:默认情况下 单实例 是在容器创建完成后 容器中就有了该对象/组件/bean 多实例:容器创建完成后 不会创建组件 获取的时候进行创建 lazy-init=“true” 懒加载 容器初始化完成 不会创建对象 在获取对象时 才会创建对象