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博客搜索:标题关键字。以获取最新全部资料 ❤
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤