Spring框架深度解析:IOC容器与bean实例化

需积分: 0 0 下载量 12 浏览量 更新于2024-08-05 收藏 524KB PDF 举报
“Spring框架是Java开发中的核心组件,尤其对于SSM(Spring、Struts、MyBatis)架构来说更是必不可少。本资料深入探讨了Spring框架中的IoC(Inversion of Control,控制反转)容器以及如何管理Bean对象的实例化和装配。” 在Spring框架中,IoC容器是核心特性之一,它负责管理应用中的对象(Bean)。通过IoC,开发者可以将对象的创建和依赖关系的维护工作交给Spring容器,从而降低组件间的耦合度。Bean对象的实例化有三种主要方式: 1. 构造方法实例化:在XML配置文件中,通过指定类名和构造参数,Spring容器会调用相应的构造函数创建Bean实例。例如: ```xml <bean id="userService" name="us" class="com.yjxxt.spring.service.UserService"> <constructor-arg value="构造参数值"></constructor-arg> </bean> ``` 2. 静态工厂实例化:如果希望使用静态工厂方法创建Bean,可以在配置中指定工厂类和工厂方法: ```xml <bean class="com.yjxxt.spring.factory.CarFactory" id="car" factory-method="getCar"> <constructor-arg value="BMW"></constructor-arg> </bean> ``` 3. 实例化工厂实例化:对于非静态工厂方法,需要首先实例化工厂类,然后调用其工厂方法创建Bean。这需要指定`factory-bean`和`factory-method`属性: ```xml <bean class="com.yjxxt.spring.factory.CarFactory2" id="factory"></bean> <bean id="c02" factory-bean="factory" factory-method="getCar"></bean> ``` Spring IoC容器也支持手动装配(注入),即向Bean对象注入依赖。主要有以下几种方式: 1. setter方法注入:这是最常见的注入方式,Spring容器会寻找Bean类中带有setter方法的属性,并根据配置信息调用这些方法注入依赖。推荐使用这种注入方式,因为它是标准的JavaBeans规范。例如: ```xml <bean class="com.yjxxt.spring.bean.Student" id="student"> <property name="sid" value="2021003"></property> <property name="name" value="易宜平"></property> ... </bean> ``` 2. 属性字段注入:虽然不推荐,但Spring还支持直接注入属性字段,前提是该字段提供了setter方法。 3. 集合类型的注入:对于集合类型如List、Set、Map等,Spring同样支持注入。如: ```xml <bean class="com.yjxxt.spring.bean.Student" id="student"> ... <property name="aset"> <set> <value>吸烟</value> <value>喝酒</value> <value>烫头</value> </set> </property> <property name="klist"> <list> <value>AAAA</value> <value>BBBB</value> <value>CCCC</value> </list> </property> </bean> ``` 在实际开发中,理解并熟练掌握这些Spring IoC容器的配置和注入方式,能够帮助我们更高效地构建和管理Java应用程序的组件。
2023-07-09 上传

Required request body is missing: public java.util.Map<java.lang.String, java.lang.Object> com.cntomorrow.zxkt.admin.modules.plugins.workTransparent.controller.WorkTransparentController.splitItme(com.cntomorrow.zxkt.admin.modules.plugins.workTransparent.entity.Deverc) at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:161) at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:131) at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121) at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:167) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:134) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:879) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)

2023-06-02 上传