什么是spring ioc?
控制反转,通过xml配置或者注解的方式 将对象的生命周期交给ioc容器进行管理。
spring是怎么实现控制反转的,具体原理是什么?
实现控制反转的方式主要有两种:依赖注入(Dependency Injection,DI)和依赖查找(Dependency Lookup)
依赖注入:通过配置文件、java注解、或者java代码的方式告诉spring容器如何创建对象以及如何注入依赖
依赖查找:与依赖注入相反,是由被依赖的对象主动去查找和获取依赖对象的引用,如ApplicationContext 接口的 getBean()方法
ioc使用了哪些技术,是怎样利用这些技术的?
ioc使用了反射、配置元数据、工厂模式、动态代理。
反射:使用了反射动态的加载类并创建对象实例
配置元数据:通过xml配置文件、注解或者java配置类等方式提供配置元数据,告诉容器该如何实例化对象、配置属性以及解决依赖关系。
工厂模式:Spring中的ApplicationContext充当了工厂的角色,负责根据配置文件或注解的信息来创建对象
抽象工厂模式:BeanFactory充当抽象工厂,ApplicationContext具体的实现ClassPathXmlApplicationContext、AnnotationConfigApplicationContext等充当了具体工厂的角色
动态代理:通过动态代理使spring再运行时动态的给目标对象生成代理对象,并将增强的逻辑织入到目标方法中。动态代理是根据目标类class方法以及方法名使用反射、泛型来完成的。
spring的生命周期是怎样的?
实例化:根据配置文件或者注解 通过java反射完成实例化 Bean 对象
依赖注入:spring通过 构造函数、setter方法、字段的方式注入 依赖关系
初始化:在依赖注入完成后,调用Bean初始化方法(如果有), 实现方式可以通过注解@PostConstruct 或者 配置文件init-method="init"来指定
使用:业务根据实际情况调用spring中的bean对象实例
销毁:在程序关闭或者容器销毁的时候,调用Bean销毁方法(如果有),通过注解@PreDestro或者配置文件 destroy-method="cleanup" 来指定
有哪几种方式可以实现ioc?
xml配置方式
注解的方式:如@Component、@Service、@Repository、@Autowired
java config的方式:如@Configuration 和 @Bean
@Resource和@Autowired的区别是什么?
@Resource:
是j2ee自带的注解
默认根据名称进行注入,可以直接通过指定name 或者 type属性来指定具体名称的bean
是javaee规范的一部分
可以在任何兼容JavaEE规范的容器中使用,包括Spring容器
@Autowired
是spring框架提供的注解
默认根据类型进行注入,如果有多个匹配的Bean,通过 @Qualifier或者@Primary来指定具体名称的bean
只能在spring中使用
无法兼容其他的javaee规范容器
评论区