重庆怎么站seo,广州网站建设比较,html制作学校网页,用dw做网站首页在Spring框架的学习中#xff0c;控制反转#xff08;IOC#xff09;是基石。掌握了如何让Spring容器创建和管理对象后#xff0c;我们需要更深入地了解容器本身、对象的生老病死#xff0c;以及如何用更优雅的注解方式来简化配置。本文将带你从Spring的工厂类入手#x…在Spring框架的学习中控制反转IOC是基石。掌握了如何让Spring容器创建和管理对象后我们需要更深入地了解容器本身、对象的生老病死以及如何用更优雅的注解方式来简化配置。本文将带你从Spring的工厂类入手逐步解析Bean的生命周期和作用域并过渡到基于注解的IOP配置实践。目录一、Spring的工厂类ApplicationContext 与 BeanFactory1. ApplicationContext2. BeanFactory3. 核心区别与验证二、Bean的作用域与生命周期1. Bean的作用域Scope2. Bean的生命周期三、迈向注解基于注解的IOC与DI配置1. 开启注解扫描2. 创建对象的注解取代 )3. 依赖注入的注解取代 )总结一、Spring的工厂类ApplicationContext 与 BeanFactorySpring提供了两种核心的容器工厂接口来创建和管理BeanApplicationContext和BeanFactory。它们构成了IOC容器的基础但在行为上有显著差异。1. ApplicationContextApplicationContext是BeanFactory的子接口提供了更多企业级功能。在创建容器时它会立即加载并实例化所有配置的单例Bean这种“急切加载”方式确保了应用启动后Bean立即可用。常见的实现类有ClassPathXmlApplicationContext从类路径下加载XML配置文件。FileSystemXmlApplicationContext从文件系统路径加载XML配置文件其类结构关系如下图所示2. BeanFactoryBeanFactory是Spring容器最顶层的接口提供了IOC的基础功能。与ApplicationContext的最大区别在于它的延迟加载机制只有在首次通过getBean()方法请求某个Bean时容器才会创建该Bean的实例。它的一个常用实现是XmlBeanFactory注Spring 5.x后已不推荐使用。3. 核心区别与验证我们可以通过一个简单的测试来观察二者的区别。假设我们有一个UserServiceImpl在其无参构造方法中打印日志。使用ApplicationContextpublic class Client { public static void main(String[] args) { new ClassPathXmlApplicationContext(applicationContext.xml); System.out.println(Spring IOC容器创建好了); } }输出结果为Bean在容器初始化时就被创建。使用BeanFactorypublic class Client { public static void main(String[] args) { new XmlBeanFactory(new ClassPathResource(applicationContext.xml)); System.out.println(Spring IOC容器创建好了); } }输出结果为此时Bean并未被创建直到调用getBean(“userService”)时才会触发构造方法。在实际开发中功能更全面的ApplicationContext是更常见的选择。二、Bean的作用域与生命周期理解Bean何时创建、如何存在以及何时销毁是进行高效、正确开发的关键。1. Bean的作用域Scope通过bean标签的scope属性我们可以控制Bean的实例范围常用的有以下几种singleton (默认)在整个IOC容器中该Bean定义只存在一个共享实例。适合无状态的Service、DAO等prototype每次请求该Bean时都会创建一个新的实例。适合有状态的Connection、SqlSession等对象request/session/application专用于Web环境将Bean生命周期绑定到对应的Http请求、会话或应用全局配置示例bean iduserService class... scopeprototype/2. Bean的生命周期Bean从创建到销毁的完整过程对于单例和多例模式有所不同。单例Bean的生命周期[容器启动] — 构造方法(实例化) — set方法(依赖注入) — init方法(自定义初始化) — [容器关闭] — destroy方法(自定义销毁)多例Bean的生命周期[调用getBean()] — 构造方法(实例化) — set方法(依赖注入) — init方法(自定义初始化) — [JVM垃圾回收] — destroy方法(自定义销毁)注意Spring容器不管理原型Bean的销毁我们可以通过init-method和destroy-method属性指定自定义的初始化和销毁方法让Spring在对应时机调用。三、迈向注解基于注解的IOC与DI配置XML配置功能强大但略显繁琐。Spring提供了基于注解的配置方式其目标与XML完全一致——降低耦合只是形式更简洁贴近代码。1. 开启注解扫描首先需要在XML配置中声明注解驱动并指定要扫描的包。Spring会自动扫描该包及其子包下的类识别特定注解。?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beans xmlns:contexthttp://www.springframework.org/schema/context ... !-- 开启注解扫描base-package指定扫描的根包 -- context:component-scan base-packagecom.hg/context:component-scan /beans2. 创建对象的注解取代bean)以下四个注解功能相同都用于将类声明为Spring管理的Bean主要提供语义化区分Component通用注解用于任何组件Controller通常用于标注表现层如MVC控制器组件Service通常用于标注业务逻辑层组件Repository通常用于标注数据访问层DAO组件属性value用于指定Bean在容器中的id。若不指定则默认id为类名首字母小写。//Service(userService) 自定义id为userService Service // 默认id为userServiceImpl public class UserServiceImpl implements UserService { ... } Repository // 默认id为userDaoImpl public class UserDaoImpl implements UserDao { ... }3. 依赖注入的注解取代property)Autowired(Spring提供)默认按类型byType自动装配。可以与Qualifier结合使用实现按名称装配Resource(JSR-250标准)默认按名称byName自动装配。可通过name属性显式指定Bean的idService public class UserServiceImpl implements UserService { Autowired // 按类型查找UserDao的实现类并注入 private UserDao userDao; // 或者 Resource(nameuserDaoImpl) // 按名称查找id为userDaoImpl的Bean并注入 private UserDao userDao; ... }Value用于注入基本数据类型和String类型的值。可以直接注入字面量也支持从属性文件.properties中读取极大提升了配置的灵活性① 注入简单值Service public class UserServiceImpl implements UserService { Value(张三) private String name; Value(25) private Integer age; }② 注入属性文件中的值首先在XML中加载属性文件context:property-placeholder locationconfig.properties/然后在属性文件config.properties中定义jdbc.usernameroot jdbc.password123456最后在类中使用Value并配合${}占位符注入Service public class UserServiceImpl implements UserService { Value(${jdbc.username}) private String username; Value(${jdbc.password}) private String password; }总结从理解ApplicationContext和BeanFactory这两大容器的加载机制差异到掌握Bean的singleton与prototype作用域及其完整的生命周期是夯实Spring IOC核心概念的关键。而基于注解的配置方式Component,Autowired,Value等则代表了更现代、更简洁的Spring开发风格它通过将配置信息直接写在代码中减少了XML文件的维护成本提高了开发效率。从XML到注解是Spring学习者必须跨越的一道桥梁。