javabean属性
JavaBean的属性JavaBean的属性与一般Java程序中所指的属性,或者说与所有面向对象的程序设计语言中对象的属性是一个概念,在程序中的具体体现就是类中的变量。
在JavaBean设计中,按照属性的不同作用又细分为四类:Simple, Index, Bound与Constrained属性。
3.1.1 Simple属性一个简单属性表示一个伴随有一对get/set方法(C语言的过程或函数在Java程序中称为"方法")的变量。
属性名与和该属性相关的get/set方法名对应。
例如:如果有setX和getX方法,则暗指有一个名为"X"的属性。
如果有一个方法名为isX,则通常暗指"X"是一个布尔属性(即X的值为true或false)。
例如在下面这个程序中:public class alden1 extends Canvas {string ourString= "Hello"; //属性名为ourString,类型为字符串public alden1(){ //alden1()是alden1的构造函数,与C++中构造函数的意义相同setBackground(Color.red);setForeground(Color.blue);}/* "set"属性*/public void setString(String newString) {ourString=newString;}/* "get"属性 */public String getString() {return ourString;}}3.1.2 Indexed属性一个Indexed属性表示一个数组值。
使用与该属性对应的set/get方法可取得数组中的数值。
该属性也可一次设置或取得整个数组的值。
例:public class alden2 extends Canvas {int[] dataSet={1,2,3,4,5,6}; // dataSet是一个indexed属性public alden2() {setBackground(Color.red);setForeground(Color.blue);}/* 设置整个数组*/public void setDataSet(int[] x){dataSet=x;}/* 设置数组中的单个元素值 */public void setDataSet(int index, int x){dataSet[index]=x;}/* 取得整个数组值 */public int[] getDataSet(){return dataSet;}/* 取得数组中的指定元素值 */public int getDataSet(int x){return dataSet[x];}}3.1.3 Bound属性一个Bound属性是指当该种属性的值发生变化时,要通知其它的对象。
每次属性值改变时,这种属性就点火一个PropertyChange事件(在Java程序中,事件也是一个对象)。
事件中封装了属性名、属性的原值、属性变化后的新值。
这种事件是传递到其它的Bean,至于接收事件的Bean应做什么动作由其自己定义。
图3.1是一个简单Bound属性示意图,当PushButton的background属性与Dialog的background属性bind时,若PushButton的background属性发生变化时,Dialog的background 属性也发生同样的变化。
例:public class alden3 extends Canvas{String ourString= "Hello"; //ourString是一个bound属性private PropertyChangeSupport changes = new PropertyChangeSupport(this);/** 注:Java是纯面向对象的语言,如果要使用某种方法则必须指明是要使用哪个对象的方法,在下面的程序中要进行点火事件的操作,这种操作所使用的方法是在PropertyChangeSupport类中的。
所以上面声明并实例化了一个changes对象,在下面将使用changes的firePropertyChange方法来点火ourString的属性改变事件。
*/public void setString(string newString){String oldString = ourString;ourString = newString;/* ourString的属性值已发生变化,于是接着点火属性改变事件 */changes.firePropertyChange("ourString",oldString,newString);}public String getString(){return ourString;}/** 以下代码是为开发工具所使用的。
我们不能预知alden3将与哪些其它的Bean组合成为一个应用,无法预知若alden3的ourString属性发生变化时有哪些其它的组件与此变化有关,因而alden3这个Bean要预留出一些接口给开发工具,开发工具使用这些接口,把其它的JavaBean对象与alden3挂接。
*/public void addPropertyChangeListener(PropertyChangeLisener l){changes.addPropertyChangeListener(l);}public void removePropertyChangeListener(PropertyChangeListener l){changes.removePropertyChangeListener(l);}通过上面的代码,开发工具调用changes的addPropertyChangeListener方法把其它JavaBean 注册入ourString属性的监听者队列l中,l是一个Vector数组,可存储任何Java对象。
开发工具也可使用changes的removePropertyChangeListener方法,从l中注销指定的对象,使alden3的ourString属性的改变不再与这个对象有关。
当然,当程序员手写代码编制程序时,也可直接调用这两个方法,把其它Java对象与alden3挂接。
3.1.4 Constrained属性一个JavaBean的constrained属性,是指当这个属性的值要发生变化时,与这个属性已建立了某种连接的其它Java对象可否决属性值的改变。
constrained属性的监听者通过抛出PropertyVetoException来阻止该属性值的改变。
过程如图3.2例:下面程序中的constrained属性是PriceInCents。
public class JellyBean extends Canvas{private PropertyChangeSupport changes=new PropertyChangeSupport(this);private VetoableChangeSupport Vetos=new VetoableChangeSupport(this);/*与前述changes相同,可使用VetoableChangeSupport对象的实例Vetos中的方法,在特定条件下来阻止PriceInCents值的改变。
*/......public void setPriceInCents(int newPriceInCents) throws PropertyVetoException {/*方法名中throws PropertyVetoException的作用是当有其它Java对象否决PriceInCents的改变时,要抛出例外。
*/ /* 先保存原来的属性值*/int oldPriceInCents=ourPriceInCents;/**点火属性改变否决事件*/vetos.fireVetoableChange("priceInCents",new Integer(OldPriceInCents), new Integer(newPriceIn Cents));/**若有其它对象否决priceInCents的改变,则程序抛出例外,不再继续执行下面的两条语句,方法结束。
若无其它对象否决priceInCents的改变,则在下面的代码中把ourPriceIncents赋予新值,并点火属性改变事件*/ourPriceInCents=newPriceInCents;changes.firePropertyChange("priceInCents", new Integer(oldPriceInCents),new Integer(newPriceI nCents));}/**与前述changes相同,也要为PriceInCents属性预留接口,使其它对象可注册入PriceInCents 否决改变监听者队列中,或把该对象从中注销public void addVetoableChangeListener(VetoableChangeListener l){ vetos.addVetoableChangeListener(l);}public void removeVetoableChangeListener(VetoableChangeListener l){vetos.removeVetoableChangeListener(l);}......}从上面的例子中可看到,一个constrained属性有两种监听者:属性变化监听者和否决属性改变的监听者。
否决属性改变的监听者在自己的对象代码中有相应的控制语句,在监听到有constrained属性要发生变化时,在控制语句中判断是否应否决这个属性值的改变。
总之,某个Bean的constrained属性值可否改变取决于其它的Bean或者是Java对象是否允许这种改变。
允许与否的条件由其它的Bean或Java对象在自己的类中进行定义。
JavaBean的事件事件处理是JavaBean体系结构的核心之一。
通过事件处理机制,可让一些组件作为事件源,发出可被描述环境或其它组件接收的事件。
这样,不同的组件就可在构造工具内组合在一起,组件之间通过事件的传递进行通信,构成一个应用。
从概念上讲,事件是一种在"源对象"和"监听者对象"之间,某种状态发生变化的传递机制。
黑马程序员:JavaBean的属性类型
JavaBean中包含四种类型的属性,它们分别是简单属性(simple property)、索引属性(indexed property)、绑定属性(bound property)和约束属性(constrained property),首先对前两种属性进行介绍。
1、简单属性简单属性是非数组类型的属性,它的修改器必须接受一个参数,参数类型由属性的特性决定,可以是任意类型。
而简单属性的访问器仅仅是用于返回属性的值,它不接受任何参数,但它要返回一个值,返回值的类型必须与修改器所接收的参数类型一致。
public class Book {private double price;publicString getPrice() {return price;}public voidsetPrice(double price) {this.price= price;}}2、索引属性索引属性是数组类型的属性,JavaBean中需要对索引索性提供两对setter和getter方法,一对用于设置和获取数组本身,另一对用于设置和获取数组中的元素。
接下来就通过一个JavaBean来演示索引属性的定义,代码如例程所示。
class Person {// 索引属性hobbiesprivateString[] hobbies;// 设置和获取属性本身publicString[] getHobbies() {returnhobbies;}publicvoid setHobbies(String[] hobbies) {this.hobbies= hobbies;}// 设置和获取属性中的元素publicString getHobbies(int i) {returnhobbies;}publicvoid setHobbies(int i, String hobby) {hobbies= hobby;}}在例程所示的JavaBean中,定义了一个索引属性hobbies,为了使外界能够方便的操作该属性,提供了一对重载的setHobbies()方法和一对重载的getHobbies()方法,其中setHobbies(String hobbies)方法用于设置数组属性hobboes本身,而setHobbies(int i,String hobby)方法用于设置数组属性中的元素。
javabean属性拷贝工具类比对(性能+功能)
javabean属性拷贝⼯具类⽐对(性能+功能)业务系统中经常需要两个对象进⾏属性的拷贝,不能否认逐个的对象拷贝是最快速最安全的做法,但是当数据对象的属性字段数量超过程序员的容忍的程度⽐如通常超过5个属性的时候,代码因此变得臃肿不堪,使⽤⼀些⽅便的对象拷贝⼯具类将是很好的选择。
⽬前流⾏的较为公⽤认可的⼯具类:Apache的两个版本:(反射机制)mons.beanutils.PropertyUtils.copyProperties(Object dest, Object orig)mons.beanutils.BeanUtils.copyProperties(Object dest, Object orig)Spring版本:(反射机制)org.springframework.beans.BeanUtils.copyProperties(Object source, Object target, Class editable, String[] ignoreProperties)新版本的spring也集成了cglib版:org.springframework.cglib.beans.BeanCopiercglib版本:(使⽤动态代理,效率⾼)net.sf.cglib.beans.BeanCopier.copy(Object paramObject1, Object paramObject2, Converter paramConverter)dozer版本(xml配置映射,性能最低下):org.dozer.DozerBeanMapper.map(Object source, Class<T> destinationClass)就API⽽⾔,使⽤哪个⼯具类⽆所谓,我们通常关⼼两点,功能完善性以及性能。
性能测试:// 源POJOpackage tf56.lf.lfbase.model.dto;import java.io.Serializable;import tf56.lf.lfbase.model.domain.LfProduct;/*** ClassName:ProductDTO** @version 1.0* @since v1.0* @Date 2017年6⽉19⽇ yuebiao.wu*/public class ProductDTO extends LfProduct implements Serializable{private static final long serialVersionUID = -1296801547926874402L;}// ⽬标POJOpackage tf56.lf.lfbase.model.domain;import java.io.Serializable;import java.util.Date;import lombok.Getter;import lombok.Setter;/*** ClassName:Product** @author tool* @version 1.0* @since v1.0* Date Jun 26, 2017 2:40:42 PM*/@Getter@Setterpublic class LfProduct implements Serializable {private static final long serialVersionUID = 4054863309367744108L;/* 产品id */private String lfProductId;/* 物流⾦融账号 */private String lfAccountId;/* 产品名称 */private String productName;/* 产品类型(BAOFU:保付; MIAOFU:秒付; JISHIFU:即时付;) */private String productType;/* 适⽤场景列表(逗号分隔)(COD:代收货款; FREIGHT:运费;) */private String sceneTypes;/* 产品描述 */private String productDescription;/* 产品规则描述 */private String productRoleDescription;/* 放款触发⾏为 */private String loanAction;/* 收款触发⾏为 */private String repayAction;/* 产品状态(ENABLE:启⽤; DISABLE:停⽤;) */private String productStatus;/* 预警阀值 */private Long warnBalance;/* 发货⼈是否控制额度(1:是; 0:否;) */private Integer isConsignerCreditLimit;/* 承运商是否控制额度(1:是; 0:否;) */private Integer isExpressCreditLimit;private String productAgreementUrl;private String poundageCalcType;private String poundageRate;/* 备注1 */private String remark1;/* 操作员编号 */private String operatorId;/* 输⼊⽇期 */private Date inputDate;/* 记录更新时间 */private Date stampDate;}BeanCopierMapper wrapper = new DozerBeanMapper();ProductDTO pdt = new ProductDTO();pdt.setIsConsignerCreditLimit(3);pdt.setLoanAction("323f3");pdt.setProductName("feiwefe");pdt.setPoundageRate("f332r3");long beg = System.currentTimeMillis();PropertyUtilsBean bean = new PropertyUtilsBean();BeanCopier copier = BeanCopier.create(ProductDTO.class, LfProduct.class, false);for (int i=0;i<1000;i++) {LfProduct lfPdt = new LfProduct();// try {// try {// bean.copyProperties(lfPdt, pdt);// } catch (IllegalAccessException | InvocationTargetException e) {//// TODO Auto-generated catch block// e.printStackTrace();// }// } catch (NoSuchMethodException e) {//// TODO Auto-generated catch block// e.printStackTrace();// }copier.copy(pdt, lfPdt, null);if (i==3) {// System.out.println(JacksonHelper.toJSON(lfPdt));}// lfPdt = wrapper.map(pdt, LfProduct.class);lfPdt.setInputDate(new Date());}System.out.println(System.currentTimeMillis() - beg);⼤约140ms左右。
简述javabean的编写要求
简述javabean的编写要求
JavaBean是Java语言中的一种编程规范,用于创建可重用、可扩展和可序列化的Java对象。
以下是JavaBean的编写要求:
1. 公共类:JavaBean类必须是一个公共类(public class)。
2. 私有属性:JavaBean类应该包含私有的属性(private fields),并通过公共的getter和setter方法(public getter and setter methods)来访问和修改这些属性。
属性的命名应遵循标准的命名规范,如使用驼峰命名法。
3. 默认构造函数:JavaBean类必须提供一个无参数的默认构造函数(public no-argument constructor)。
这是为了保证JavaBean 在反射机制等场景下的正常使用。
4. 可序列化:JavaBean类可以实现Serializable接口,以支持对象的序列化和反序列化。
这对于在网络传输和持久化存储中使用JavaBean对象非常重要。
5. 其他方法:JavaBean类可以包含其他的方法,以提供额外的功能和行为。
例如,重写equals()和hashCode()方法,实现自定义的比较逻辑。
6. 不依赖特定框架:JavaBean应该是与特定框架无关的,它应该能够在不同的环境中使用。
因此,JavaBean类不应该依赖于特定的第三方库或框架。
编写符合JavaBean规范的类可以提高代码的可读性、可维护性和可重用性。
它们可以方便地被其他Java程序访问和操作,也可以与各种Java开发工具和框架无缝集成。
1/ 1。
javabean的结构
javabean的结构
JavaBean的结构由以下几部分组成:
1. 实例变量: JavaBean的状态存储在一些实例变量中,通常有一些setter和getter方法来设置和获取这些变量的值。
2. 公共无参数构造函数: JavaBean必须提供一个公共无参数构造函数,这意味着它可以通过反射机制来实例化,这方便了JavaBean的使用。
3. 属性访问方法: JavaBean一般提供对其属性的访问方法,这些方法通常被称为getter和setter方法。
getter方法用于访问属性的值,setter方法用于设置属性的值。
4. 可序列化接口: JavaBean实现了可序列化接口
(java.io.Serializable),这意味着JavaBean的对象可以被序列化/反序列化,这对于在网络上传输和保存对象状态很有用。
5. 事件处理方法: JavaBean可以提供事件处理方法来响应某些事件。
这些方法通常以"add"或"remove"为前缀,用于添加或移除事件监听器。
总之,JavaBean的结构是一种特定的Java类,它具有一些特定的属性和方法,使得它易于使用和管理。
JavaBean简单介绍及其应用
JavaBean简单介绍及其应⽤Bean的中⽂含义是“⾖⼦”,顾名思义JavaBean是⼀段Java⼩程序。
JavaBean实际上是指⼀种特殊的Java类。
它通经常使⽤来实现⼀些⽐較经常使⽤的简单功能。
并能够⾮常easy的被重⽤或者是插⼊其它应⽤程序中去。
全部遵循⼀定编程原则的Java类都能够被称作JavaBean。
⼀. Java Bean技术概述Java Bean是基于Java的组件模型,由属性、⽅法和事件3部分组成。
在该模型中,JavaBean能够被改动或与其它组件结合以⽣成新组件或完整的程序。
它是⼀种Java类,通过封装成为具有某种功能或者处理某个业务的对象。
因此。
也能够通过嵌在JSP页⾯内的Java代码訪问Bean及其属性。
Bean的含义是可反复使⽤的Java组件。
所谓组件就是⼀个由能够⾃⾏进⾏内部管理的⼀个或⼏个类所组成、外界不了解其内部信息和执⾏⽅式的群体。
使⽤它的对象仅仅能通过接⼝来操作。
⼆. Java Bean编写规范Java Bean实际上是依据JavaBean技术标准所指定Bean的命名和设计规范编写的Java类。
这些类遵循⼀个接⼝格式。
以便于使函数命名、底层⾏为以及继承或实现的⾏为,其最⼤的长处在于可以实现代码的可重⽤性。
Bean并不须要继承特别的基类(BaseClass)或实现特定的接⼝(Interface)。
Bean的编写规范使Bean的容器(Container)可以分析⼀个Java类⽂件。
并将其⽅法(Methods)翻译成属性(Properties),即把Java类作为⼀个Bean类使⽤。
Bean的编写规范包含Bean类的构造⽅法、定义属性和訪问⽅法编写规则。
2.1. Bean组件的⼯作机制在JavaBeansVersion1.01 A规范中定义了该组件的5种重要机制:(1)内省(Introspection):组建能够发表其⽀持的操作和属性。
同⼀时候也⽀持在其它组件中发现反复利⽤的对象库,如⽤户权限控制和电⼦邮件⾃⼰主动回复等。
JavaBean详解
JavaBean详解JavaBean的概念:Javabean是一个可重复使用的软件组件,实际上是一种Java类,通过封装属性和方法成为具有某种功能或者处理某个业务的对象,简称beanJavaBean本质上是Java类,按照编写类的方法编写, 需要注意一下四点:①如果类的成员变量为XXX,那么获取和更改属性的方法必须为getXxx和setXxx.②对于boolean类型的成员变量,还可以使用isXxx获得这个属性.③类中声明的方法访问属性都必须是public的④类中声明的构造方法必须是public, 无参数的保存bean的字节码:Tomcat服务器使用字节码文件创建bean,字节码文件必须保存在特定的目录中.(Web服务器子目录\WEB-INF\classes中), Classes中还必须有与包对应的子目录结构. 比如包名为com.donaljdohn, 那么在Classes下应该建立子目录结构com\donaljdohn创建与使用bean:<jsp:useBean id="给bean起得名字" class="创建bean的类" scope="bean有效范围" type=“class_or_interface_name”></jsp:useBean>或<jsp:useBean id="给bean起的名字" class="创建bean的类" scope="bean有效范围"/>●在JSP页面中, 必须有相应的import指令●<%@ page import="com.donaldjohn.*"%>●创建bean的类中必须要带有包名.id=“"在所定义的范围中确认Bean的变量,在定义某个JavaBean时,需要指定它的ID,通过此ID对JavaBean的实例对象进行引用。
JSP程序设计教程(第5章)
5.2 JavaBean中的属性
1.简单属性(Simple)
简单属性就是在JavaBean中对应了简单的setXxx()和 getXxx()方法的变量,在创建JavaBean时,简单属性最 为常用。
(2)不可视JavaBean 不可视JavaBean:值JavaBean和工具JavaBean。
5.1.2 JavaBean的种类
值JavaBean严格遵循了JavaBean的命名规范, 通常用来封装表单数据,作为信息的容器。 【例5-1】 值JavaBean示例(User类)
工具JavaBean则可以不遵循JavaBean规范,通常用 于封装业务逻辑,数据操作等,例如连接数据库,对数据 库进行增、删、改、查和解决中文乱码等操作。
中文显示乱码。 解决方法:输出获取的表单数据之前,先进行转码操作。
未转码
转码后
5.4.1 应用JavaBean解决中文 乱码
【例5-9】 应用JavaBean解决中文乱码
public static String toChinese(String str){//工具JavaBean if(str==null) str=""; try {//通过String类的构造方法,将指定的字符串转换为“gb2312”编码 str=new String(str.getBytes("ISO-8859-1"),"gb2312"); } catch (UnsupportedEncodingException e) { str=""; e.printStackTrace(); } return str;
JAVA中JavaBean对象之间属性拷贝的方法
JAVA中JavaBean对象之间属性拷贝的⽅法 JAVA中JavaBean对象之间的拷贝通常是⽤get/set⽅法,但如果你有两个属性相同的JavaBean或有⼤部分属性相同的JavaBean,对于这种情况,可以采⽤以下⼏个简便⽅法处理。
下⾯对这⼏个⽅法做⼀下简单介绍,并通过实际的案例测试下性能差异1.使⽤mons.beanutils.BeanUtils.copyProperties2.使⽤org.springframework.beans.BeanUtils.copyProperties3.使⽤net.sf.cglib.beans.BeanCopier.copy4.使⽤org.springframework.cglib.beans.BeanCopier.copy5.使⽤mirror mirror.setValue6.使⽤⾃写反射7.使⽤json序列化⼀. 项⽬依赖1 <dependencies>2 <dependency>3 <groupId>org.springframework</groupId>4 <artifactId>spring-core</artifactId>5 <version>5.1.6.RELEASE</version>6 </dependency>7 <dependency>8 <groupId>org.nutz</groupId>9 <artifactId>nutz</artifactId>10 <version>1.b.52</version>11 </dependency>12 <dependency>13 <groupId>commons-beanutils</groupId>14 <artifactId>commons-beanutils</artifactId>15 <version>1.9.3</version>16 </dependency>17 <dependency>18 <groupId>org.springframework.data</groupId>19 <artifactId>spring-data-redis</artifactId>20 <version>2.0.7.RELEASE</version>21 <exclusions>22 <exclusion>23 <artifactId>spring-core</artifactId>24 <groupId>org.springframework</groupId>25 </exclusion>26 </exclusions>27 </dependency>28 <dependency>29 <groupId>commons-logging</groupId>30 <artifactId>commons-logging</artifactId>31 <version>1.2</version>32 </dependency>33 <dependency>34 <groupId>com.alibaba</groupId>35 <artifactId>fastjson</artifactId>36 <version>1.2.51</version>37 </dependency>3839 <dependency>40 <groupId>cglib</groupId>41 <artifactId>cglib</artifactId>42 <version>3.1</version>43 </dependency>44 <dependency>45 <groupId>org.projectlombok</groupId>46 <artifactId>lombok</artifactId>47 <version>1.18.6</version>48 </dependency>49 </dependencies>项⽬依赖⼆. 准备测试类及数据@Datapublic static class CosmosY {private String filed5;private String filed6;private String filed7;private String filed8;private String filed9;private String filed10;private String filed11;private String filed12;private String filed13;private String filed14;private String filed15;private String filed16;private String filed17;private String filed18;private String filed19;private String filed20;private String filed21;private String filed22;private String filed23;private String filed24;private String filed25;private String filed26;private String filed27;private String filed28;private String filed29;private String filed30;private String filed31;private String filed32;private String filed33;private String filed34;private String filed35;private String filed36;private String filed37;private String filed38;private String filed39;private String filed40;private String filed41;private String filed42;private String filed43;private String filed44;private String filed45;private String filed46;private String filed47;private String filed48;private String filed49;private String filed50;}测试类:SourceData@Datapublic static class CosmosN {private String filed1;private String filed2;private String filed3;private String filed4;private String filed5;private String filed6;private String filed7;private String filed8;private String filed9;private String filed10;private String filed11;private String filed12;private String filed13;private String filed14;private String filed15;private String filed16;private String filed17;private String filed18;private String filed19;private String filed20;private String filed21;private String filed22;private String filed23;private String filed24;private String filed25;private String filed26;private String filed31;private String filed32;private String filed33;private String filed34;private String filed35;private String filed36;private String filed37;private String filed38;private String filed39;private String filed40;private String filed41;private String filed42;private String filed43;private String filed44;private String filed45;private String filed46;private String filed47;private String filed48;private String filed49;private String filed50;}测试类:⽬标类使⽤随机数据,初始化源数据对象1private static CosmosY getCosmosY() {2 CosmosY cosmosY = new CosmosY();3 Field[] fields = cosmosY.getClass().getDeclaredFields();4for (Field field : fields) {5try {6 field.setAccessible(true);7 field.set(cosmosY, getRandomString());8 } catch (IllegalAccessException e) {9 e.printStackTrace();10 }11 }12return cosmosY;13 }141516/**17 * 获取随机词18 *19 * @return20*/21private static String getRandomString() {2223 Random random = new Random();24 List<String> stringList = new ArrayList<String>();25 stringList.add("application 应⽤程式应⽤、应⽤程序");26 stringList.add("application framework 应⽤程式框架、应⽤框架应⽤程序框架");27 stringList.add("architecture 架构、系统架构体系结构");28 stringList.add("argument 引数(传给函式的值)。
JAVABean的使用详解
JAVABean的使用详解JavaBean 是一种JAVA语言写成的可重用组件。
为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。
JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性。
众所周知,属性名称符合这种模式,其他Java 类可以通过自身机制发现和操作这些JavaBean 属性。
概述用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以用java代码创造的对象进行打包,并且其他的开发者可以通过内部的JSP页面、Servlet、其他JavaBean、applet程序或者应用来使用这些对象。
用户可以认为JavaBean提供了一种随时随地的复制和粘贴的功能,而不用关心任何改变。
JavaBean可分为两种:一种是有用户界面(UI,User Interface)的JavaBean;还有一种是没有用户界面,主要负责处理事务(如数据运算,操纵数据库)的JavaBean。
JSP通常访问的是后一种JavaBean。
编辑本段发展最初,JavaBean的目的是为了将可以重复使用的软件代码打包标准。
特别是用与帮助厂家开发在综合开发环境(IDE)下使用的java软件部件。
这些包括如Grid控件,用户可以将该部件拖放到开发环境中。
从此,JavaBean就可以扩展为一个java web 应用的标准部件,并且JavaBean部件框架已经扩展为企业版的 Bean(EJB)编辑本段需求JavaBean是java类,属于某些特定的译码指导方针,并且扩展了适应性和范围,允许用户访问内部的属性和方法。
通过这些,JavaBean类可以用于下列方法:1.在IDE中,JavaBean的功能允许应用开发者浏览其中的方法,即使JavaBean是被编译的,并且无法利用原始的源文件。
2.在 Remote Method Invocation(RMI) 的分布式风格中,这项功能听起来并不让人兴奋,但是在未来的包含企业版的JavaBean后,将改变这种情况。
Spring的Bean配置说明
<beans> Spring配置文件的根元素,包含一个或多个bean元素。
<bean> 用于告诉Spring容器一个类以及它是如何配置的。
class属性:Java Bean 类名(全路经)。
id属性:Java Bean在BeanFactory中的唯一标识,代码中通过BeanFactory获取JavaBean实例时需以此作为索引名称。
name属性:同上,如果给bean增加别名,可以通过name属性指定一个或多个id。
singleton属性:指定此Java Bean是否采用单例(Singleton)模式,如果设为“true”,则在BeanFactory作用范围内,只维护此Java Bean的一个实例,代码通过BeanFactory获得此Java Bean实例的引用。
反之,如果设为“false”,则通过BeanFactory获取此Java Bean实例时,BeanFactory每次都将创建一个新的实例返回。
abstract属性:设定ApplicationContext是否对bean进行预先的初始化。
parent属性:定义一个模板。
autowire属性:bean自动装配模式。
可选5种模式。
no:不使用自动装配。
Bean的引用必须通过ref元素定义。
byName:通过属性名字进行自动装配。
byType:如果BeanFactory中正好有一个同属性类型一样的bean,就自动装配这个属性。
如果有多于一个这样的bean,就抛出一个致命异常,它指出你可能不能对那个bean使用byType的自动装配。
如果没有匹配的bean,则什么都不会发生,属性不会被设置。
如果这是你不想要的情况(什么都不发生),通过设置dependency-check="objects"属性值来指定在这种情况下应该抛出错误。
constructor:这个同byType类似,不过是应用于构造函数的参数。
如果在BeanFactory中不是恰好有一个bean与构造函数参数相同类型,则一个致命的错误会产生。
