本页目录
2022年12月1日的面试过程令我自己很不满意。面试题没背(的确不想背),会给面试官在简单了解你的过程中,可能无法满足其个人的偏见。
为了避免这类事情的发生,我觉得重新分析Spring源码,让这种个人偏见不再发生!
ioc的含义是:把创建对象的过程交给Spring容器进行管理。
原理: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思想给予IOC容器完成,IOC容器底层就是BeanFactory接口
SpringIOC容器的实现方式(两个接口)
加载配置文件不会创建对象,当getBean时,才会创建Bean。
加载配置文件的时候,就会创建Bean对象。
ApplicationContext 实现类
FileSystemXmlApplicationContext:针对于全路径的Bean的xml文件
ClassPathXmlApplicationContext:针对于src文件夹下的Bean的xml文件。
创建对象、注入属性
基于xml方式、基于注解方式
<bean id="UserDao" class="com.alibaba.XXX" name="user">
</bean>
bean标签属性
创建对象时,默认是使用无参构造方法创建。
DI:依赖注入,注入属性。
<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>
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;
}
aop的含义是:不修改源代码对方法进行增强。
特殊说明: 以上文章,均是我实际操作,写出来的笔记资料,不会盗用别人文章!烦请各位,请勿直接盗用!转载记得标注来源!