绝缘材料
Struts2+Hibernate4+Spring4的开发环境主要指的是使用Spring的IoC来控制Struts2中的Action和Hibernate的SessionFactory,因此搭建的两个方面分别是Spring管理Struts和Spring管理Hibernate。Spring管理Struts的时候我们需要一个struts2-spring-plugin包,有了这个包,struts.xml中
由于course project需要,我最近看了一下Mahout的推荐实现。最初看到的是这篇文章。里面的代码毫无问题,不过引包的时候错误重重。因此重新写一下,希望能帮助到有同样问题的同学。废话不多说,上代码:public static void main(String[] args) throws Exception {
HQL是Hibernate的面向对象的查询语句。使用HQL,首先要得到session对象,然后编写HQL,以HQL语句为参数调用session的createQuery方法创建查询对象。如果HQL包含参数,则调用Query的set方法为参数赋值。调用Query对象的list或者uniqueResult方法返回查询结果列表(持久化实体集)。
Hibernate中的继承指的是实体类之间的继承。能够继承属性。本例中书中使用了Person、Customer、Manager和Employee这四个实体类来距离。其中Person衍生出了Customer和Employee,而Employee又衍生出了Employee,所以说Employee的属性是最多的。除此之外,Person还有一个组件属性Address。Customer与Employee是N
占坑
双向1-N关联对于1-N关联,Hibernate推荐使用双向关联,而且不要让1的一端控制关联关系,而使用N端控制。双向的1-N关联与N-1关联完全相同,两端都需要增加对关联属性的访问,N的一端增加引用到关联实体的属性,1的一端增加集合属性,集合元素为关联实体。无连接表的双向1-N关联N端使用@ManyToOne来修饰代表关联实体的属性,1端使用OneToMany来修饰。由于不希望1端控制关联关系,
之前我们接触的,都是独立的持久化类,最多也就是某一个集合作为属性,或者集合里面套集合,或者自定义一个组件作为属性。实际上很少有完全独立的对象,对象间往往需要互相访问。这种相互的联系我们成为关联关系。单向N-1关联这种关联关系非常常见,比如说多个人对应同一个住址,我们只需要通过人找地址,而不需要去找某个地址都有哪几个人。为了让两个持久化类支持这种映射关系,我们需要在N添加一个属性,引用1端的关联实体
当持久化的属性并不是基本数据类型,也不是字符串,日期等变量,而是一个复杂类型的对象,这个对象就称为组件属性。在持久化过程中,它仅仅被当做值类型,而并非引用另一个持久化类实体。组件属性的类型可以是任意的自定义类。@Entity @Table(name="persona_inf") public class PersonA { @Id @Column(name
映射集合属性集合属性也非常常见,例如每个人的考试成绩是一个典型的Map结构。集合属性份两种,一种是单纯的集合,例如LIst、Set或者数组。另一种是Map结构的集合属性,每个属性值都有对应的key映射。Hibernate要求持久化集合值字段必须声明为接口,这是因为当程序持久化某个实例时,Hibernate会自动把程序中的集合实现类替换成Hibernate自己的集合实现类。两个持久化对象不能共享同一
启动Spring容器对于使用Spring的Web应用,我们无需手动创建Spring容器,而是通过配置文件声明式地创建,所以我们需要在web.xml中配置一下,借助ServletContextListener监听器来完成。该监听器嫩巩固在Web应用启动的时候回调自定义方法,该方法能够可以启动Spring容器。Spring提供了一个ContextLoaderListener,该监听器实现了Servle
Spring3.1新增了一种缓存机制,这种缓存机制与Spring容器无缝结合在一起,可以对容器中的任意bean或bean的方法增加缓存。Spring的缓存级别更高,可以在控制器组件或业务逻辑组件级别进行缓存,这样应用完全无需重复调用底层的DAO。启动Spring缓存xml中有一个cache命名空间专门用来配置缓存。启动缓存需要在xml中添加如下一行:<cache:annotation-dri
AOP能够横向地看待程序,将与逻辑无关的功能,比如说日志,事物等从代码中抽离出来。使用AspectJ实现AOP安装Aspect,配置好环境变量后,用记事本写一个类:public class HelloWorld { public void sayHello(){ System.out.println("Hello AspectJ!"
Listener可以用来监听不同的web事件。使用Listener,首先要有Listener实现类,然后要在web.xml中配置Listener(或者通过注解)。常用的Web事件监听器接口如下:ServletContextListener:监听web应用的启动和关闭ServletContextListener:监听ServletContext范围(application)内容属性的改变Servle
跟它的名字一样,filter能够拦截特定的用户请求或者相应,并对这些东西进行处理。虽然很少用,不过也可以对request进行response。filter可以拦截多个请求相应,一个请求响应也可以被多个filter拦截。使用filter只需要创建filter处理类,然后在xml中配置filter。创建filter类必须实现Filter接口,里面要有三个方法:init用于初始化filter;destr
jsp标签具有与html标签一样的格式,可以用来代替jsp中的Java脚本,使代码简介。使用自定义标签之前需要建立一个*.tld文件,每个文件对应一个标签库,里面可以包含很多的自定义标签。每一个标签都必须由一个继承了SimpleTagSupport类的实现类来实现。类里面的属性必须有get与set方法。需要重写doTag方法,实际上此方法真正完成标签的工作。创建tld文件 创建的时候最好
Servlet被称为服务器端小程序,是运行在服务器端的用于处理响应客户端请求的程序。能够处理客户端的GET、POST、PUT、DELETE请求。常用的只有get与post,并且需要在servlet中重写doGet与doPost方法才可以。大部分时候Servlet对所有请求的响应都一样,所以只需要重写Service方法即可。Servlet中的init方法用于初始化Servlet资源,destroy方
之所以叫它们对象,是因为它们是Servlet API接口的实例。而之所以叫内置,是因为jsp完成了对他们的初始化。在jsp对应的servlet文件中的_jspService()方法中这些实例将会被创建。这9个内置对象分别为:application、config、exception、out、page、pageContext、request、response、session。虽然这里也出现了reque
上一节中的编译指令是给Servelt引擎看的,而这一节中提到的动作指令,则可以理解为java代码的一种简化写法。这些指令的目的是,用类似于html标签元素的代码,来代替jsp中的java脚本,使得整个页面简单明了。当然,在转译之后,这些动作指令会变成标准的java代码,保存在对应的Servlet中。JSP主要的动作指令有7个。forward:用于将页面响应转发到另外的html,jsp或者servl
JSP编译指令是通知JSP引擎的信息,它不直接生成输出。常见的编译指令有如下三个:page指令此指令是对整个jsp页面的描述指令。语法格式如下:《% @page [language="Java"] [extends="package.class"] [import= "package. class|package. *},…"] [session="true
上一节中我们讲到,JSP是由静态的html标签与嵌入的内容组成。而嵌入内容的实现,则是由JSP的四种基本语法完成。jsp注释<%--我是jsp注释--%> <!--我是html注释-->jsp声明。可以用来声明变量和方法。服务器会自动将这些声明转变为servlet的成员变量或者成员方法,因此这些变量和方法可以用public,private等修饰,也可以使用sta
当用户向某一个Servlet页面发送请求的时候,Servlet页面会以输出流的形式生成html页面。由于所有的字符代码都必须通过out.write生成,所以Servlet的开发效率极为底下。而为了解决此问题,JSP应运而生。JSP实质上就是简化了的Servlet,可以说一个JSP就是一个Servlet实例。JSP页面由静态的html标签元素与镶嵌其中的java片段组成。html代表了静态的内容,而
Spring把文件,二进制流统称为资源。Spring改价了访问资源的策略,它提供了一个Resource接口,该接口提供了更强的资源访问能力,Spring架构本身大量使用了Resource来访问底层数据。Spring将所有形式的资源表现概括成一个Resource接口。如下所示(下面的接口定义是被简化的,有意省略了一些东西,以便突出重点):public interface Reso
我们也可以使用Annotation来代替XML配置文件。似乎注解是主流啊!搜索Bean类我们可以使用注解来为架构指明各个java类都是什么。@Component标注为一个普通的Spring Bean类。@Controller标注一个控制器组件类。@Service标注一个业务逻辑组件类。@Repository标注一个DAO组件类有了这些注解,架构已经能够知道那都是些什么java类了。接下来我们还要告
我们可以通过Bean后处理器跟容器后处理器来拓展Ioc容器。前者能增强bean的功能,后者能增强容器功能。Bean后处理器这是一种特殊的bean,不对外提供服务,也无需id属性,只负责对其它的正常bean执行后处理,比如为容器中的bean生成代理等。它会在正常bean创建后被创建,必须实现BeanPostProcessor接口。里面的两个方法会在目标bean初始化之前之后被调用。使用Applica
SpEL是Spring的表达式语言,与JSP2的El语言类似,它可以在运行时查询和操作对象图,支持方法调用和基本字符串模板函数。它能够独立于Spring容器使用,可以以在Annotation和xml中使用。使用Expression接口进行表达式求值SpEL中的ExpressionParser接口的实例能够解析一个SpEL表达式,并且返回一个Expression对象。Expression的实例代表的
我们可以使用XML Schema的配置方式来简化xml文件的配置。p:简化设值注入p:与property子元素作用相同,用于设值注入。若想使用p,则xml文件中需要引入对p的说明,一般自动生成的xml都会自带。xmlns:p="http://www.springframework.org/schema/p"<bean id="chinese" class="com.cm.
为了方便与可读性,组件与组件2之间的耦合使用配置文件依赖注入,而基本类型的成员变量则直接爱代码中设置。有的时候bean的属性值可能是某个方法的返回值,或者类的field值,或者是另一个对象的get方法的返回值。Spring支持将任意方法的返回值、类或者对象的Feild值,其他bean的get返回值直接定义成容器中的一个bean。获取其他bean的属性值PropertyPathFactoryBean
spring可以管理单例bean的生命周期,知道何时被创建,核实初始化,何时销毁,也可以进行某些通用资源申请,销毁前资源回收。对于prototype,容器只负责创建,之后就撒手不管自生自灭。容器不知道一共创建了多少prototype,也不知道他们什么时候会被销毁,所以容器没法管理prototype。管理bean的生命周期有如下两个时机:注入依赖关系后即将销毁bean前依赖关系注入后的行为通过设定i
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号