初始Spring DI(面试常问)

一、什么是Spring DI?------ Spring DI 的理解

记忆关键词:名词解释 

DI (Dependecy Inject ,中文释义:依赖注入)是对 IOC 概念的不同角度的描述,是指应用程序在运行时,每一个 bean 对象都依赖 IOC 容器注入当前 bean 对象所需要的另外一个 bean 对象。(例如在 MyBatis 整合 Spring 时,SqlSessionFactoryBean依赖IOC容器注入一个DataSource数据源 bean)。

作用:将Spring IOC容器所创建的各个组件,使用DI的语法进行关联,耦合(胶水)

二、什么是Spring中的bean?

简单来说,Bean代表IOC容器管理的对象。

通过配置文件注解,告诉IOC容器帮助我们管理那些对象。

 <bean id="xxx" class="xxxx">
        <constructor-arg ....></constructor-arg>
    </bean>

例: <bean id="serviceImp2" class="UserServiceImp">
        <constructor-arg name="dao" ref="daoImp2"></constructor-arg>
    </bean>

三、将一个类声明为Bean的注解有哪些?

@Component:定义通用Bean的注解,可标注任意类为 Bean。如果一个 Bean 不知道属于哪个层,可以使用 @component 注解标注
@Repository:定义数据访问层Bean的注解,
@Service :定义业务层Bean的注解。
@Controller:定义控制器Bean的注解

四、@Component 和 @Bean 的区别是什么?

@component 注解作用于,而 @Bean 注解作用于方法

1. @component 通常是通过类路径扫描来实现自动扫描并完成装配 Bean 到 Spring IOC 容器中。

2. @Bean 注解通常用于注解某个方法,通过 @Bean 注解告诉了 Spring Ioc 容器,该方法的返回值实例是一个 Bean 。

五、 @Autowired 和 @Resource 的区别是什么?

@AutowiredSpring提供的注解,@ResourceJDK提供的注解。
1. @Autowired 默认的注入方式为byType(按类型自动注入)

2. @Resource默认注入方式为byName(按名称自动注入)

六、Spring 框架的常见注入方式有哪几种?

记忆关键字:整体介绍三种注入方式,分别介绍每个注入方式的细节。

Spring IOC有三种注入方式:构造注入Setter注入属性注入

  • 构造注入:使用构造方法注入 bean;
  • Setter注入:使用Setter方法注入bean;
  • 属性注入:使用成员属性注入 bean ,不推荐

属性注入不推荐原因:使用私有的成员属性变量,依靠反射实现,破坏封装,只能依靠 IOC 容器实现注入,不严谨;

六、Spring常见的 ApplicationContext 实现类有哪些?

记忆关键字:分别介绍没中实现类或子接口

ClassPathXmlApplicationContext : 根据项目类路径 classpath 下的配置文件加载bean; FileSystemXmlApplicationContext : 根据当前磁盘的一个绝对系统文件路径下的配置文件加载 bean;
AnnotationConfigApplicationContext : 根据读取到的注解加载bean;
WebApplicationContext : Web 容器下按照配置文件加载 bean;

七、BeanFactory 和 ApplicationContext有什么区别?

记忆关键词:两者之间的关系、区别与不同、Bean的创建加载方式

两者之间的关系:BeanFactory和 ApplicationContext是Spring 的两大核心接口,都可以当做 Spring 的容器;
两者区别与不同:

  • BeanFactory 是 Spring 里面最底层的接口,是 IOC的核心,定义了IOC的基本功能包含了各种 Bean 的定义、加载、实例化,依赖注入生命周期管理等行为;
  • ApplicationContext 接口作为 BeanFactory 接口的子接口,包含 BeanFactory 所具备的功能外,还提供了其它框架功能:继承 MessageSource(支持国际化),资源文件访问、可以同时加载多个配置文件、可以通过监听器管理 bean 的生命周期;

Bean的创建加载方式:
        1.BeanFactroy 采用的是延迟加载形式来注入 Bean,只有在使用到某个 Bean 时,才对该 Bean 进行加载实例化(缺点)这样不能提前发现一些存在的 Spring 的配置问题。如果 Bean 的某一个属性没有注入, BeanFacotry 加载后直至第一次使用调用 getBean()方法才会抛出异常;

        2.Applicationcontext 是在容器启动时,一次性创建了所有的 Bean 。这样,在容器启动时我们就可以发现 Spring 中存在的配置错误,这样有利于检査所依赖属性是否注入。         Applicationcontext 启动后预载入所有的单实例 Bean ,所以在运行的时候速度比较快,因为它们已经创建好了。(缺点)相对于 BeanFactory,ApplicationContext 唯一的不足是占用内存空间当应用程序配置 Bean 较多时,程序启动较慢;

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: SpringDI(依赖注入)和IOC(控制反转)是Spring框架中的两个核心概念。DI是指通过外部容器来注入对象的依赖关系,而不是在对象内部创建或查找依赖对象。IOC是指将对象的创建和依赖关系的管理交给容器来完成,而不是由对象自己来管理。\[1\] 在Spring中,IOC容器的初始化过程包括加载配置文件、解析配置文件、实例化Bean对象并将其存储在IOC容器中。可以通过注解来实现基于注解的容器初始化,通过在类上添加注解来标识其作为Bean,并通过注解来指定依赖关系。\[2\] AOP(面向切面编程)是Spring框架中的另一个重要概念,它允许在程序运行期间动态地将额外的行为织入到代码中,而不需要修改原始代码。AOP的实现方式包括基于代理的方式和基于字节码增强的方式。AOP的原理是通过在目标方法的前后插入切面逻辑来实现。\[2\] 在Spring中,可以通过注解来标识切面,并通过注解来指定切入点和通知类型。常用的AOP注解包括@Aspect、@Pointcut、@Before、@After等。\[3\] 总结来说,DI和IOC是Spring框架中用于管理对象依赖关系的机制,而AOP是用于实现横切关注点的机制。它们都是Spring框架中重要的特性,可以帮助开发者更好地组织和管理代码。 #### 引用[.reference_title] - *1* [Spring IoC 和 AOP的通俗理解](https://blog.csdn.net/qq_39144436/article/details/123394242)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [关于Spring 的IoC和AOP的面试题,快看看你都能答上来哪些](https://blog.csdn.net/Gaowumao/article/details/124919483)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [面试汇总-Spring-IOC和AOP](https://blog.csdn.net/weixin_37672801/article/details/126415598)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值