面试题答案
一键面试对象创建
- 实例化方式:
- 构造函数注入:IoC容器通过调用对象的构造函数来创建对象实例。例如在Spring中,如果一个类有多个构造函数,Spring会根据配置或依赖关系选择合适的构造函数进行实例化。
- 工厂方法:容器可以调用工厂类的静态方法或实例方法来创建对象。比如在Spring中,可以通过
FactoryBean
接口自定义对象的创建逻辑。
- 依赖注入:在对象创建过程中,容器会将对象所依赖的其他对象注入进来。例如在Spring中,通过
@Autowired
、@Inject
等注解实现依赖自动装配,或者通过XML配置文件中的<property>
标签进行属性注入。
对象初始化
- 初始化方法配置:
- 自定义初始化方法:开发者可以在类中定义一个初始化方法,然后在配置文件(如Spring的XML配置文件)中通过
<bean>
标签的init - method
属性指定该方法,在对象创建并注入依赖后,容器会调用此方法进行初始化。例如:
<bean id="exampleBean" class="com.example.ExampleClass" init - method="initMethod"> <!-- 依赖注入配置 --> </bean>
- 实现特定接口:在Spring中,对象可以实现
InitializingBean
接口,该接口只有一个afterPropertiesSet
方法,当对象属性设置完成后,Spring容器会自动调用此方法进行初始化。
- 自定义初始化方法:开发者可以在类中定义一个初始化方法,然后在配置文件(如Spring的XML配置文件)中通过
- 依赖校验:在初始化阶段,容器会确保对象所依赖的所有对象都已经正确注入,若有未满足的依赖,容器会抛出异常。
对象使用
- 生命周期管理:在对象使用过程中,容器负责维护对象的状态,确保对象在多线程环境下的安全性。例如在Spring中,默认情况下单例Bean在整个应用生命周期内只有一个实例,容器会处理好并发访问的问题。
- AOP增强:开发者可以通过AOP(面向切面编程)在对象方法调用前后进行增强处理。比如在Spring中,通过定义切面(Aspect),可以在方法执行前进行权限校验,方法执行后进行日志记录等操作。例如:
@Aspect public class LoggingAspect { @Before("execution(* com.example.service.*.*(..))") public void logBefore(JoinPoint joinPoint) { System.out.println("Before method " + joinPoint.getSignature().getName() + " is called."); } }
对象销毁
- 销毁方法配置:
- 自定义销毁方法:与初始化方法类似,开发者可以在类中定义一个销毁方法,然后在配置文件(如Spring的XML配置文件)中通过
<bean>
标签的destroy - method
属性指定该方法,当容器关闭时,会调用此方法进行对象销毁。例如:
<bean id="exampleBean" class="com.example.ExampleClass" destroy - method="destroyMethod"> <!-- 依赖注入配置 --> </bean>
- 实现特定接口:在Spring中,对象可以实现
DisposableBean
接口,该接口只有一个destroy
方法,当容器关闭时,Spring容器会自动调用此方法进行对象销毁。
- 自定义销毁方法:与初始化方法类似,开发者可以在类中定义一个销毁方法,然后在配置文件(如Spring的XML配置文件)中通过
- 资源清理:在销毁阶段,开发者可以在自定义的销毁方法中进行资源清理操作,如关闭数据库连接、释放文件句柄等,确保资源的正确释放,避免内存泄漏等问题。