Java Bean

java bean的使用和bean的管理 如何从IOC容器中手动的获取到bean对象bean的作用域配置管理第三方的bean对象学习完bean的获取、bean的作用域之后,接下来我们再来学习第三方bean的配置。之前我们所配置的bean,像controller、service,dao三层体系下编写的类,这些类都是我们在项目当中自己定义的类(自定义类)。 阅读详情
一、关于javabean

javabean是固定写法的java类


我对JavaBean的理解就是对一个对象提供了一套操作方法。


书写格式为:

1)必须有无参构造函数

2)属性必须私有, 我们称为字段

3)提供标准的getter和setter

4)当创建实现了BeanInfo接口的类时,必须将类命名为bnameBeanInfo。

例: name 字段 的getter: String getName() settter: void setName(String name)

javabean例子:

复制代码
//快捷键是shift+alt+s
public class User
{
    private String name;
    private int age;
    public String getName()
    {
        return name;
    }
    public void setName(String name)
    {
        this.name = name;
    }
    public int getAge()
    {
        return age;
    }
    public void setAge(int age)
    {
        this.age = age;
    }
    @Override
    //为了方便打印,添加一个toString方法
    public String toString()
    {
        return "User [age=" + age + ", name=" + name + "]";
    }
}
复制代码
二、关于 内省

内省是什么?: 通过反射的方式访问javabean的技术

Jdk中的api : PropertyDescriptor类操作Bean的属性

内省的作用:我们可以去实现一种通用性

1.传统的方式去访问javabean

复制代码
public class Demo1
{
    public static void main(String[] args)
    {
        User user=new User();
        
        user.setName("zhangsan");
        user.setAge(19);
        System.out.println(user);
    }
    
}
复制代码

2.使用内省的方式来访问javabean

复制代码
public class Demo1
{
    public static void main(String[] args) throws Exception
    {
        User user=new User();
        //创建属性描述器
        PropertyDescriptor descriptor=new PropertyDescriptor("name",User.class);
        //获得写方法
        Method writeMethod=descriptor.getWriteMethod();
        
        //调用写方法
        writeMethod.invoke(user, "lisi");
        System.out.println(user);

    }
    
}
复制代码

 

3.简化书写,实现通用性。这里写一个通用的方法,让属性名称为一个变量,假如属性名很多的话,得到属性名后,就可以遍历,然后给他们一一的赋值,这就是内省的魅力。

如果不用反射,那么传统的方式是不可能实现通用的。

下面代码实现能够为任何的javabean赋任何的值,只有用内省的方法才可以做的到:

复制代码
import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import cn.itcast.day08.domain.User;

public class Demo2 {

    /**
     * @param args
     * @throws IntrospectionException 
     * @throws InvocationTargetException 
     * @throws IllegalAccessException 
     * @throws IllegalArgumentException 
     */
    public static void main(String[] args) throws Exception {
        // 内省
        
        User user = new User();
        
        setProperty(user, "name", "wangwu");
        setProperty(user, "age", 11);
        
        System.out.println(user);

    }
    
    // 实现一个通用的方法   为任意的一个javabean的任意属性赋任意值
    public static void setProperty(Object bean, String fieldName, Object value) throws Exception {
        // 创建属性描述器
        PropertyDescriptor descriptor = new PropertyDescriptor(fieldName, bean.getClass());
        
        // 获得 写方法
        Method writeMethod = descriptor.getWriteMethod();
        
        // 调用 写方法
        writeMethod.invoke(bean, value);
    }

}
复制代码

 

由于内省用起来特别麻烦,Apache组织开发了一套用于操作JavaBean的API,如下详讲:

 

三、BeanUtils工具包

Apache组织开发了一套用于操作JavaBean的API(内省)

核心类 BeanUtils

setProperty(bean, name, value)

copyProperties(target, source);

可以支持String到8中基本数据类型转换

其他引用数据类型都需要注册转换器 ConvertUtils.register(Converter, Class)

 

注意:1、要想使用beanutils需要导入外部的jar包:commons-beanutils-1.8.0.jar这个jar包到lib目录里面

2、BeanUtils要想使用,还需要导入一个log的jar包:commons-logging.jar

下面我们来看看BeanUtils的魅力:

使用BeanUtils来格式化日期

1.javabean

复制代码
package cn.itcast.day08.domain;

import java.util.Date;

// 一个javabean 是否有name属性取决于是否getter或setter方法
public class User {

    private String name;    // 字段

    private int age;
    
    private Date birthday;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    
    public Date getBirthday() {
        return birthday;
    }

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

    @Override
    public String toString() {
        return "User [name=" + name + ", age=" + age + "]";
    }

    
}
复制代码

2.beanutils

复制代码
package cn.itcast.day08.introspector;

import java.lang.reflect.InvocationTargetException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;
import org.apache.commons.beanutils.converters.DateConverter;
import org.apache.commons.beanutils.locale.converters.DateLocaleConverter;

import cn.itcast.day08.domain.User;

public class Demo3 {
    
    public static void main(String[] args) throws Exception {
        
        User user = new User();
        
        String name = "zhangsan";
        String age = "19";
        String birthday = "19801122";
        // 11/22/1980   1980 11 22
        
        // 注册一个转换器
        /* 使用匿名内部类来注册转换器
        ConvertUtils.register(new Converter() {
            
            public Object convert(Class beanClass, Object value) {
                // String -- Date
                String birthday = (String) value;
                SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
                try {
                    return sdf.parse(birthday);
                } catch (ParseException e) {
                    return null;
                }
            }
        }, Date.class);
        */
        DateConverter converter = new DateConverter();
        converter.setPatterns(new String[]{"yyyy-MM-dd","yyyyMMdd","MM/dd/yyyy"});
        ConvertUtils.register(converter, Date.class);
        
        String fieldName = "name";
        BeanUtils.setProperty(user, fieldName, name);
        BeanUtils.setProperty(user, "age", age);
        BeanUtils.setProperty(user, "birthday", birthday);
        
        
        
        System.out.println(user);
        System.out.println(user.getBirthday().toLocaleString());
        
    }

}
复制代码

 

四. WebUtils 工具类

实现任何request提交的表单封装到对应的javabean

 

1.用户注册jsp页面:

复制代码
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
   
    <title>用户注册表单</title>
    
  </head>
  
  <body style="text-align: center;">
       <form action="/myday08/servlet2" method="post" >
           <table border="1" width="600px">
               <tr>
                   <td>用户名</td>
                   <td>
                       <input type="text" name="name" />
                   </td>
               </tr>
           
               <tr>
                   <td>年龄</td>
                   <td>
                       <input type="text" name="age" />
                   </td>
               </tr>
               <tr>
                   <td>出生日期</td>
                   <td>
                       <input type="text" name="birthday" />
                   </td>
               </tr>
               
               <tr>
                   <td>
                       <input type="reset" value="重置" />
                   </td>
                   <td>
                       <input type="submit" value="用户注册" />
                   </td>
               </tr>
           </table>
       </form>
  </body>
</html>
复制代码

2.写一个工具类,把request里面所有的参数全部封装到javabean中去:

复制代码
package cn.itcast.day08.util;

import java.lang.reflect.InvocationTargetException;
import java.sql.Date;
import java.util.Enumeration;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.converters.DateConverter;

public class WebUtils
{
    private WebUtils(){}
    
    //定义一个通用工具方法,将请求参数封装到javabean
    public static Object request2bean(HttpServletRequest request,Class beanClass){

    try{
        Object bean=beanClass.newInstance();
        //        获得所有请求参数名
        Enumeration names = request.getParameterNames();
        //注册日期转换器
        DateConverter converter=new DateConverter();
        converter.setPattern("yyyy-MM-dd");
        ConvertUtils.register(converter, Date.class);
        
        //遍历
        while(names.hasMoreElements()){
//            获得一个参数名
            String name = (String)names.nextElement();
//            获得参数名对应的参数值
            String value = request.getParameter(name);
            //将参数名作为属性名 将参数值作为属性值,通过beanutils工具实现属性的封装
        
                BeanUtils.setProperty(bean, name, value);
            }
                return bean;
            }catch (Exception e)
            {
                throw new RuntimeException(e);
            }//异常要抓下来,不能抛给servlet,把编译时异常包装称运行时异常
            
        }
    }
复制代码

3.写一个servlet页面,注意查看导入的包名称!分清关系

复制代码
package cn.itcast.day08.web.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.itcast.day08.domain.User;
import cn.itcast.day08.util.WebUtils;

public class Servlet2 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 表单提交的参数封装到javabean
        User bean = WebUtils.request2Bean(request, User.class);
        
        System.out.println(bean);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }

}
复制代码

 

 

jsp这块的重点为:

1. jsp运行原理(会被翻译成servlet)

2. jsp脚本表达式和脚本片段

3. jsp九大隐式对象

4. web开发的四个域对象

5. 内省

beanUtils工具的使用

使用

在java中什么是bean 【代码】在java中什么是bean。 阅读详情

相关推荐

codesys【modbusRTU】主站

【代码】modbusRTU【codesys】

cfqq1989的博客 4370

java知识那么多,怎么学好呢?----记作用、找核心类、突破口、见名知意

java知识那么多,怎么学好呢?----记作用、找核心类、突破口、见名知意

伟庭的博客 640

五子棋AI实战:极大极小搜索、Alpha-Beta剪枝与禁手实现

博弈树搜索是双人零和博弈AI的经典决策框架,其核心思想是假设对手最优应对,通过递归遍历走法空间寻找最优解。极大极小搜索配合Alpha-Beta剪枝,能在不影响决策结果的前提下将搜索量降至平方根级别,大幅提升搜索效率。在五子棋场景中,还需处理黑棋禁手规则,包括双三、双四和长连判定,并将其融入搜索框架。评估函数基于棋型识别对局面打分,走法排序和迭代加深进一步优化剪枝效果。这些技术共同构成了一个可运行的五子棋AI,适用于棋类AI入门与博弈搜索实践。

weixin_29054399的博客 125

JavaBean及其内省操作

一、JavaBean简介JavaBean是使用Java语言开发的一个可重用的组件,在JSP的开发中可以使用JavaBean减少重复代码,使整个JSP代码的开发更简洁。JSP搭配JavaBean来使用,有以下的优点:1.可将HTML和Java代码分离,这主要是为了日后维护的方便。如果把所有的程序代码(HTML和Java)写到JSP页面中,会使整个程序代码又多又复杂,造成日后维护上的困难。2.可利用Ja

yushengpeng的博客 671

PyCharm安装PyQt5及工具(Qt Designer、PyUIC、PyRcc)详细教程来了

Qt是常用的用户界面设计工具,而在Python中则使用PyQt这一工具包,它是Python编程语言和Qt库的成功融合。这篇博文通过图文详细介绍在PyCharm中如何完整优雅地安装配置PyQt5的所有工具包,主要内容包括PyQt5、PyQt5-tools的依赖包安装和Qt Designer、PyUIC、PyRcc三个工具的设置。最后简单演示了PyQt5的调用方式及三个工具的使用方法。

Python966的博客 3万+

【从零开始学Skynet】基础篇(一):Skynet环境搭建

Skynet运行于Linux操作系统,我们可以在自己的电脑上搭建虚拟机系统,也可以购买阿里云、腾讯云服务器,笔者这个系列的所有代码都是在Ubuntu16.04版本的虚拟机系统下运行编辑。

我是一条寻水的鱼 3167

内省技术

一、什么是内省(Introspector) 内省技术其实指的就是java提供的对JavaBean操作的API,利用内省技术我们可以方便地对JavaBean对象的属性进行存取,进而达到自动封装对象。 内省是 Java 语言对 Bean 类属性、事件的一种处理方法(也就是说给定一个javabean对象,我们就可以得到/调用它的所有的get/set方法)。例如类 A 中有属性 name, 那我们可

charlie的专栏 803

巨量千川M-API实战:异步报表与批量操作自动化指南

API(应用程序编程接口)是现代软件系统间通信和数据交换的核心技术,它定义了服务间交互的协议和规范。在数字营销领域,营销API(Marketing API)通过程序化接口实现了广告账户管理、数据获取和操作自动化的能力,其技术价值在于将重复性人工操作转化为高效、准确的自动化流程,显著提升运营效率并降低人为错误。在广告投放精细化运营场景中,面对海量数据报表的获取与批量广告状态管理的需求,异步任务处理和批量操作接口成为关键技术解决方案。本文聚焦巨量千川M-API,深入解析其异步报表获取机制与批量操作实现,涵盖从任

weixin_32932149的博客 427

JavaBean内省

1、什么是JavaBean?    JavaBean是一种特殊的Java类,主要用于传递数据信息,这种Java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。   如果要在两个模块之间传递多个信息,可以将这些信息封装到一个JavaBean中,这种JavaBean的实例对象通常称之为值对象(Value Object,简称VO)。这些信息在类中用私有字段来存储,如果读取或设置这些字段

it_Shine的博客 639

人形机器人电路板和算法分析

人形机器人电路板与算法深度剖析 电路板领域:人形机器人电子系统分为计算、驱动、感知、能源、通信五大模块。主控板采用高性能SoM(如NVIDIA Jetson AGX Orin),需满足严格电源完整性(PDN)与信号完整性(SI)要求;关节驱动板集成MCU、GaN/SiC功率器件及高精度编码器接口,采用刚柔结合PCB以适应狭小空间。挑战包括热-振可靠性(85°C/10G振动)、高密度互连(3mil线宽)及EMC兼容性。 算法领域:运动控制依赖MPC(模型预测控制)与强化学习(RL),实现实时动态平衡;感知算法

几十年资深高级架构师,技术专家的技术笔记。专注C、Java、Python、微服务、云原生、AI工程化及高并发系统分布式架构实战,分享源码剖析、性能调优与架构治理经验。 305

智能体异常行为检测-基于行为序列的异常模式识别技术【附代码】

在多智能体系统(Multi-Agent Systems, MAS)中,智能体之间的行为协调与自主决策是系统稳定运行的关键。然而,当某个智能体因策略偏移、环境变化或潜在攻击而出现**异常行为(Abnormal Behavior)**时,整个系统可能陷入混乱或崩溃。

一键难忘的博客 1143

java内省

在类Person中有属性name,那么我们可以通过getName()和setName()来得到其值或者设置新的值,通过 getName()和setName()来访问name属性,这就是我们以前常用的方式。为了让程序员更好地操作JavaBean的属性,JDK中提供了一套 API 用来访问某个属性的getter和setter方法,这就是内省。内省(Introspector) 是Java 语言对 JavaBean 类属性、事件和方法的一种标准处理方式,它的出现有利于操作对象属性,并且可以有效地减少代码量。 内省

m0_62520968的博客 1543

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Spring学习笔记06——bean、java bean、spring bean、POJO几个概念讲解

Bean这个词的具体含义需要根据上下文来区分,它可能指Java Bean(标准Java规范)或(Spring框架中的概念)。POJO是普通 Java 对象,强调简单性。Java Bean是标准化 POJO,强调规范与兼容性。Java Bean一定是POJO,但POJO不一定是Java Bean,Java Bean的规范更严格,POJO 更自由,例如Java Bean有Getter/Setter,并且必须有无参构造器,而POJO不必须。

weixin_42844704的博客 1489

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

java:理解java bean 和 spring bean

Spring Bean 是由。

talenteddriver的博客 731

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

sprinb bean和java bean的区别

摘要: Java Bean是遵循特定规范(私有属性、getter/setter、无参构造)的普通Java类,用于数据封装(如DTO)。Spring Bean是由Spring容器管理的对象,通过依赖注入和生命周期控制构建应用组件(如Service、DAO)。核心区别在于:Java Bean需手动实例化,而Spring Bean由容器管理;后者支持注解(如@Component)和作用域,前者无需框架参与。两者可共存——Spring Bean若符合Java Bean规范,则兼具双重身份,但Java Bean不依赖

滴水石穿 582

java中Bean,以及spring中bean

在框架(如 Spring)中,Bean 通常用于表示框架管理的组件,作为配置的一部分。是一个符合某些规范的普通 Java 对象(POJO,Plain Old Java Object)。这些 Bean 的定义和生命周期由 Spring 控制,使用时可以通过配置文件(XML、Java 配置类或注解)来定义 Bean。在应用程序中,Bean 常用于在不同层之间传递数据。例如,在控制器和服务层之间使用 Bean 来传递用户信息。Spring 会根据配置,将这些 Bean 注入到应用程序需要的地方。

qq_56947957的博客 1359

java反射bean_java反射bean to bean

/*** Copyright © 2018 fwz Info. Tech Ltd. All rights reserved.** @Package: com.sm.utils* @author: 冯文哲* @date: 2018年7月3日 上午11:53:09*/package com.sm.utils;import java.beans.BeanInfo;import java.beans.In...

weixin_42514783的博客 205

java bean 转bean_如何用Bull转换任意类型的Java Bean

Bull(Bean Utils Light Library)是一个将数据从一个对象递归地复制到另一个对象的Java-bean到Javabean转换器。它是通用的,灵活的,可重用的,可配置的,而且非常快。它是唯一能够在没有任何自定义配置的情况下转换可变、不可变和混合bean的库。本文介绍了如何使用它,并给出了每个可用特性的具体示例。1.依赖性com.hotels.beansbull-bean-tra...

weixin_29796279的博客 706

什么是Java Bean

它通常用于企业级开发(如 Spring 框架)或可视化组件开发(如早期的 Swing),是 Java 生态中广泛使用的一种设计模式。在 MVC 架构中作为 Model 层的载体,例如与数据库表映射(ORM 框架如 Hibernate)。通过反射机制实例化对象时(如 Spring 框架创建 Bean),需要默认的无参构造方法。将对象存储到文件、数据库,或通过网络传输(如 Redis 缓存对象)。:可以控制属性的读写权限,并添加额外逻辑(如数据校验、日志记录)。:代码简单,但破坏了封装性(无法添加校验逻辑)。

looken1024的博客 2158

装配Bean—通过java代码装配bean

1.0通过java代码装配bean ​ 在进行显式装配的时候,有两种选型方案:java和XML配置,这里先介绍java的配置方式. 创建配置类: 先复习下上一章的配置内容: @Configuration public class SgtPeppers implements CompactDisc { private String title = "sgt"; ...

weixin_30439131的博客 133

java bean配置文件_Bean Java配置

Spring 系列教程前面介绍了Bean的XML配置方法,从Spring 3.0开始,可以使用java代码配置Bean,替代XML配置。Java配置与注解配置不同,Java配置是把Java代码文件当作配置文件,注解配置是在实际Java类中使用注解设置依赖关系。Java配置也会用到一些注解,主要有:@Configuration、@ComponentScan和@Bean。1. 通过@Configura...

weixin_26808439的博客 870

java复制bean

基本思想就是利用java反射机制获得beans中的setter和getter方法,当发现两者属性名一致时就调用方法,获得和设置值,前提,两个bean对象必须属性名和类型一致,而且实现了getter和setter方法。 public class BeanCopyer {     private static BeanCopyer beanCopyer = new BeanCopyer();  

mumble的专栏 735

java 中 Bean 是什么

在Java和Spring框架中,Bean是一个核心概念,它指的是由Spring容器管理的对象。Bean通常是Java类的实例,Spring容器负责创建、配置、组装和管理这些对象的生命周期。3.3Java配置。

上善若水 1376

JavaEE进阶——Spring Bean与Java Bean的核心区别

本文探讨了JavaBean与SpringBean的核心区别:JavaBean是一种遵循特定编码规范(私有属性、公共getter/setter等)的普通Java类,主要用于数据传输;而SpringBean是由Spring容器管理的对象,具有完整的生命周期控制和依赖注入功能。关键差异在于:JavaBean由程序员手动创建管理,SpringBean则由容器自动管理,支持单例/原型等作用域、AOP等高级特性。通过用户注册场景示例,展示了数据载体(JavaBean)与业务组件(SpringBean)的协作方式,形象比

道冲而用之或不盈,渊兮似万物之宗。 843
上一篇: 读论文 + 总结 + 笔记
下一篇: [直观学习排序算法] 视觉直观感受若干常用排序算法
寂寞灵魂
博客等级 码龄15年 111粉丝 284原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值