javabean的创建过程(如何在java代码中创建applicationcontext.xml中的bean)

本文目录
- 如何在java代码中创建applicationcontext.xml中的bean
- 如何开发会话bean
- java中如何根据查询出来的表结构自动生成bean
- :怎么用Netbean新建一个JAVA源程序
- java 的Jbean怎么做啊
如何在java代码中创建applicationcontext.xml中的bean
这样吧,你首先在WEB-INF目录下的web.xml 添加下面的一个节点。例如我的配置名称是beans.xml
《context-param》
《param-name》contextConfigLocation《/param-name》
《param-value》classpath:beans.xml《/param-value》
《/context-param》
按照你的名称修改,然后在JUnit测试的时后新建对象这样写就可以了
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
希望可以帮到你
如何开发会话bean
会话Bean可以分为有状态会话Bean(stateful Bean)和无状态会话Bean(stateless Bean),有状态会话Bean可以在客户访问之间保存数据,而无状态会话Bean不会在客户访问之间保存数据。两者都实现了javax.ejb.SessionBean接口,EJB容器区通过部署文件ejb-jar.xml来判断是否为一个SessionBean提供保存状态的服务,另外,在程序实现上,无状态Bean不能声明实例变量,每个方法只能操作方法传来的参数,如果需要在引用期间维持一些数据状态,以在其他方法中可以引用,则可以把Bean设计成有状态会话Bean。在第二节中我们用一个SatatelessDate Bean例子描述了开发无状态会话Bean的过程及特性,下面的一节将介绍关于有状态会话Bean的一些特性和寿命周期,并用一个例子来证明这些特性。
有状态Session Bean寿命周期
有状态Session Bean寿命周期由容器控制,Bean的客户并不实际拥有Bean的直接引用,当我们部署一个EJB时,容器会为这个Bean分配几个实例到组件池(component pooling)中,当客户请求一个Bean时,J2EE服务器将一个预先被实例化的Bean分配出去,在客户的一次会话里,可以只引用一次Bean,就可以执行这个Bean的多个方法。如果又有客户请求同样一个Bean,容器检查池中空闲的Bean(不在方法中或事务中,如果一个客户长时间引用一个Bean但执行一个方法后需要等待一段时间再执行另一个方法,则这段时间也是空闲的),如果全部的实例都已用完则会自动生成一个新的实例放到池中,并分配给请求者。当负载减少时,池会自动管理Bean实例的数量,将多余的实例从池中释放。
有状态会话Bean的初始化状态为不存在,当有客户引用一个Bean时,按照顺序调用newInstance()、setSessionContext()和ejbCreate()方法,与第一节中讲到的无状态调用顺序相同。当处于方法现成状态时,如果客户调用remove()方法,则回到不存在状态,并触发Bean的ejbRemove()方法。如果客户长时间不调用Bean或服务器准备释放一些内存资源,则容器将这些Bean从组件池中钝化,钝化过程容器将调用Bean的ejbPassivate()方法,使程序员有机会在钝化Bean时释放分配的资源。当一个客户请求一个被钝化的Bean时,容器可以激活Bean,激活过程容器将调用ejbActivate()放,使程序员有机会在Bean转到方法现成状态时分配Bean所需的资源。
Bean本身可以管理事务(BMT Bean-Managed Transactions),也可以由容器管理事务(CMT Container-Managed Transation)。对于CMT,容器在方法开始时打开事务,在方法结束时实现事务。Bean开发人员可以通过afterBegin()、beforeCompletion()、afterCompletion(Boolean)来获取事务的各个状态,如果afterCompletion(Boolean)中Boolean变量为true表示事务完成,为false表示事务被撤消。
编写一个有状态Session Bean程序
假设这次我们要为一个基金组织编写一个基金帐户的Bean组件,这个组件将为基金管理系统提供一个基金帐户的基本功能。为了能够描述清楚有状态会话Bean的特性,我们将之简化成提供三个业务逻辑接口:addFunds()方法为一个基金帐户添加基金,removeFunds()方法从基金帐户中取出基金,方法getBalance()为我们提供一个基金帐户的余额查询。我们为这个Bean起名为StatefulAccount
设计一个有状态的Session Bean至少包括四个步骤:
开发主接口
开发组件接口
开发Bean实现类
编写部署文件
注意:本节假设你使用的Windows操作系统。如果使用其他操作系统,可能影响到存储路径和JDK命令,但这与程序代码和部署文件内容无关。
1.开发主接口(StatefulAccountHome.java):
是由Bean开发人员编写的一个Bean的主接口(interface)程序,负责控制Bean的生命周期(生成、删除、查找Bean)。只需要开发人员给出一个主接口类,类方法的实现由容器来完成。
主接口扩展了javax.ejb.EJBHome接口,参考avax.ejb.EJBHome接口定义如下:
package javax.ejb;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface EJBHome extends Remote{
public abstract EJBMetaData getEJBMetaData() throws RemoteException;
public abstract HomeHandle getHomeHandle() throws RemoteException;
public abstract void remove(Object obj) throws RemoteException,RemoveException;
public abstract void remove(Handle handle) throws RemoteException,RemoveException;
}
方法getEJBMetaData()返回EJBMetaData接口的引用,取得Bean的信息,EJBMetaData不是远程接口。这个类扩展了java.io.Serializable,所以可序列化,具有序列化的特性
方法getHomeHandle()返回主对象的句柄,句柄是主接口StatelessAccountHome的持久性引用,这个类扩展了java.io.Serializable,所以可序列化,具有序列化的特性,HomeHandle 对象可以传递给另一个JVM,且不传递安全信息,这样新的应用可以不使用JNDI来查找对象既可以获得这个主接口,并来创建和获得Bean实例。
方法remove()用来删除一个Bean的实例,对于一个会话Bean,执行Remove操作将引用的Bean返回到池中,由池来管理其生命周期。
一般情况下,习惯将主接口的命名规则规定为《bean-name》Home,所以我们把这个主接口类起名为StatefulAccountHome
大部分逻辑方法已经被EJBHome定义,在我们要设计的远程主接口中,不必再重新定义。值得注意的是,我们需要为这个接口定义一个create()方法,用来获得一个实例Bean的引用,返回的对象类型是组件接口类StatefulAccount。与第二节的StatelessDateHome类定义基本相同,不同的是Create()方法需要一个double类型的fund参数,当客户创建一个Bean引用时,我们将通过这个参数初始化基金帐户的余额。Fund数值的状态将由容器来维护。
StatefulAccountHome.java代码:
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;
public interface StatefulAccountHome extends EJBHome{
public StatefulAccount create(double fund) throws RemoteException,CreateException;
}
假设我们保存到D:\ejb\StatefulAccount\src\StatefulAccountHome .java
2.开发组件接口(StatefulAccount.java):
当远程用户调用主接口类生成方法(create(double))时,客户要得到一个组件的远程引用,因此EJB容器要求你为这个Bean的所有方法提供一个接口类,而类的实现则与远程主接口StatefulAccountHome 一样由容器在部署时自动生成。
组件接口扩展了avax.ejb.EJBObject接口,参考avax.ejb.EJBObject接口定义如下:
package javax.ejb;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface EJBObject extends Remote{
public abstract EJBHome getEJBHome() throws RemoteException;
public abstract Handle getHandle() throws RemoteException;
public abstract Object getPrimaryKey() throws RemoteException;
public abstract boolean isIdentical(EJBObject ejbobject) throws RemoteException;
public abstract void remove() throws RemoteException,RemoveException;
}
方法getEJBHome()返回远程主接口对象的引用
方法getHandle() 当前组件接口对象的句柄,和远程主接口的句柄HomeHandle一样,这个对象是被序列化的,所以可以保存到本地或通过RMI/IIOP协议传输给其他JVM上的客户使用,而免去JNDI查找和调用主接口的create方法,只要执行Handle.getEJBObject()方法即可取得这个Bean实例的引用。
getPrimaryKey()方法一般用于Entity Bean,如果在Session Bean中调用,抛出java.rmi.RemoteException。
方法isIdentical()用于对当前引用的Bean实例和另一Bean实例进行比较
java中如何根据查询出来的表结构自动生成bean
这个问题可以解决
你可以查出表中的字段,根据这些字段来创建一个bean类,名字可以用System.currentTimeMillis()取得唯一的,这样就可以,还有什么问题的话联系我··
:怎么用Netbean新建一个JAVA源程序
在安装netbean之前 要先安jdk 估计你应该安了。。
具体的我也不记得了,, 大体流程如下:
1.新建项目(最左边那个菜单下)-》java应用程序-》填写项目名。。 包名等(默认值也可以) 确保设置主项目 选上, 创建主类不选, 此时完成建立项目
2.新建文件(在刚刚那个菜单下)-》选择 java类, 取类名字。 然后往建好的文件中写java 代码。(public class 后的类名要和java类的文件名字相同)
3.编写完毕后,右击建好的java类文件(在项目窗口中),选择运行 OK....
如果有用么,, 加分啊。。。谢谢。。
java 的Jbean怎么做啊
首页 新闻 论坛 小组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 第二书店 程序员
搜索 | 收藏 | 打印 | 关闭
社区 》 Java 》 Web 开发
servlet如何调用bean楼主SuperKnight(一年又一年)2005-07-08 14:59:06 在 Java / Web 开发 提问
bean:封正了表单信息
jsp:调交到bean
《jsp:useBean id="bean" class="jbean.bean" scope="page"》
《jsp:setProperty name="bean" property="*"/》
可在servlet里如何把这个bean里的直取出?
package test;
import jbean.bean;
.
.
bean b=new bean();///这样写到能编译通过,但是取直为空
String name=b.getName();
String age=b.getAge();
请教
问题点数:30、回复次数:26
Top
1 楼hellwindy(夜神·月)回复于 2005-07-08 15:09:04 得分 8比如我写的一个注册页,servlet是这样写的
srw.RegisterBean reg = null;
synchronized (_jspx_page_context) {
reg = (srw.RegisterBean) _jspx_page_context.getAttribute("reg", PageContext.PAGE_SCOPE);
if (reg == null){
reg = new srw.RegisterBean();
_jspx_page_context.setAttribute("reg", reg, PageContext.PAGE_SCOPE);
}
}
reg.setUsername(username);
reg.setPass(pass1);
reg.setNickname(nickname);
...
Top
2 楼SuperKnight(一年又一年)回复于 2005-07-08 15:18:12 得分 0 1用PageContext.PAGE_SCOPE来判断要实例化bean ?bean 是在什么时候实例化的?
2synchronized多线程
3_jspx_page_context是什么?
Top
3 楼linjky()回复于 2005-07-08 15:21:35 得分 0 不理解,用了servlet,为什么要在jsp里用bean封装表单的信息呢?应该在servlet里调用bean呀
还用你要非那么用的话是不是应该把bean话在request里传到servlet,然后再用request.getParameter("beanName")取出来呀
反正我是这么认为的。
Top
4 楼wangtong408(wangtong408)回复于 2005-07-08 15:23:06 得分 0 那当然,因为你bean里面就没有数值,最好把它放入到request,session等中,那样get()方法才会起到作用
Top
5 楼wangtong408(wangtong408)回复于 2005-07-08 15:24:08 得分 5《jsp:useBean id="bean" class="jbean.bean" scope="request/session"》
《jsp:setProperty name="bean" property="*"/》
就可以了
Top
6 楼wangtong408(wangtong408)回复于 2005-07-08 15:24:33 得分 0 《jsp:useBean id="bean" class="jbean.bean" scope="request/session"》
《jsp:setProperty name="bean" property="*"/》
就可以了
Top
7 楼SuperKnight(一年又一年)回复于 2005-07-08 15:31:38 得分 0 to:linjky(),我是你那个意思,但总要先放进去在 在servlet里调用bean呀
先在我不知道,如果在servlet里掉用,bean 语法于应该怎么写
Top
8 楼linjky()回复于 2005-07-08 15:42:27 得分 17我觉得以MVC模式应该这么写。这么说吧,假如你的jsp里就有一个用户名的输入框,叫userName,你提交到login的这个servlet。你在login里这么写
String userName=request.getParameter("userName");
loginBean lb=new loginBean();
lb.setUserName(userName);
如果非要在jsp里定义bean,那就按 wangtong408(wangtong408) 的写,然后在servlet里
jbean.bean b=(jbean.bean)request.getParameter("bean");
String name=b.getName();
String age=b.getAge();
应该就可以了
我写的可能还有不清楚的,你再回贴问吧
Top
9 楼SuperKnight(一年又一年)回复于 2005-07-08 15:51:38 得分 0
to:linjky(),恩,这几句话正是我需要的太谢拉,不过有如下问题
Test.java:19: inconvertible types
found : java.lang.String
required: jbean.bean
jbean.bean b=(jbean.bean)request.getParameter("bean");
^
2 errors
不方便的话可以
msn : knight_jiping@hotmail.com
Top
10 楼linjky()回复于 2005-07-08 15:55:42 得分 0 把你的代码放出来吧,我那个request是把这里改了的public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {,你也改改看吧,主要是我不知道你的结构和文件什么的,你按自己的情况相应的改改。
我没用MSN,我也好长时间没用过QQ了,呵呵,就这里吧,反正我没事,我也是新手,就当互相帮助了
Top
11 楼SuperKnight(一年又一年)回复于 2005-07-08 15:56:59 得分 0 package test;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
***隐藏网址***
***隐藏网址***
***隐藏网址***
public class Test extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
jbean.bean b=(jbean.bean)request.getParameter("bean");
String name=b.getName();
String age=b.getAge();
PrintWriter out=response.getWriter();
out.println("《br》name is "+name);
out.println("《br》age is "+age);
out.println("《html》《body》《h1》Thiefesfsef a servlet test.《/h1》《/body》《/html》");
out.flush();
}
}
Top
12 楼SuperKnight(一年又一年)回复于 2005-07-08 15:57:56 得分 0 我有3个文件,一jsp,一个servlet,一个bean
《%@ page contentType="text/html;charset=gb2312" %》
《%@ page import="jbean.bean"%》
《jsp:useBean id="bean" class="jbean.bean" scope="request"》
《jsp:setProperty name="bean" property="*"/》
《/jsp:useBean》
《html》
《body》
《form name="test" action ="/app/Test" method="gst" 》
《input type="text" name="name"》
《input type="text" name="age"》
《input type="submit" value="enter"》
《/form》
《/body》
《/html》
Top
13 楼linjky()回复于 2005-07-08 16:07:28 得分 0 晕,就为了在servlet里显示呀,你在servlet这样写
String name=request.getParameter("name");
String age=request.getParameter("age");
PrintWriter out=response.getWriter();
out.println("《br》name is "+name);
out.println("《br》age is "+age);
这样写就成了,根本用不到bean
Top
14 楼linjky()回复于 2005-07-08 16:08:43 得分 0 还有jsp页面里的《form name="test" action ="/app/Test" method="gst" 》里的method应该等于GET
Top
15 楼SuperKnight(一年又一年)回复于 2005-07-08 16:10:23 得分 0 aiya ,
我的目的不是这样的,这只是第一步,我要接着扩展我的程序,把客户的每一个请求都对应到响应到对应的servlet里,我要学会到底怎样在servlet里获得bean的数据,
Top
16 楼SuperKnight(一年又一年)回复于 2005-07-08 16:13:30 得分 0 大哥,帮帮忙,马上就出来了,就差一步拉,咱们大热天的功夫比白费拉
Top
17 楼SuperKnight(一年又一年)回复于 2005-07-08 16:15:26 得分 0 好眼力,可那不是主要问题,我改过拉,不行
Top
18 楼linjky()回复于 2005-07-08 16:19:38 得分 0 你的bean是在jbean里吗,叫bean?把代码弄出来吧
Top
19 楼linjky()回复于 2005-07-08 16:20:38 得分 0 还要把出错的信息贴上来
Top
20 楼SuperKnight(一年又一年)回复于 2005-07-08 16:21:49 得分 0 package jbean;
public class bean implements java.io.Serializable{
private String name,age;
public void setName(String name)
{this.name=name;
}
public void setAge(String age)
{
this.age=age;
}
public String getAge()
{return this.age;
}
public String getName()
{return this.name;
}
}
Top
21 楼SuperKnight(一年又一年)回复于 2005-07-08 16:23:32 得分 0 Test.java:18: inconvertible types
found : java.lang.String
required: jbean.bean
jbean.bean b=(jbean.bean)request.getParameter("bean");
^
1 error
Top
22 楼SuperKnight(一年又一年)回复于 2005-07-08 16:25:02 得分 0
jbean.bean b=(jbean.bean)request.getServletContext().getParameter("bean");
我试图这样,也行
Top
23 楼linjky()回复于 2005-07-08 16:34:39 得分 0 那是在Application范围下,比较浪费资源好像
Top
24 楼linjky()回复于 2005-07-08 16:36:27 得分 0 我上面的话错了,我看错你的帖子了
Top
25 楼SuperKnight(一年又一年)回复于 2005-07-08 16:38:37 得分 0 jbean.bean b=(jbean.bean)request.getAttribute("bean");
这样是可以编译,但运行时
java.lang.NullPointerException
test.Test.doGet(Test.java:22)
***隐藏网址***
***隐藏网址***
Top
26 楼SuperKnight(一年又一年)回复于 2005-07-08 16:41:21 得分 0 jbean.bean b=(jbean.bean)request.getServletContext().getParameter("bean");
编译也不对,钢材打错拉

更多文章:
在from子句中可以出现(如何在from 子句中嵌套查询下面的语句在access中出错!)
2026年10月11日 05:20
countif函数统计个数怎么用(countif函数怎么用 详解Excel中countif函数的使用方法)
2026年10月11日 03:30
正则匹配数字之前的字符(正则表达式如何匹配前面是数字、中间是“/”、后面也是数字,就像2/3专业的模式)
2026年10月11日 03:00
orlnsertbootmediinselected(我电脑开机显示这个是什么意思or insert boot media in select)
2026年10月10日 23:00
display的用法(display是什么意思 详解display的含义和用法)
2026年10月10日 22:00
html全部居中代码(怎么让网页居中显示,html如何让网页居中)
2026年10月10日 21:10





