- 浏览: 1412445 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
nakin1991:
[b][b][b][u][/u][/b][/b][/b]
Spring学习笔记(9)----让Spring自动扫描和管理Bean -
bishibaodian:
不要在这样找笔试题了,一次就这么几个,还没过瘾就没有了,去安装 ...
java笔试试题 -
长白LZ:
very good
周鸿祎在360新员工入职培训上的讲话 -
blacklong:
多谢楼主,哈哈~~
在线购物系统(J2EE 含源码) -
gergul:
没有效果。。而且有广告。
C#水波纹特效自定义控件
在Spring学习笔记(3)中剖析了Spring管理Bean的原理,下面解释下Spring依赖注入的原理
在进行依赖注入时,我们的配置文件如下配置:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <bean id="mySqlDAO" class="com.szy.spring.dao.UserDAO4MySqlImpl"/> <bean id="oracleDAO" class="com.szy.spring.dao.UserDAO4OracleImpl"/> <bean id="userService" class="com.szy.spring.service.UserServiceImpl"> <!--构造方法注入 <property name="userDAO" ref="mySqlDAO"></property> --> <property name="userDAO" ref="oracleDAO"></property> </bean> </beans>
根据配置文件信息,我们首先需要建立一个Bean类,用来保存bean节点的信息:
package com.szy.spring.bean; import java.util.List; public class Bean { private String id; private String className; private List<Property> propertyList; public Bean(String id, String className, List<Property> propertyList) { super(); this.id = id; this.className = className; this.propertyList = propertyList; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getClassName() { return className; } public void setClassName(String className) { this.className = className; } public List<Property> getPropertyList() { return propertyList; } public void setPropertyList(List<Property> propertyList) { this.propertyList = propertyList; } }
此外,由于bean下存在property信息,因此我们还需要建立property类
package com.szy.spring.bean; public class Property { private String name; private String ref; public Property(String name, String ref) { super(); this.name = name; this.ref = ref; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getRef() { return ref; } public void setRef(String ref) { this.ref = ref; } }
在Spring学习笔记(3)中,我们在读取xml文件时bean节点下面是不存在property节点的,因此在这里我们需要修改readXML()方法:
/** * 读取xml配置文件 * @param fileName 配置文件名 */ private void readXML(String fileName) { // 寻找配置文件 URL xmlPath = this.getClass().getClassLoader().getResource(fileName); Document doc = null; Element root = null; try { SAXBuilder sb = new SAXBuilder(false); doc = sb.build(new FileInputStream(new File(xmlPath.toURI()))); // 设置命名空间 Namespace xhtml = Namespace.getNamespace("xhtml", "http://www.springframework.org/schema/beans"); root = doc.getRootElement(); // 获取根元素 List<Element> bList = root.getChildren("bean", xhtml); //获取全部bean节点 for (Element beanElement : bList)// 遍历节点,取得每个节点的属性 { String id = beanElement.getAttributeValue("id"); String className = beanElement.getAttributeValue("class"); //获得每个bean下面的属性 List<Element> pList = beanElement .getChildren("property", xhtml); List<Property> propertyList = new ArrayList<Property>(); //存储属性信息 if (pList.size() > 0) //如果存在属性 { for (Element propertyElement : pList) //遍历属性节点 { String name = propertyElement.getAttributeValue("name"); String ref = propertyElement.getAttributeValue("ref"); Property property = new Property(name, ref); propertyList.add(property); //保存属性节点 } } Bean bean = new Bean(id, className, propertyList); beanList.add(bean); } } catch (Exception e) { e.printStackTrace(); } }
读取完配置文件后我们还是需要对bean进行实例化的,这方法和Spring学习笔记(3)中的instanceBeans()方法一样。下面就是我们需要给bean属性进行注入,实现方法如下:
/** * 为bean对象的属性注入值 */ public void injectObject() { for (Bean bean : beanList) { Object object = beanObject.get(bean.getId()); //获取bean的实例 if (object != null) { try { PropertyDescriptor[] ps = Introspector.getBeanInfo( object.getClass()).getPropertyDescriptors(); //取得bean的属性描述 for (Property property : bean.getPropertyList()) //获取bean节点的属性 { for (PropertyDescriptor properdesc : ps) { if (property.getName().equals(properdesc.getName())) { Method setter = properdesc.getWriteMethod();//获取属性的setter方法 ,private if (setter != null) { Object value = beanObject.get(property.getRef()); //取得值 setter.setAccessible(true); //设置为允许访问 setter.invoke(object, value);//把引用对象注入到属性 } break; } } } } catch (Exception e) { e.printStackTrace(); } } }
我们进行测试:
MyClassPathXMLApplicationContext ctx=new MyClassPathXMLApplicationContext("applicationContext.xml"); UserService service=(UserService)ctx.getBean("userService"); service.show();
运行输出
OracleDAO Implement
上面仅是简单的演示了Spring依赖注入的原理,但是在实际操作中还需要考虑很对其它因素,在此就不进行讨论了。
- spring.rar (2.8 MB)
- 下载次数: 42
发表评论
-
Spring学习笔记(18)----使用Spring配置文件实现事务管理
2009-12-06 18:36 2068由于我们要拦截UserDAOImpl中的方法,因此我们需要在配 ... -
Spring学习笔记(17)----使用Spring注解方式管理事务
2009-12-06 15:35 2723使用Spring+JDBC集成步骤如下: *配置数据源,例 ... -
Spring学习笔记(16)----使用Spring配置文件实现AOP
2009-12-04 22:14 1991前面介绍了使用注解的方式,下面介绍使用配置文件的方式实现AOP ... -
Spring学习笔记(15)----使用Spring的注解方式实现AOP
2009-12-03 21:48 2268下面介绍使用Spring框架进行AOP编程。 首先我们需要导 ... -
Spring学习笔记(14)----使用CGLIB实现AOP功能
2009-12-03 21:36 2895好久没学习spring了,今天接着学习。 接着这上面的例子, ... -
Spring学习笔记(13)----动态代理模式分析演示
2009-11-22 15:54 1925上一节演示的是静态代理模式,本节演示的是静态代理模式,既然是动 ... -
Spring学习笔记(12)----静态代理模式分析演示
2009-11-22 15:33 1791代理模式分为静态代理和动态代理。静态代理就是我们自己定义的代理 ... -
Spring学习笔记(11)----自定义属性编辑器
2009-11-21 14:57 2367前面我们所定义的属性都是几本的属性,如果我们定义一个属性是Da ... -
Spring学习笔记(10)----公共属性的注入配置
2009-11-20 09:01 2395假设我们定义了四个bean类,其代码分别如下: packag ... -
Spring学习笔记(9)----让Spring自动扫描和管理Bean
2009-11-18 11:14 4481package com.szy.spring.service; ... -
Spring学习笔记(8)----属性注入的方式
2009-11-17 18:14 2407Spring中属性注入的方式有三种: 1.使用属性sette ... -
Spring学习笔记(7)----装配各种集合类型的属性
2009-11-09 19:56 1892前面已经介绍了如何给属性注入对象,下面介绍一下如何装配集合类型 ... -
Spring学习笔记(5)----依赖注入的简单实现
2009-11-04 22:06 2314Spring的核心机制是依赖注入。依赖注入让bean与bean ... -
Spring学习笔记(4)----Bean节点信息配置
2009-11-03 21:19 2383默认情况下,Spring的Ioc容器启动时会初始化bean,但 ... -
Spring学习笔记(3)----编码剖析Spring管理Bean的原理
2009-11-03 20:52 3393<?xml version="1.0" ... -
Sping学习笔记(2)----实例化Bean的三种方式
2009-11-02 22:03 2350Spring的实例化Bean有三种方式: 使用类构造器直接 ... -
Spring学习笔记(1)----简单的实例
2009-11-02 21:32 2731开始接触Spring了,写 ...
相关推荐
在Spring框架的学习中,依赖注入(Dependency Injection,简称DI)是一个核心概念,它极大地提高了代码的可测试性和可维护性。本篇笔记将探讨Spring如何实现依赖注入,并通过实例进行详细解析。 首先,理解依赖注入...
这份"Spring学习笔记+学习源码.zip"资源包含了深入学习Spring及其相关技术的知识点,以及实践代码,对提升Spring技能将大有裨益。 首先,我们来详细讨论Spring框架的主要组件和功能: 1. **依赖注入(Dependency ...
基于ssm的基于云的学习笔记系统代码 | 基于云的学习笔记系统 | bs | java | ssm | spring | springmvc | mybatis | 代码 | 系统 | 网站 | 毕设 | 项目 1、技术栈:微信小程序,springboot,uniapp,vue,ajax,...
在SpringDM(Spring Dynamic Modules)框架中,OSGi(Open Service Gateway Initiative)服务注册与引用是核心功能之一,它使得模块化系统中的组件能够互相发现并交互。本篇笔记将探讨如何在OSGi环境中注册服务以及...
在本篇Spring学习笔记中,我们将深入探讨动态代理模式,并结合Spring框架的实现进行分析演示。动态代理模式是Java编程中一种重要的设计模式,它允许我们在不修改原对象代码的情况下,为对象添加额外的功能或行为。...
在《Spring Boot》源码学习笔记中,我们可以深入理解其内部工作机制,包括自动配置、起步依赖、命令行接口(CLI)以及如何集成各种组件如JSP等。JSP(JavaServer Pages)是一种用于动态创建网页的技术,Spring Boot ...
标题 "spring学习笔记(3.20)" 暗示我们即将探讨的是关于Spring框架的某个特定主题,可能涵盖版本3.20或基于该版本的学习内容。Spring是一个广泛使用的Java企业级应用开发框架,它提供了依赖注入、AOP(面向切面编程...
在本篇Spring学习笔记中,我们将探讨静态代理模式在Spring框架中的应用与分析。静态代理是一种常见的设计模式,它在不修改目标类代码的情况下,通过代理类来扩展或增强目标类的功能。在Spring中,静态代理主要应用于...
本学习笔记将深入探讨Spring AOP的核心概念、工作原理以及实际应用。 1. **核心概念** - **切面(Aspect)**:切面是关注点的模块化,包含业务逻辑之外的横切关注点,如日志、事务管理。 - **连接点(Join Point...
在本篇"Spring 学习笔记六"中,我们将深入探讨Spring框架的核心概念和技术细节,同时结合源码分析,以提升对Spring的理解和应用能力。本文档主要关注Spring的依赖注入(Dependency Injection,DI)机制、AOP(面向切...
标题中的"Spring学习笔记之一“why spring”"表明了这篇笔记主要探讨的是Spring框架的核心价值和使用背景。在IT行业中,Spring是一个广泛使用的Java企业级应用开发框架,它以其依赖注入(Dependency Injection,DI)...
**Spring整合Mybatis原理分析** 在Java Web开发中,Spring框架以其强大的依赖注入和面向切面编程能力,成为了事实上的核心框架。Mybatis则是一个轻量级的持久层框架,它简化了数据库操作,提供了直观的SQL映射。将...
依赖注入是 Spring 的核心概念之一,它允许开发者在运行时将对象依赖关系传递给其他对象,而不是在代码中硬编码这些依赖。这使得应用程序更易于测试,因为每个组件都可以独立地进行单元测试,同时也提高了代码的可...
为了进一步学习和实践这些概念,你可以从`src`目录中找到相关的Java类,查看它们如何使用Spring的注解进行配置,以及如何声明和注入依赖。同时,也可以查阅博文链接(已提供)以获取更多理论解释和示例说明。通过...
图灵Java高级互联网架构师第6期源码框架专题笔记,内容包含: 01-Spring底层核心原理解析-周瑜 02-手写模拟Spring底层原理-周瑜 03-Spring之底层架构核心概念解析-周瑜 04-Spring之Bean生命周期源码解析上-周瑜 05-...
1. IoC(Inversion of Control)容器:Spring的核心特性是控制反转,它通过依赖注入(Dependency Injection,DI)来管理对象的生命周期和依赖关系。IoC容器负责创建对象、装配对象以及管理对象的生命周期,降低了...