JavaBean

(一)JavaBean 是一种特殊的 Java 类,主要用于传递数据信息,这种 java 类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。

1、如果要在两个模块之间传递多个信息,可以将这些信息封装到一个JavaBean中,这种JavaBean的实例对象通常称之为值对象(Value Object,简称VO)。这些信息在类中用私有字段来存储

Alt+Shift+S右键菜单选R是添加get,set

 

2、内省综合案例

IntroSpectorTest.java

package cn.itcast.day1;


import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class IntroSpectorTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		ReflectPoint pt1=new ReflectPoint(3,5);
		
		String propertyName="x";
		//"x"-->X-->"getX"-->MethodGetX-->
		Object retVal = getProperty(pt1, propertyName);		
		System.out.println(retVal);
		
		Object value=7;
		
		setProperties(pt1, propertyName, value);		
		
		System.out.println(pt1.getX());
	}

	private static void setProperties(Object pt1, String propertyName,
			Object value) throws IntrospectionException,
			IllegalAccessException, InvocationTargetException {
		PropertyDescriptor pd2=new PropertyDescriptor(propertyName,pt1.getClass());
		Method methodSetX=pd2.getWriteMethod();
		methodSetX.invoke(pt1,value);
	}

	private static Object getProperty(ReflectPoint pt1, String propertyName)
			throws IntrospectionException, IllegalAccessException,
			InvocationTargetException {
		PropertyDescriptor pd=new PropertyDescriptor(propertyName,pt1.getClass());
		Method methodGetX=pd.getReadMethod();
		Object retVal=methodGetX.invoke(pt1);
		return retVal;
	}

}

 


 (二)Beanutils工具包

 Sun公司的内省API过于繁琐,所以Apache组织结合很多实际开发中的应用场景开发了一套简单、易用的API操作Bean的属性——BeanUtils,在Beanutil中可以直接进行类型的自动转换。

BeanUtil工具包下载:

  1,登录 http://commons.apache.org/beanutils/

  2,  点击Download

  3, 点击Commons BeanUtils进行下载

使用BeanUtil

在项目中导入commons-beanutils-1.8.3.jar包即可

BeanUtil的应用

    Beanutils工具包的常用类:

         1,BeanUtils

         2,PropertyUtils

         3,ConvertUtils.regsiter(Converter convert, Class clazz)

         4,自定义转换器Beanutils工具包设置javaBean的属性和读取javaBean

导包两个方法:

1、将jar包拷贝下来,点击项目右键-〉BuildPath-〉Configure build path ,点击Libraries ,按钮“Add ExternalJARs...”是增加外面的jar包

    (在本机运行没问题,工程内没有加入jar包,将工程导出时在其他机器时没有jar包)

2、在工程目录下建一个文件夹lib,把拷贝的jar包放在里面

右键jar包BuildPath-〉Add to Build Path

 

commons-logging-1.1.jar 是Apache下的开发包

右键工程->properties->java compiler->java Build Path

例子:IntroSpectorTest.java

package cn.itcast.day1;


import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Map;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.PropertyUtils;

public class IntroSpectorTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		ReflectPoint pt1=new ReflectPoint(3,5);
		
		String propertyName="x";
		//"x"-->X-->"getX"-->MethodGetX-->
		Object retVal = getProperty(pt1, propertyName);		
		System.out.println(retVal);
		
		Object value=7;
		
		setProperties(pt1, propertyName, value);	
		
		System.out.println(BeanUtils.getProperty(pt1, "x").getClass().getName());
		BeanUtils.setProperty(pt1, "x", "9");//设置值  可以自动进行类型转换
		
		System.out.println(pt1.getX());
		/*
		//java7的新特性
		Map map={name:"zxx",age:18};
		BeanUtils.setProperty(map, "name", "lhm");
		*/
		
		//BeanUtils是以字符串形式对java进行操作
		BeanUtils.setProperty(pt1, "birthday.time", "111");
		System.out.println(BeanUtils.getProperty(pt1, "birthday.time"));
		//PropertyUtils是以属性本身的类型进行操作
		PropertyUtils.setProperty(pt1, "x", 9);
		System.out.println(PropertyUtils.getProperty(pt1, "x").getClass());
	}

	private static void setProperties(Object pt1, String propertyName,
			Object value) throws IntrospectionException,
			IllegalAccessException, InvocationTargetException {
		PropertyDescriptor pd2=new PropertyDescriptor(propertyName,pt1.getClass());
		Method methodSetX=pd2.getWriteMethod();
		methodSetX.invoke(pt1,value);
	}

	private static Object getProperty(ReflectPoint pt1, String propertyName)
			throws IntrospectionException, IllegalAccessException,
			InvocationTargetException {
		/*PropertyDescriptor pd=new PropertyDescriptor(propertyName,pt1.getClass());
		Method methodGetX=pd.getReadMethod();
		Object retVal=methodGetX.invoke(pt1);*/
		
		BeanInfo beanInfo=Introspector.getBeanInfo(pt1.getClass());
		PropertyDescriptor[] pds=beanInfo.getPropertyDescriptors();
		Object retVal=null;
		for(PropertyDescriptor pd : pds)
		{
			if(pd.getName().equals(propertyName))
			{
				Method methodGetX=pd.getReadMethod();
				retVal=methodGetX.invoke(pt1);
				break;
			}
		}
		return retVal;
	}

}


ReflectPointReflectPoint.java

package cn.itcast.day1;

import java.util.Date;

public class ReflectPoint {
	private Date birthday=new Date();
	private int x;
	public int y;
	
	public String str1="ball";
	public String str2="basketball";
	public String str3="itcast";
	
	public Date getBirthday() {
		return birthday;
	}


	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}


	public ReflectPoint(int x, int y) {
		super();
		this.x = x;
		this.y = y;
	}
	
	
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + x;
		result = prime * result + y;
		return result;
	}


	public int getX() {
		return x;
	}


	public void setX(int x) {
		this.x = x;
	}


	public int getY() {
		return y;
	}


	public void setY(int y) {
		this.y = y;
	}


	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		ReflectPoint other = (ReflectPoint) obj;
		if (x != other.x)
			return false;
		if (y != other.y)
			return false;
		return true;
	}


	@Override
	public String toString()
	{
		return str1+":"+str2+":"+str3;
	}
}


 

源码地址: https://pan.quark.cn/s/d1f41682e390 miyoubiAuto 米游社每日米游币自动化Python脚本(务必使用Python3) 8更新:更换cookie的获取地址 注意:禁止在B站、贴吧、或各大论坛大肆传播! 作者已退游,项目不维护了。 如果有能力的可以pr修复。 小引一波 推荐关注几个非常可爱有趣的女孩! 欢迎B站搜索: @嘉然今天吃什么 @向晚大魔王 @乃琳Queen @贝拉kira 第三方库 食用方法 下载源码 在Global.py中设置米游社Cookie 运行myb.py 本地第一次运行时会自动生产一个文件储存cookie,请勿删除 当前仅支持单个账号! 获取Cookie方法 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 按刷新页面,按下图复制 Cookie: How to get mys cookie 当触发时,可尝试按关闭,然后再次刷新页面,最后复制 Cookie。 也可以使用另一种方法: 复制代码 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 控制台粘贴代码并运行,获得类似的输出信息 部分即为所需复制的 Cookie,点击确定复制 部署方法--腾讯云函数版(推荐! ) 下载项目源码和压缩包 进入项目文件夹打开命令行执行以下命令 xxxxxxx为通过上面方式或取得米游社cookie 一定要用双引号包裹!! 例如: png 复制返回内容(包括括号) 例如: QQ截图20210505031552.png 登录腾讯云函数官网 选择函数服务-新建-自定义创建 函数名称随意-地区随意-运行环境Python3....
<think>首先,用户要求根据给定的引用内容回答关于JavaBean的问题。这些引用来自不同的来源,我需要基于这些信息来构建回答。 引用内容总结: - [^1]: JavaBean的定义:可重用的Java组件,用于封装业务逻辑和数据操作,分为封装数据和封装业务。 - [^2]: JavaBean的用途:节省开发时间,通过重用组件。 - [^3]: JavaBean的开发规范:必须放在包中,public类,属性私有,有get/set方法,无参构造器;JSP中使用<jsp:useBean>标签调用。 - [^4]: 一个JavaBean的示例代码:类FirstBean在包com中,有私有属性x,无参构造器,setX和getX方法。 用户的问题是:“我想获取关于JavaBean的相关信息,可能包括定义、使用方法、规范等 请问JavaBean的详细介绍及使用方法” 回答结构: - 系统级指令要求:使用$...$用于行内数学表达式(但这里可能不需要数学公式),独立公式用$$...$$,LaTeX语法正确,使用中文回答,生成相关问题。 - 回答需要结构清晰,帮助用户逐步解决问题,保证真实可靠。 - 末尾添加引用标识,如[^1]。 - 生成相关问题。 内容结构: 1. **定义**:解释什么是JavaBean,基于引用[^1]:可重用的Java组件,用于封装业务逻辑和数据库操作。 2. **重要性**:引用[^1]提到在Web程序中很重要,处理业务逻辑和数据。 3. **分类**:引用[^1]说分为封装数据和封装业务。 4. **使用方法**: - 开发规范:基于引用[^3]:放在包中,public类,属性私有,有get/set方法(遵守命名规范),无参构造器。 - JSP中使用:引用[^3]描述如何使用<jsp:useBean>标签。 - 优点:引用[^2]:节省时间,重用代码。 5. **示例**:基于引用[^4],给出一个简单JavaBean的例子。 6. **完整回答**:综合所有信息,逐步介绍。 生成相关问题: - 指令说“生成相关问题”,在回答末尾添加类似示例中的相关问题部分。 - 例如:§§相关问题§§,然后列出几个问题。 语言: - 使用中文回答。 - 引用内容末尾添加引用标识。 可能的回答大纲: 1. 介绍JavaBean的定义和作用。 2. 详细说明开发规范。 3. 解释在JSP中的使用方法。 4. 给出一个代码示例。 5. 总结优点。 6. 添加相关问题。 引用标识: - 当提到引用内容时,在末尾添加像[^1]这样的标识。 - 示例中是在句末添加。 最终输出: - 以清晰段落形式。 - 生成相关问题在最后。 </think>### JavaBean的详细介绍及使用方法 JavaBean是Java开发中的一种可重用组件设计模式,主要用于封装业务逻辑和数据操作,从而提高代码的可维护性和复用性。它本质上是一个Java类,遵循特定的规范来确保跨平台兼容性。以下我将逐步介绍JavaBean的核心内容,包括定义、分类、开发规范、使用方法以及示例。回答基于提供的引用内容,确保信息真实可靠。 #### 1. **JavaBean的定义与重要性** JavaBean是一种可跨平台重用的Java组件,常用于Web应用程序中封装业务逻辑(如用户验证规则)和数据库操作(如数据增删改查)。它帮助开发者将程序分解为独立的模块,减少代码冗余并提升开发效率。在Web开发中,JavaBean是处理数据和业务的核心组件,例如在JSP页面中调用它来处理用户请求[^1]。JavaBean从功能上可分为两类: - **封装数据**:例如存储用户信息(用户名、密码等),属性通过getter/setter方法访问。 - **封装业务**:例如实现购物车逻辑或数据验证规则。 这种设计模式的核心优点是提高代码复用性,开发者只需编写一次组件,即可在多个场景调用,节省开发时间[^2]。 #### 2. **JavaBean的开发规范** 编写JavaBean必须遵守严格的规范,以确保组件能被正确实例化和调用。主要规范如下(基于引用内容): - **包管理**:JavaBean必须放在一个包中(包名通常小写),例如`package com;[^3]`。 - **类声明**: - 类必须是`public`的,且类名与文件名一致。 - 必须提供无参数的公共构造方法(默认构造器),因为JSP等容器需要它初始化对象[^3]。 - **属性封装**: - 所有属性(字段)应声明为`private`以实现封装。 - 通过公共的getter和setter方法访问属性,方法命名必须遵循驼峰式规范:例如属性名为`userName`,则getter方法为`getUserName()`,setter方法为`setUserName(String value)`[^3]。 - 这确保了属性的安全性和一致性,防止直接访问内部数据。 - **其他要求**:类应专注于单一职责,避免包含过多无关逻辑。 #### 3. **JavaBean的使用方法** JavaBean主要在JSP(Java Server Pages)或Servlet中使用,通过标准标签或Java代码调用。以下是常见使用步骤: - **在JSP中调用JavaBean**: - 使用`<jsp:useBean>`标签创建JavaBean对象。语法如下: ```xml <jsp:useBean id="beanObject" class="com.ExampleBean" scope="page|request|session|application" /> ``` - `id`:对象的引用名,用于后续访问。 - `class`:类的全路径名(包括包名)。 - `scope`:指定对象的作用域,包括: - `page`:对象仅在当前页面有效。 - `request`:对象在一次HTTP请求中有效。 - `session`:对象在用户会话中有效。 - `application`:对象在整个Web应用中有效[^3]。 - 调用方法:通过`<jsp:getProperty>`和`<jsp:setProperty>`标签操作属性,例如: ```xml <jsp:setProperty name="beanObject" property="propertyName" value="newValue" /> <jsp:getProperty name="beanObject" property="propertyName" /> ``` - **优点**:重用JavaBean可以减少重复代码,例如将数据库查询逻辑封装为一个Bean,在多个页面调用它来处理数据[^2]。这提高了开发效率和系统可维护性。 #### 4. **JavaBean示例** 以下是一个简单的JavaBean示例,展示如何封装数据(Simple属性)。代码基于引用[^4],演示了规范的实现: ```java // 包名小写,类名大写 package com; // JavaBean放在包com中 public class FirstBean { private String x; // 私有属性,封装数据 // 无参公共构造方法 public FirstBean() { x = "This is the first javabean"; // 初始化默认值 } // setter方法(public,命名规范) public void setX(String x) { this.x = x; // this关键字避免歧义 } // getter方法(public,命名规范) public String getX() { return x; } } ``` - **解释**:在这个示例中: - `FirstBean`类封装了一个字符串属性`x`。 - 无参构造器初始化默认值。 - `setX()`和`getX()`方法提供对属性的访问。 - 在JSP中使用: ```jsp <jsp:useBean id="firstBean" class="com.FirstBean" scope="session" /> <% // 调用setter设置属性 firstBean.setX("Hello, JavaBean!"); // 调用getter获取属性 out.println(firstBean.getX()); // 输出:Hello, JavaBean! %> ``` 这样,JavaBean实现了数据封装和重用[^4]。 #### 总结 JavaBean是Java EE开发的关键组件,它通过规范化的设计(如封装属性、getter/setter方法)支持代码重用和模块化。尤其在Web应用中,结合JSP标签使用,能高效处理数据和业务逻辑。其核心优势是提升开发速度和系统可靠性[^2][^3]。开发者应严格遵守规范(如无参构造器和包管理)以避免运行时错误。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值