从Quick Start的例子中可以看到,所谓依赖注入,即在运行期由容器将依赖关系注入到组件之中。
讲的通俗点,就是在运行期,由Spring根据配置文件,将其他对象的引用通过组件的提供的setter方法进
行设定。
我们知道,如果动态设置一个对象属性,可以借助Java的Reflection机制完成:
Class cls = Class.forName("net.xiaxin.beans.User");
Method mtd = cls.getMethod("setName",new Class[]{String.class});
Object obj = (Object)cls.newInstance();
mtd.invoke(obj,new Object[]{"Erica"});
return obj;
上面我们通过动态加载了User类,并通过Reflection调用了User .setName方法设置其name属性。
对于这里的例子而言,出于简洁,我们将类名和方法名都以常量的方式硬编码。假设这些常量都是通过配
置文件读入,那我们就实现了一个最简单的BeanWrapper。这个BeanWrapper的功能很简单,提供一个
设置JavaBean属性的通用方法(Apache BeanUtils 类库中提供了大量针对Bean的辅助工具,如果有兴
趣可以下载一份源码加以研读) 。
Spring BeanWrapper基于同样的原理,提供了一个更加完善的实现。
看看如何通过Spring BeanWrapper操作一个JavaBean:
Object obj = Class.forName("net.xiaxin.beans.User").newInstance();
BeanWrapper bw = new BeanWrapperImpl(obj);
bw.setPropertyValue("name", "Erica");
System.out.println("User name=>"+bw.getPropertyValue("name"));
对比之前的代码,相信大家已经知道BeanWrapper的实现原理。
诚然,通过这样的方式设定Java Bean属性实在繁琐,但它却提供了一个通用的属性设定机制,而这
样的机制,也正是Spring依赖注入机制所依赖的基础。
通过BeanWrapper,我们可以无需在编码时就指定JavaBean的实现类和属性值,通过在配置文件
加以设定,就可以在运行期动态创建对象并设定其属性(依赖关系) 。
上面的代码中,我们仅仅指定了需要设置的属性名“name”,运行期,BeanWrapper将根据Java
Bean规范,动态调用对象的“setName”方法进行属性设定。属性名可包含层次,如对于属性名
“address.zipcode”,BeanWrapper会调用“getAddress().setZipcode”方法。
分享到:
相关推荐
Bean Wrapper Bean Factory ApplicationContext Web Context Spring 高级特性 Web 应用与 MVC Spring MVC Spring MVC指南 基于模板的Web表示层技术 Web 应用中模板技术与 JSP 技术的对比 输入验证与数据...
QueryWrapper 常用用法
id 'org.springframework.boot' version '3.2.2' id 'io.spring.dependency-management' version '1.1.4' } group = 'com.example' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '21' } ...
去CSDN下载所谓破解出现以下错误:wrapper | Licensed to (null) for (null) wrapper | wrapper | Launching a JVM... jvm 1 | WrapperManager: Initializing... jvm 1 | WrapperJNI Error: Not licensed to use ...
MyBatisPlus条件构造器 -Wrapper详解(为知笔记版,可用网页打开),详解wrapper条件构造器的各种使用方法及其扩展类的使用方法。
RDP Wrapper对应的配置文件,支持10.0.1904.1503
windows程序设计(珍藏版)_wrapper_wrapperwindows程序设计(珍藏版)_wrapper_wrapperwindows程序设计(珍藏版)_wrapper_wrapper
wrapper java window系统服务
RDP Wrapper10.0.19041.84,win10多用户
C:\Users\Administrator\.m2\wrapper 解压到这里 方便idea调用
wrapper.h头文件都在里面了,我的操作系统实验作业源码是需要这里的头文件才可以运行,当然这个头文件只是相当于万能头文件,你也可以按自己的经验添加部分头文件即可运行我的源码。(最后拜托审核员大大不要修改我...
10G以太网 wrapper 千兆万兆以太网控制器 wrapper 万兆
Kompex SQLite Wrapper Source
Java Service Wrapper可以将Java程序包装成系统服务,这样就可以随着系统的运行而自动运行,本资源是linux 64位java环境下使用的wrapper资源,其他操作系统资源可以从地址:...下载
tcp_wrapper tcp_wrapper
Java Maven Wrapper 0.4.2独立Jar包。
Java Service Wrapper使用总结,将java应用发布为可安装的服务
windows wrapper 相关文件,包括wrapper相关文档、配置说明文档。实现通过windows服务的方式启动java项目
【RDP Wrapper 配置文件更新脚本】 简介:由于 RDP Wrapper 多年未更新,自带的配置文件不支持新版本的远程桌面服务。因此我们只需更新配置文件即可。 用途:一键解决 RDP Wrapper 提示 Not listening [not ...
Java Service Wrapper使用说明