工厂模式 ioc dom4j 反射之我的一点理解

工厂模式

//工厂模式我的理解
//第一次调用没有实例化的对象时 会去内存中查找(栈)
//如果没有找到,就去xml配置中查找className和他相同的类名
//找到的话就让工厂进行实例化,初始化对象
//没找到的话就空指针异常

公产模式就是ioc(inversion of control) 和hibernate的控制反转有点像  就是把自身不维护关系,交给别人来维护关系

dao层,service层在编码时只声明对象,而把实例化对象的权利交给工厂,工厂通过配置文件来配置类(对象)的信息,

然后由框架(虚拟机)来自动实例化对象,当然工厂采用的是单例模式,当该对象被实例化一次后,下次调用就直接获取(内存中反射?静态成员变量?)

通过dom4j和xpath以及反射技术来模拟beanfactory的getBean("stu1")方法

<?xml version="1.0" encoding="UTF-8"?>

<beans>
	<bean id="stu1" className="cn.itcast.domain.Student">
		<property name="number" value="ITCAST_1001"/>
		<property name="name" value="zhangSan"/>
		<property name="age" value="29"/>
		<property name="sex" value="male"/>
<!-- 		<property name="teacher" ref="t1"/>ref的值必须是另一个been的id -->
	</bean>

	<bean id="stu2" className="cn.itcast.domain.Student">
		<property name="number" value="ITCAST_1002"/>
		<property name="name" value="wangWu"/>
		<property name="age" value="94"/>
		<property name="sex" value="female"/>
		<property name="teacher" ref="t1"/><!-- ref的值必须是另一个been的id -->
	</bean>

	<bean id="t1" className="cn.itcast.domain.Teacher">
		<property name="tid" value="TEACHER_2001" />
		<property name="name" value="liSi" />
		<property name="salary" value="123.456" />
	</bean>

	<bean id="stuDao" className="cn.itcast.dao.impl.StudentImpl2">
	</bean>

	<bean id="stuService" className="cn.itcast.service.impl.StudentServiceImpl">
		<property name="studentDao" ref="stuDao"/>
	</bean>
</beans>

  给定字符串"stu1"

1.Document document = reader.read(this.getClass().getResourceAsStream("/beans.xml"));
//获取类路径下的文件 是相对于class文件夹下的 加"/"是从bin javaweb是从class文件夹下
//classPath 存放class(字节码)的总文件夹

2.dom4j的一些方法

Element root = document.getRootElement();

Node是父类 Attribute,Element是子类 可以相互转换

Element.elements() 获取子节点

Attribute.attributes()获取所有属性

Attribute.getName()获取属性name

Attribute.getValue()获取属性value

Attribute.attributeValue("xx")获取属性xx的value

document.selectNodes(xpath)查找满足xpath表达式的所有节点集合

document.selectSingleNode(xpath)获取满足xpath的单个节点

反射的一些知识

getField(xx):获取public成员

getDecalreField(xx)获取所有成员

classForName只能加载类(引用)类型的 ,不能加载基本数据类型的

获取成员变量的数据类型

Field f=clazz.getDeclaredField(e.attributeValue("name"));

// System.out.println(f.getName()+f.getType().getName());

获取方法的参数类型

	public static Class[]  getMethodParamTypes(Object classInstance,
			String methodName) throws ClassNotFoundException{
		Class[] paramTypes = null;
		Method[]  methods = classInstance.getClass().getMethods();//全部方法
		for (int  i = 0;  i< methods.length; i++) {
			if(methodName.equals(methods[i].getName())){//和传入方法名匹配
				Class[] params = methods[i].getParameterTypes();
				paramTypes = new Class[ params.length] ;
				for (int j = 0; j < params.length; j++) {
					paramTypes[j] = Class.forName(params[j].getName());
				}
				break;
			}
		}
		return paramTypes;
	}

  

字符串首字母大写

	public static String captureName(String name) {
		//  name = name.substring(0, 1).toUpperCase() + name.substring(1);
		// return  name;
		char[] cs=name.toCharArray();
		cs[0]-=32;
		return String.valueOf(cs);

	}

  

时间: 2024-08-28 17:07:07

工厂模式 ioc dom4j 反射之我的一点理解的相关文章

【iOS开发系列】用简单工厂模式理解OC反射机制

// 在iOS开发中,简单工厂模式使用得并不多.但是.我认为这是OC反射机制很好的一个例子, // 所以本文将以计算器为例,讲解简单工厂模式和OC的反射机制. // [简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类( // 这些产品类继承自一个父类或接口)的实例.该模式中包含的角色及其职责:工厂角色.抽 // 象产品角色.具体产品角色] // --百度百科 简单工厂模式 // 上面这句话可能不怎么好理解,我在网上找到了一个例子,可能例子本身不能完全解释这个 // 设

Java设计模式(一) 简单工厂模式不简单

原创文章,转载请务必将下面这段话置于文章开头处. 本文转发自Jason's Blog,原文链接 http://www.jasongj.com/design_pattern/simple_factory 简单工厂模式使用案例 有一种抽象产品--汽车(Car),同时有多种具体的子类产品,如BenzCar,BMWCar,LandRoverCar.类图如下 作为司机,如果要开其中一种车,比如BenzCar,最直接的做法是直接创建BenzCar的实例,并执行其drive方法,如下 package com.

工厂模式初识

在自己的项目中,同一个project下面有不同的view,不同的view对应不同的Model(具体实现代码),现在需要做的是A model调用B Model里面的一个方法,这个方法实现的是用ServiceAgent查询DB,这个ServiceAgent(最后了解到)是一个公用的类,最开始我是1实例化一个B model对象,调用它的方法,发现B里边这个方法用到了ServiceAgent,报错是说ServiceAgent没有实例化,(因为这个ServiceAgent初始化工作不是在BMOdel ne

项目设计之一------简单工厂模式利用

简单工厂模式可以结合反射进行实现,这样的解耦更好 项目设计之一------简单工厂模式利用,布布扣,bubuko.com

工厂模式——结语

前面我们讲了三个工厂模式,都是万变不离其宗,利用工厂模式来实例化不同的对象,虽然可能会多写一些代码,但这会为程序系统带来更方便的扩展性和尽量小的修改. 我们来从头回顾一下为什么要用工厂模式,实现一个计算器的程序,初级程序员可能立马分分钟就能写出代码来,例如: 1 package day_4_summary; 2 3 /** 4 * 计算器 5 * @author turbo 6 * 7 * 2016年9月7日 8 */ 9 public class Calc { 10 public static

Java实验项目三——简单工厂模式

Program: 请采用采用简单工厂设计模式,为某个汽车销售店设计汽车销售系统,接口car至少有方法print(), 三个汽车类:宝马.奥迪.大众 (属性:品牌,价格),在测试类中根据客户要求购买的汽车品牌, 通过接口car为客户提供相应的汽车对象. Description:通过java反射机制和Properties类的结合使用,实现工厂模式.代码如下: 1.首先是entity包中的一个接口和三个实体类 汽车接口: 1 /* 2 *Description:定义汽车接口 3 * */ 4 5 6

工厂模式 - 总结

今天学习了工厂模式,工厂模式有3种,总结了一下他们的区别 工厂模式是设计模式中比较常用的模式之一,是比较典型的解耦模式.工厂模式分成3种:简单工厂模式.工厂方法模式和抽象工厂模式,依次越来越抽象. 简单总结出这三种工厂模式的区别: 简单工厂模式:一个抽象产品类,可以派生出多个具体产品类. 无抽象工厂 每个具体工厂类只能创建一个具体产品类的实例. 工厂方法模式:一个抽象产品类,可以派生出多个具体产品类. 一个抽象工厂类,可以派生出多个具体工厂类.                  每个具体工厂类只

设计模式——介绍与工厂模式(扁平管理模式VS职业经理人模式)

本文主要对设计模式进行大概解说.特别是对工厂模式进行简明的解析: 一.设计模式的分类 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.訪问者模式.中介者模式.解释器模式. 事实上还有两类:并发型模式和线程池模式. 二.设计模式的六大原则 1.开闭原则(Op

面向对象编程思想-简单工厂模式

一.引言 简单工厂.工厂方法.抽象工厂模式都属于设计模式中的创建型设计模式,它们帮助我们把对象的实例化部分抽取出来,进而优化系统架构,提高系统的扩展性.本文介绍一个比较容易理解的模式-简单工厂模式. 二.简单工厂模式 定义:"工厂"?!看到这个词语,在现实生活中大家会想到是生产产品的,同样,在简单工厂模式里大家可以理解为工厂其实就是创建对象的一个类.平时我们编程的时候,当使用"new"创建对象时,此类就增加了对该对象的依赖,它们之间的耦合度就增加了,这样当业务需求变