EJB初学日记(3)

今天主要是看了一下拦截器的实现,在EJB3.0里面,实现拦截非常简单.加一个注释就可以了,这样就可以随时监视某个方法的调用了,拦截器可以是拦截某一个方法也可以是拦截一个类的所有方法的.具体如下

 首先写一个拦截器方法,拦截器方法并不需要实现什么接口,只要符合一定的规范就可以了,

规范是:  Object xxxxx(InvocationContext context)throws Exception,其中xxxxx是方法名,可以自己取.然后用@AroundInvoke来注释这个方法

java 代码
  1. /*  
  2.  * MyInterceptor.java  
  3.  *  
  4.  * Created on 2007年9月8日, 上午12:04  
  5.  *  
  6.  * To change this template, choose Tools | Template Manager  
  7.  * and open the template in the editor.  
  8.  */  
  9.   
  10. package lbf.interceptor;   
  11.   
  12. import java.lang.reflect.Method;   
  13. import java.util.Date;   
  14. import javax.interceptor.AroundInvoke;   
  15. import javax.interceptor.InvocationContext;   
  16. import lbf.test1.Person;   
  17.   
  18. /**  
  19.  *  
  20.  * @author Admin  
  21.  */  
  22. public class MyInterceptor {   
  23.        
  24.     /**  
  25.      * Creates a new instance of MyInterceptor  
  26.      */  
  27.     public MyInterceptor() {   
  28.     }   
  29.     @AroundInvoke  
  30.     public Object myInter(InvocationContext context)throws Exception{   
  31.         if(context.getMethod().getName().equals("insertPerson")){   
  32.             System.out.println("插入新的Person被调用了");   
  33.         }else{   
  34.             System.out.println("其它方法被调用了");   
  35.         }   
  36.         return context.proceed();   
  37.     }   
  38. }   

然后,同样是声明远程接口和实现它的类,为了让拦截显得更有效果,我们声明一个实体Bean,把一个实体插入数据库是我们的工作,然后我们再拦截它,看看会怎么样

java 代码
  1. /*  
  2.  * Person.java  
  3.  *  
  4.  * Created on 2007年9月7日, 下午10:46  
  5.  *  
  6.  * To change this template, choose Tools | Template Manager  
  7.  * and open the template in the editor.  
  8.  */  
  9.   
  10. package lbf.test1;   
  11.   
  12. import java.io.Serializable;   
  13. import java.util.Date;   
  14. import javax.persistence.Column;   
  15. import javax.persistence.Entity;   
  16. import javax.persistence.GeneratedValue;   
  17. import javax.persistence.GenerationType;   
  18. import javax.persistence.Id;   
  19. import javax.persistence.Temporal;   
  20. import javax.persistence.TemporalType;   
  21.   
  22. /**  
  23.  * 实体类 Person  
  24.  *   
  25.  * @author Admin  
  26.  */  
  27. @Entity  
  28. public class Person implements Serializable {   
  29.   
  30.     @Id  
  31.     @GeneratedValue(strategy = GenerationType.AUTO)   
  32.     @Column(name="PersonID",nullable=false)   
  33.     private Integer id;   
  34.     @Column(name="PersonName",nullable=false,length=5)   
  35.     private String name;   
  36.     @Column(name="PersonAge")   
  37.     private int age;   
  38.     @Column(name="PersonSex",nullable=false,length=2)   
  39.     private String sex;   
  40.     @Column(name="PersonPhone",nullable=false,length=11)   
  41.     private String phone;   
  42.     @Column(name="PersonAddress",nullable=false,length=50)   
  43.     private String address;   
  44.     @Temporal(value = TemporalType.DATE)   
  45.     @Column(name="PersonBirthday")   
  46.     private Date birthday;   
  47.        
  48.     /** Creates a new instance of Person */  
  49.     public Person() {   
  50.     }   
  51.   
  52.     /**  
  53.      * 获取此 Person 的 id。  
  54.      * @return id  
  55.      */  
  56.     public Integer getId() {   
  57.         return this.id;   
  58.     }   
  59.   
  60.     /**  
  61.      * 将此 Person 的 id 设置为指定的值。  
  62.      * @param id,新建 id  
  63.      */  
  64.     public void setId(Integer id) {   
  65.         this.id = id;   
  66.     }   
  67.   
  68.     /**  
  69.      * 返回对象的散列代码值。该实现根据此对象  
  70.      * 中 id 字段计算散列代码值。  
  71.      * @return 此对象的散列代码值。  
  72.      */  
  73.     @Override  
  74.     public int hashCode() {   
  75.         int hash = 0;   
  76.         hash += (this.id != null ? this.id.hashCode() : 0);   
  77.         return hash;   
  78.     }   
  79.   
  80.     /**  
  81.      * 确定其他对象是否等于此 Person。当且仅当  
  82.      * 参数不为 null 且该参数是具有与此对象相同 id 字段值的 Person 对象时,  
  83.      * 结果才为 true。  
  84.      * @param 对象,要比较的引用对象  
  85.      * 如果此对象与参数相同,则 @return true;  
  86.      * 否则为 false。  
  87.      */  
  88.     @Override  
  89.     public boolean equals(Object object) {   
  90.         // TODO: Warning - this method won't work in the case the id fields are not set   
  91.         if (!(object instanceof Person)) {   
  92.             return false;   
  93.         }   
  94.         Person other = (Person)object;   
  95.         if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) return false;   
  96.         return true;   
  97.     }   
  98.   
  99.     /**  
  100.      * 返回对象的字符串表示法。该实现根据 id 字段  
  101.      * 构造此表示法。  
  102.      * @return 对象的字符串表示法。  
  103.      */  
  104.     @Override  
  105.     public String toString() {   
  106.         return "lbf.test1.Person[id=" + id + "]";   
  107.     }   
  108.   
  109.     public String getName() {   
  110.         return name;   
  111.     }   
  112.   
  113.     public void setName(String name) {   
  114.         this.name = name;   
  115.     }   
  116.   
  117.     public String getSex() {   
  118.         return sex;   
  119.     }   
  120.   
  121.     public void setSex(String sex) {   
  122.         this.sex = sex;   
  123.     }   
  124.   
  125.     public String getPhone() {   
  126.         return phone;   
  127.     }   
  128.   
  129.     public void setPhone(String phone) {   
  130.         this.phone = phone;   
  131.     }   
  132.   
  133.     public String getAddress() {   
  134.         return address;   
  135.     }   
  136.   
  137.     public void setAddress(String address) {   
  138.         this.address = address;   
  139.     }   
  140.   
  141.     public Date getBirthday() {   
  142.         return birthday;   
  143.     }   
  144.   
  145.     public void setBirthday(Date birthday) {   
  146.         this.birthday = birthday;   
  147.     }   
  148.   
  149.     public int getAge() {   
  150.         return age;   
  151.     }   
  152.   
  153.     public void setAge(int age) {   
  154.         this.age = age;   
  155.     }   
  156.        
  157. }   
java 代码,PersonDAO的实现
java 代码
  1. /*  
  2.  * PersonBean.java  
  3.  *  
  4.  * Created on 2007年9月7日, 下午11:10  
  5.  *  
  6.  * To change this template, choose Tools | Template Manager  
  7.  * and open the template in the editor.  
  8.  */  
  9.   
  10. package lbf.test1;   
  11.   
  12. import java.util.List;   
  13. import javax.ejb.Remote;   
  14. import javax.ejb.Stateless;   
  15. import javax.interceptor.Interceptors;   
  16. import javax.persistence.EntityManager;   
  17. import javax.persistence.PersistenceContext;   
  18. import javax.persistence.Query;   
  19. import lbf.interceptor.MyInterceptor;   
  20.   
  21. /**  
  22.  *  
  23.  * @author Admin  
  24.  */  
  25. @Remote(PersonDAO.class)   
  26. @Stateless  
  27. @Interceptors({MyInterceptor.class})   
  28. public class PersonBean implements PersonDAO{   
  29.     @PersistenceContext  
  30.     private EntityManager em;   
  31.     /** Creates a new instance of PersonBean */  
  32.     public PersonBean() {   
  33.     }   
  34.   
  35.     public boolean insertPerson(Person person) {   
  36.         try{   
  37.            em.persist(person);   
  38.         }catch(Exception exe){   
  39.             exe.printStackTrace();   
  40.             return false;   
  41.         }   
  42.         return true;   
  43.     }   
  44.   
  45.     public String getPersonNameByID(int personid) {   
  46.         Person p=em.find(Person.class,personid);   
  47.         return p.getName();   
  48.     }   
  49.   
  50.     public boolean updatePerson(Person person) {   
  51.         try{   
  52.             em.merge(person);   
  53.         }catch(Exception exe){   
  54.             exe.printStackTrace();   
  55.             return false;   
  56.         }   
  57.         return true;   
  58.     }   
  59.   
  60.     public Person getPersonByID(int personid) {   
  61.         return em.find(Person.class,personid);   
  62.     }   
  63.   
  64.     public List getPersonList(int max, int whichpage) {   
  65.            try {    
  66.             int index = (whichpage-1) * max;    
  67.             Query query = em.createQuery("from Person p order by personid asc");    
  68.             List list = query.setMaxResults(max).    
  69.                                 setFirstResult(index).    
  70.                                 getResultList();    
  71.             em.clear();//分离内存中受EntityManager管理的实体bean,让VM进行垃圾回收    
  72.             return list;    
  73.                 
  74.         } catch (Exception e) {    
  75.             e.printStackTrace();    
  76.             return null;    
  77.         }             
  78.     }   
  79.        
  80. }   
java 代码
  1. /*  
  2.  * PersonDAO.java  
  3.  *  
  4.  * Created on 2007年9月7日, 下午11:10  
  5.  *  
  6.  * To change this template, choose Tools | Template Manager  
  7.  * and open the template in the editor.  
  8.  */  
  9.   
  10. package lbf.test1;   
  11.   
  12. import java.util.Date;   
  13. import java.util.List;   
  14.   
  15. /**  
  16.  *  
  17.  * @author Admin  
  18.  */  
  19. public interface PersonDAO {   
  20.        
  21.     public boolean insertPerson(Person person);   
  22.     public String getPersonNameByID(int personid);   
  23.     public boolean updatePerson(Person person);   
  24.     public Person getPersonByID(int personid);   
  25.     public List getPersonList(int max,int whichpage);   
  26. }   

 

所有的类都定义好了,我们现在开始试用拦截器了

我们声明一个主类去调用PersonBean的一些方法

java 代码
  1. /*  
  2.  * Main.java  
  3.  *  
  4.  * Created on 2007年9月7日, 下午10:37  
  5.  *  
  6.  * To change this template, choose Tools | Template Manager  
  7.  * and open the template in the editor.  
  8.  */  
  9.   
  10. package lbf.client;   
  11.   
  12. import java.util.Date;   
  13. import java.util.Properties;   
  14. import javax.naming.InitialContext;   
  15. import lbf.test1.Person;   
  16. import lbf.test1.PersonDAO;   
  17.   
  18. /**  
  19.  *  
  20.  * @author Admin  
  21.  */  
  22. public class Main {   
  23.     private InitialContext ctx;   
  24.     /** Creates a new instance of Main */  
  25.     public Main() {   
  26.         initContext();   
  27.     }   
  28.     private void initContext(){   
  29.         try{   
  30.             Properties props = new Properties();   
  31.             props.setProperty("java.naming.factory.initial",   
  32.                     "org.jnp.interfaces.NamingContextFactory");   
  33.             props.setProperty("java.naming.provider.url", "localhost:1099");   
  34.             props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");   
  35.                
  36.             ctx = new InitialContext(props);   
  37.         }catch(Exception exe){   
  38.             exe.printStackTrace();   
  39.         }   
  40.     }   
  41.     private void doPerson(){   
  42.         try{   
  43.             PersonDAO dao=(PersonDAO)ctx.lookup("PersonBean/remote");   
  44.             Person pp=new Person();   
  45.             pp.setAddress("香莲里33号20C");   
  46.             pp.setAge(20);   
  47.             pp.setBirthday(new Date());   
  48.             pp.setName("千里冰封");   
  49.             pp.setPhone("12536214");   
  50.             pp.setSex("男");   
  51.             System.out.println("成功吗?"+dao.insertPerson(pp));   
  52.         }catch(Exception exe){   
  53.             exe.printStackTrace();   
  54.         }   
  55.     }   
  56.     /**  
  57.      * @param args the command line arguments  
  58.      */  
  59.     public static void main(String[] args) {   
  60.         // TODO code application logic here   
  61.         Main main=new Main();   
  62.         main.doPerson();   
  63.     }   
  64.        
  65. }   

 

 

在我们执行Main的时候,会看到JBOSS的标准输出会输出一句

"插入新的Person被调用了"

如果我们调用其它的方法,就会输出"其它方法被调用了"

到这里,我想到一个问题,我们拦截的时候只是为了输出这句话吗,我能不能拦截一些别的东西呢,比如,我保存Person的时候,如果Person的姓名不合法,我可不可以检查一下,然后再插入别的,或者我直接换掉原来的调用,调用我自己的东西.行吗?还是试一下先吧,我们把myInter方法换成如下的样子

java 代码
  1. @AroundInvoke  
  2.     public Object myInter(InvocationContext context)throws Exception{   
  3.         if(context.getMethod().getName().equals("insertPerson")){   
  4.             System.out.println("插入新的Person被调用了");   
  5.             Method m=context.getMethod();   
  6.             Person person=new Person();   
  7.             person.setAddress("被换成的地址");   
  8.             person.setAge(10);   
  9.             person.setBirthday(new Date());   
  10.             person.setName("被换的名字");   
  11.             person.setPhone("1380606");   
  12.             person.setSex("男");   
  13.           return  m.invoke(context.getTarget(),person);   
  14.         }else{   
  15.             System.out.println("其它方法被调用了");   
  16.         }   
  17.         return context.proceed();   
  18.     }  

加了几句自己的东东,然后直接把要调用的Method取出来,自己去调用它.然后返回它所应该返回的东西

这个时候,你会发现,当你在调用PersonBean上的insertPerson的时候,你自己要插入的Person被我们改了,插入的是我们拦截器里面的Person.

使用拦截器如果只能这样的话,那岂不是也不太好,想像一下,如果我写一个类的时候,没有使用@Interceptors来注释它使用哪个拦截器,后来我又想拦截它了,岂不是要重新注释一下编译一下然后再布署?这样岂不是太麻烦了.有没有别的方法呢

方法当然有,那就是回归到最原始的用XML方法来配置,用XML方法配置以后,就不管你的Bean有没有使用@Interceptors来注释,它都会按照你声明的内容来进行拦截了,这样就比直接用注释灵活性大了很多了.XML的声明如下

xml 代码
  1. xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <ejb-jar xmlns = "http://java.sun.com/xml/ns/javaee"    
  4.          version = "3.0"    
  5.          xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"    
  6.          xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd">  
  7.     <assembly-descriptor>  
  8.         <interceptor-binding>  
  9.             <ejb-name>PersonBeanejb-name>  
  10.             <interceptor-class>lbf.interceptor.MyInterceptorinterceptor-class>  
  11.         interceptor-binding>  
  12.     assembly-descriptor>  
  13. ejb-jar>  

这个XML名字叫做ejb-jar.xml,布署的时候,要把它放在META-INF文件夹里面.所有可以用注释来解决的,其实都可以用XML来配置,EJB3.0之前就是因为XML配置太麻烦才被人说的,我们也不希望完全使用XML来配置,但是在有些情况下,用XML来配置确实是比较灵活.不像用注释配置是硬编码class文件里面去的,如果要改的话,还得用源代码重新编译一下.而XML要改就方法多了,改了以后重新打一下包就可以了,所以是选择注释来配置还是XML来配置,就要看具体的要求了.

决策变量乘积项的线性化 介绍了决策变量相乘情况下的线性化,并用案例进行线性化演示,其中针对连续变量相乘的情况介绍了McCormick包络的近似线性化方法 阅读详情

相关推荐

FPGA以太网通信实战(一):实现MDIO接口驱动,掌控PHY芯片的钥匙

本文介绍了以太网通信技术及其核心组件。首先概述了以太网的发展历程,从标准以太网(10Mbps)到万兆以太网(10Gbps)的技术演进。重点分析了以太网接口的两大核心部件:MAC控制器负责数据链路层协议处理,PHY芯片负责物理信号转换和连接管理。文章详细解读了MDIO接口规范,包括帧格式和读写时序,并以YT8531 PHY芯片为例,介绍了其寄存器配置方法。最后设计了一个FPGA实现方案,通过MDIO接口完成PHY芯片的软复位和状态监测功能,并利用LED指示灯实时显示网络连接速率。

weixin_64402689的博客 1661

[EJB:011008]Unable to bind EJB Home Interface to the JNDI name: BusinessDelegateBean.

1  部署DM-core 的weblogic老是出问题,部署不了?2014-08-04 后台报错: 下午12时50分41秒 GMT> 下午12时50分41秒 GMT> 下午12时50分41秒 GMT> Mon Sep 19 23:06:54 PDT 2005 641358 WebLogic XMLX Module 8.1 SP5  M

Coder Ben 1853

解决用VScode写中文注释,Vivado打开之后是乱码的方法

这样就解决了中文注释乱码的问题,此外如果使用notepad++写verilog代码的话直接在notepad++上面将编码格式改为ANSI格式即可,更加方便快捷,所以此方法仅针对习惯用VScode写Verilog的同学,如果有其他好办法的话欢迎评论区补充。首先,VScode中的中文默认编码格式是UTF-8,然后Vivado的编码格式是vivado 默认的应该是ANSI编码格式,刚开始我先按照网上说明的,将VScode中的编码格式改为GBK格式(点击右下角->点击通过编码保存)。

weixin_50573305的博客 5810

真正解决方案: A bean with that name has already been defined in null and overriding is disabled.

A bean with that name has already been defined

极客星云-优快云博客 6万+

《AFSim 2.9中文参考手册》

本栏目将对《AFSim 2.9中文参考手册》进行持续更新,欢迎关注交流!对本文或者AFSIM相关内容感兴趣的朋友,可私心联系作者。《AFSim 2.9中文参考手册》内容概览。

henggesim的博客 1万+

Error: Flash Download failed - Target DLL has been cancelled

由于换了新电脑,keil重装了下,然而之前的MCU的支持包没有安装,以及一些其他的问题,导致可以编译但是不能将程序烧录到单片机中。现整理一下解决思路: 1、将支持包下载并添加: 找到你需要用的MCU的具体型号: 例如: 点击网址,下载安装包,或者在csdn等其他网址下载安装包,将下载好的pack包放到keil5的安装目录下的.Download中: 点击file中的import,将路径选择到.........

hanhan的博客 5万+

EJB初学日记(1)

2007年10月10日 07:40:00 今天终于还是下定决心看看EJB,看着SPRING看了两天,觉得一点头绪都没有,我不是一个讲究速成的人,但是总是感觉和它们的理念不太一样,唉,真可怜,都怪自己,初学JAVA的时候就把J2SE看得太重了.在学习了J2SE一整年之后,发现JAVA的应用还远远没有掌握,我学习一年的结果就是刚刚对JAVA有所了解而已,回首这一年的路,挺艰难的,但 是现在以一

秦梦瑶的专栏 444

学Simulink--决策规划场景实例:基于Simulink的智能车辆行为决策仿真

本文基于Simulink平台构建智能车辆变道决策仿真系统,采用MOBIL算法实现"决策-规划-执行"全流程。系统包含自车动力学模型、环境感知模块(含5%噪声)、决策控制器和轨迹规划模块,通过五次多项式实现平滑变道。仿真验证了三种典型工况:正常变道(成功率100%)、邻车拒绝让行和紧急避障,各项指标均满足要求(TTC>3s,横向加速度<2m/s²,决策周期<100ms)。文章详细介绍了建模步骤、核心算法实现和参数配置方法,并提出了强化学习、多车协同等优化方向。该模型为智能

amy_mhd的博客 153

EJB初学日记(2)

其实在学习EJB之前,就听说过EJB,有人说他很复杂,也有人说一般般而已,但是几乎所有的人都说EJB3.0确实是简单了许多. 一般讲起JAVA EE,一般人都认为是应用在网页里面的,甚至有人把JAVA EE和JSP等同起来,要知道,JAVA EE是一个很庞大的结构,而JSP只是里面一部份中的一部份而已. 今天我就把JAVA EE的EJB应用到JAVA SE中看一看,在JBOSS里面布署好EJB,...

千里冰封 145

【以太网硬件一】802.3xx标准怎么这么多?它们有什么关系?

IEEE 802.3标准发展历史简介

highman110的博客 5017

智能车图像处理22-进阶篇14--小s的判断

这篇文章中主要讲述智能车图像处理中 : 小s的判断方法。

taiyuezyh的博客 2568

EJB初学日记(4)

2007年10月10日 07:09:00 关于session bean的一些问题 EJB里面,session bean是占了挺重要的地位的,一些重要的事情都是交给session bean来处理的session BEAN一般用于操作一些对外的方法,供客户调用.会话BEAN分两种,一种 是有状态的会话BEAN,一种 是无状态的会话BEAN,它们有什么不同呢?有状态的会话BEAN,会记录每一个调

秦梦瑶的专栏 469

华为OD机考双机位C卷 - 完美走位 (Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 完美走位(OD上机考试双机位C卷)。提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。

算法大师! 1125

EJB初学日记(6)

2007年10月10日 07:08:00 实体BEAN的关联 今天自己写了一个例子,有关实体BEAN的关联问题,我写的这个例子是一对多的情况,一是人,多是狗,一个人可以养多条狗,每条狗都必须有一个主 人,在删除主人的时候,狗就没有存在的必要了,所以狗也要跟着删除,可是删除狗的时候,主人却可以在.一开始我实现的时候,删除狗的操作是错误的,我以为 直接把Person里面的Dog删掉,然后更新

秦梦瑶的专栏 406

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

EJB初学日记(6)

实体BEAN的关联 今天自己写了一个例子,有关实体BEAN的关联问题,我写的这个例子是一对多的情况,一是人,多是狗,一个人可以养多条狗,每条狗都必须有一个主 人,在删除主人的时候,狗就没有存在的必要了,所以狗也要跟着删除,可是删除狗的时候,主人却可以在.一开始我实现的时候,删除狗的操作是错误的,我以为 直接把Person里面的Dog删掉,然后更新Person就可以了,谁知不是这样的,你在增加...

千里冰封 147

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

EJB初学日记(5)

以前看到一本书上写的,有关定义实体BEAN的一些细节,直到今天才知道其中的差别 代码1: /*     * Test.java     *     * Created on 2006年12月15日, 上午12:06     *     * To change this template, choose Tools | Template Manager     * and open the te...

千里冰封 139

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

J2EE初学

今天终于还是下定决心看看EJB,看着SPRING看了两天,觉得一点头绪都没有,我不是一个讲究速成的人,但是总是感觉和它们的理念不太一样,唉,真可怜,都怪自己,初学JAVA的时候就把J2SE看得太重了. 在学习了J2SE一整年之后,发现JAVA的应用还远远没有掌握,我学习一年的结果就是刚刚对JAVA有所了解而已,回首这一年的路,挺艰难的,但是现在以一个过来人的姿态去看的时候,我又学得很庆幸.因为我没...

千里冰封 161

Java日记(1) 一. 认识Java

Java日记(1)Date:2004-2-25标题:初涉Java注:出水奇芭问有源,E网情深觅仙踪。一.     认识JavaJava的由来和发展历程这里不再累述,顺便找本Java方面的书籍都会有介绍。Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标

brightsome的专栏 932
上一篇: EJB初学日记(2)
下一篇: EJB初学日记(3)
hadeslbf
博客等级 码龄20年 1粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值