2022年12月1日的面试过程令我自己很不满意。面试题没背(的确不想背),会给面试官在简单了解你的过程中,可能无法满足其个人的偏见。

为了避免这类事情的发生,我觉得重新分析Spring源码,让这种个人偏见不再发生!

IOC:控制反转

IOC概念

ioc的含义是:把创建对象的过程交给Spring容器进行管理。

IOC底层原理

原理:xml解析、工厂模式、反射

工厂模式思想实现解耦合,反射 + XML对工厂模式二次解耦

<bean id="UserDao" class="com.alibaba.XXX"></bean>

工厂模式wei dai ma

class UserFactory{
    public static UserDao getDao(){
        String classValue = class属性值;
        Class classz = Class.forName(calssValue);
        return (UserDao)classz.newInstance();
    }
}

IOC实现原理:BeanFactory接口

IOC思想给予IOC容器完成,IOC容器底层就是BeanFactory接口

SpringIOC容器的实现方式(两个接口)

  • BeanFactory接口。是用于访问Springbean容器的根接口。不建议我们使用
  • ApplicationContext接口:BeanFactory接口的子接口。我们开发时使用。

BeanFactory特点

加载配置文件不会创建对象,当getBean时,才会创建Bean。

ApplicationContext特点

加载配置文件的时候,就会创建Bean对象。

ApplicationContext 实现类

FileSystemXmlApplicationContext:针对于全路径的Bean的xml文件

ClassPathXmlApplicationContext:针对于src文件夹下的Bean的xml文件。

IOC的Bean管理(xml、注解)

什么是bean管理?

创建对象、注入属性

spring创建对象

spring注入属性

Bean管理的实现方式

基于xml方式、基于注解方式

基于xml创建对象

<bean id="UserDao" class="com.alibaba.XXX" name="user">
</bean>

bean标签属性

  • id:唯一标识
  • class:类全路径
  • name:基本不用

创建对象时,默认是使用无参构造方法创建。

基于xml方式注入属性

DI:依赖注入,注入属性。

  • 使用set方式注入
<bean id="UserDao" class="com.alibaba.XXX" name="user">
    <property name="name" value="zhangsan"></propetry>
    <property name="age" value="10"></propetry>
</bean>
  • 有参构造方法注入属性
<bean id="UserDao" class="com.alibaba.XXX" name="user">
    <constructor-age name="name" value="zhangsan"></constructor-age>
    <constructor-age name="age" value="10"></constructor-age>
    <constructor-age index="填写1,代表第一个参数,不推荐使用index" value="10"></constructor-age>
</bean>

另一种set的写法:p名称空间注入

<bean id="UserDao" class="com.alibaba.XXX" name="user" 
    p:name="zhangsan"
    p:age="10"
    >
</bean>

IOC操作Bean管理(FactortBean)

spring有两种类型的bean,一种是普通bean,一种是工厂Bean。

普通Bean特点是:配置文件定义Bean类型,就是返回值类型

工厂Bean特点是:配置文件定义的Bean类型可能返回值类型不一致

让Bean成为工厂Bean,实现FactoryBean<T>,重写下面2个方法

    @Override
    public Object getObject() throws Exception {
        return null;
    }

    @Override
    public Class<?> getObjectType() {
        return null;
    }

Bean的作用域

默认是单例,也可以指定多例

Bean的生命周期

基于注解创建对象

AOP:面向切面编程

aop的含义是:不修改源代码对方法进行增强。

特殊说明:
上述文章均是作者实际操作后产出。烦请各位,请勿直接盗用!转载记得标注原文链接:www.zanglikun.com
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取全部资料 ❤