- 浏览: 489827 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (234)
- aom学习 (7)
- 2007 (19)
- Java基础 (58)
- spring (7)
- linux (4)
- VMware (3)
- 网络 (3)
- 开发工具类 (14)
- webservices (2)
- 其他 (14)
- database (16)
- hibernate (8)
- jsp_html (14)
- jbpm (5)
- jquery (1)
- 办公软件 (6)
- struts2(webwork) (6)
- web服务器 (2)
- 项目管理 (7)
- 编程规范 (1)
- ps (2)
- JAVA工具类API (4)
- sun_java1.6 (6)
- 金融ISO8583 (1)
- SFTP (1)
- android (1)
- Linux_ftp_命令行下下载文件get与上传文件put的命令应用 (1)
- 公钥+私钥 (1)
- jvm (1)
最新评论
-
fyw2011_huawei:
有没有办法让谷歌也实现该功能? 因为在谷歌上调试时windo ...
window之createPopup方法 -
技术求:
好,flush 时才是execute
浅谈Hibernate的flush机制 -
xyzc2011:
言简意赅
公钥+私钥 -
smith789:
...
Windows 不能在 本地计算机 启动 OracleDBConsoleorcl -
zengshaotao:
肯定,因为要用到
jquery.js与自己的扩展的.js在导入时有先后顺序
注解的力量-----Spring 2.5 JPA hibernate 使用方法的点滴整理(五):使用@Component 来简化bean的配置
<script></script> 虽然我们可以通过 @Autowired 在 Bean 类中使用自动注入功能,但是 Bean 还是在 applicatonContext.xml 文件中通过 <bean> 进行定义 —— 在前面的例子中,我们还是在配置文件中定义 Bean,通过 @Autowired为 Bean 的成员变量、方法形参或构造函数形参提供自动注入的功能。
新的applicaitonContext.xml 配置文件中蓝色的部分就是原来的<bean>的注入方式,现在已经给屏蔽了。不需要再写。而红色部分就是使用了<context:component-scan base-package ="com.firemax"/> ,让spirng自动搜索,然后注入。
扫描过滤方式
通过 @Scope 指定 Bean 的作用范围
在所有的JPOPO中,我们可以使用@Entity 这个注解来注入 JOPO。这样我们在 Persistent.xml中就不需要在 定义哪些POJO的类了。
那么能不是也可以通过注解定义 Bean,从 XML 配置文件中完全移除 Bean 定义的配置呢?
答案是肯定的,我们通过 Spring 2.5 提供的 @Component 注释就可以达到这个目标了。
修改Bean的java类的代码如下,在类名前面加上 @Component注解
- package com.firemax.test.service;
- import java.util.ArrayList;
- import java.util.Iterator;
- import java.util.List;
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
- import org.dom4j.Document;
- import org.dom4j.DocumentHelper;
- import org.dom4j.Element;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Component;
- import com.firemax.test.hibernate.AlcorTCitys;
- import com.firemax.test.hibernate.AlcorTCitysDAO;
- import com.firemax.test.hibernate.AlcorTCountries;
- import com.firemax.test.hibernate.AlcorTCountriesDAO;
- import com.firemax.test.hibernate.AlcorTProvinces;
- import com.firemax.test.hibernate.AlcorTProvincesDAO;
- import com.firemax.test.hibernate.AlcotTDistrict;
- import com.firemax.test.hibernate.AlcotTDistrictDAO;
- @Component
- public class CountryService {
- private static Log logger = LogFactory.getLog(CountryService.class);
- @Autowired
- private AlcorTCountriesDAO alcorTCountriesDAO;
- @Autowired
- private AlcorTProvincesDAO alcorTProvincesDAO;
- @Autowired
- private AlcorTCitysDAO alcorTCitysDAO;
- @Autowired
- private AlcotTDistrictDAO alcotTDistrictDAO;
- public CountryService(){
- }
- //这里是业务逻辑的方法
- 。。。。。
- }
然后,我们修改配置文件applicatonContext.xml中,启用自动注入的功能,而放弃原来的<bean>方式的配置
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"
- default-autowire="autodetect">
- <bean id="entityManagerFactory"
- class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
- <property name="persistenceUnitName" value="testerPU" />
- </bean>
- <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
- <property name="entityManagerFactory" ref="entityManagerFactory" />
- </bean>
- <tx:annotation-driven transaction-manager="transactionManager" />
- <bean id="transactionInterceptor"
- class="org.springframework.transaction.interceptor.TransactionInterceptor">
- <!-- 事务拦截器bean需要依赖注入一个事务管理器 -->
- <property name="transactionManager">
- <ref local="transactionManager" />
- </property>
- <property name="transactionAttributes">
- <!-- 下面定义事务(指service里面的方法)传播属性 -->
- <props>
- <prop key="insert*">PROPAGATION_REQUIRED</prop>
- <prop key="update*">PROPAGATION_REQUIRED</prop>
- <prop key="save*">PROPAGATION_REQUIRED</prop>
- <prop key="add*">PROPAGATION_REQUIRED</prop>
- <prop key="update*">PROPAGATION_REQUIRED</prop>
- <prop key="remove*">PROPAGATION_REQUIRED</prop>
- <prop key="delete*">PROPAGATION_REQUIRED</prop>
- <prop key="get*">PROPAGATION_REQUIRED,readOnly
- </prop>
- <prop key="find*">PROPAGATION_REQUIRED,readOnly
- </prop>
- <prop key="load*">PROPAGATION_REQUIRED,readOnly
- </prop>
- <prop key="change*">PROPAGATION_REQUIRED</prop>
- <prop key="count*">PROPAGATION_REQUIRED</prop>
- <prop key="*">PROPAGATION_REQUIRED</prop>
- </props>
- </property>
- </bean>
- <!-- 该 BeanPostProcessor 将自动对标注 @Autowired 的 Bean 进行注入 -->
- <!-- 这个Processor 已经被 <context:annotation-config/> 所简化
- <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
- -->
- <!-- <context:component-scan/> 配置项不但启用了对类包进行扫描以实施注释驱动 Bean 定义的功能,同时还启用了注释驱动自动注入的功能(即还隐式地在内部注册了 AutowiredAnnotationBeanPostProcessor 和 CommonAnnotationBeanPostProcessor),因此当使用 <context:component-scan/> 后,就可以将 <context:annotation-config/> 移除了。 -->
- <context:component-scan base-package ="com.firemax"/>
- <!-- 定义自动代理BeanNameAutoProxyCreator -->
- <bean id="beanNameAutoProxyCreator"
- class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
- <!-- 指定对满足哪些bean name的bean自动生成业务代理 -->
- <property name="beanNames">
- <list>
- <value>*Service</value>
- </list>
- </property>
- <!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器 -->
- <property name="interceptorNames">
- <list>
- <!-- 此处可增加其他新的Interceptor -->
- <value>transactionInterceptor</value>
- </list>
- </property>
- </bean>
- <!--
- <bean id="AlcorTCountriesDAO" class="com.firemax.test.hibernate.AlcorTCountriesDAO">
- <property name="entityManagerFactory" ref="entityManagerFactory" />
- </bean>
- <bean id="AlcorTProvincesDAO" class="com.firemax.test.hibernate.AlcorTProvincesDAO">
- <property name="entityManagerFactory" ref="entityManagerFactory" />
- </bean>
- <bean id="AlcotTDistrictDAO" class="com.firemax.test.hibernate.AlcotTDistrictDAO">
- <property name="entityManagerFactory" ref="entityManagerFactory" />
- </bean>
- <bean id="AlcorTCitysDAO" class="com.firemax.test.hibernate.AlcorTCitysDAO">
- <property name="entityManagerFactory" ref="entityManagerFactory" />
- </bean>
- <bean id="CountryService" class="com.firemax.test.service.CountryService"/>
- -->
- </beans>
注意:
-
这里注入的bean 的名称是按照类的名称,把第一个字母改成小写来命名的。比如例子中的CountryService的bean的名称就是countryService.
- 我们也可以通过@Component("countryService") 这种方式来显示的定义一个bean的注入名称。但是在大多数情况下没有必要。
<context:component-scan/> 的 base-package 属性指定了需要扫描的类包,类包及其递归子包中所有的类都会被处理。
<context:component-scan/> 还允许定义过滤器将基包下的某些类纳入或排除。Spring 支持以下 4 种类型的过滤方式,通过下表说明:
扫描过滤方式
注释 | 假如 com.firemax.test.SomeAnnotation 是一个注释类,我们可以将使用该注释的类过滤出来。 |
类名指定 | 通过全限定类名进行过滤,如您可以指定将 com.firemax.test.IncludeService纳入扫描,而将 com.firemax.test.NotIncludeService 排除在外。 |
正则表达式 | 通过正则表达式定义过滤的类,如下所示: com\.firemax\.test\.Default.* |
AspectJ 表达式 | 通过 AspectJ 表达式定义过滤的类,如下所示: com. firemax.test..*Service+ |
下面是一个简单的例子:
|
默认情况下通过 @Component
定义的 Bean 都是 singleton 的,如果需要使用其它作用范围的 Bean,可以通过 @Scope
注释来达到目标,如以下代码所示:
通过 @Scope 指定 Bean 的作用范围
|
这样,当从 Spring 容器中获取 boss
Bean 时,每次返回的都是新的实例了。
在Spring2.5中引入了更多的典型化注解,@Repository ,@Service,@Controler是@Component的细化。分别表示持久层,服务层,控制层。建议使用这个注解来取代@Component
附上一个java Applicaiton的简单测试程序
- /*
- * Created on 2008-9-28
- *
- * 徐泽宇 roamer
- */
- package com.firemax.test.tester;
- import java.util.Iterator;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.FileSystemXmlApplicationContext;
- import com.firemax.test.hibernate.AlcorTCitys;
- import com.firemax.test.hibernate.AlcorTCitysDAO;
- import com.firemax.test.hibernate.AlcorTCountries;
- import com.firemax.test.hibernate.AlcorTProvinces;
- import com.firemax.test.hibernate.AlcotTDistrict;
- import com.firemax.test.hibernate.AlcotTDistrictDAO;
- import com.firemax.test.service.CountryService;
- public class Tester {
- /**
- * @param args
- */
- public static void main(String[] args) throws Exception{
- // TODO Auto-generated method stub
- ApplicationContext ctx = new FileSystemXmlApplicationContext("/WebContent/WEB-INF/classes/applicationContext*.xml");
- String[] beans = ctx.getBeanDefinitionNames();
- for (int i = 0 ; i < beans.length;i++)
- {
- System.out.println(beans[i]);
- }
- CountryService countryService= (CountryService)ctx.getBean("countryService");
- AlcorTCountries alcorTCountries= countryService.getCountriesInfo("CN");
- System.out.println(alcorTCountries.getCountry());
- System.out.println("开始调用子类");
- System.out.println(alcorTCountries.getAlcorTProvinceses().size());
- Iterator<AlcorTProvinces> it = alcorTCountries.getAlcorTProvinceses().iterator();
- while (it.hasNext()){
- AlcorTProvinces alcorTProvinces= (AlcorTProvinces)it.next();
- System.out.println(alcorTProvinces.getProvinceName());
- }
- AlcotTDistrict alcotTDistrict= new AlcotTDistrict();
- alcotTDistrict.setDistrictCode("22");
- alcotTDistrict.setDistrictName("浦东");
- AlcorTCitys alcorTCitys =countryService.getCityInfo("021");
- alcotTDistrict.setAlcorTCitys(alcorTCitys);
- countryService.saveProvinces(alcotTDistrict);
- }
- }
感谢 JPA 感谢Spring ,终于不要频繁的去定义和修改这些Bean了
发表评论
-
注解的力量4---Spring 2.5 JPA hibernate 使用方法的点滴整理(四)
2009-05-13 14:45 1487Spring 2.5 JPA hibernate 使用方法的点 ... -
注解的力量3 -----Spring 2.5 JPA hibernate 使用方法的点滴整理(三)
2009-05-13 14:44 1362Spring 2.5 JPA hibernate 使用方法的点 ... -
注解的力量2 -----Spring 2.5 JPA hibernate 使用方法的点滴整理(二)转
2009-05-13 14:42 1411通过上面一步骤。我们简化了hibernate中扰人的 xxx ... -
注解的力量1---Spring 2.5 JPA hibernate 使用方法的点滴整理(一)
2009-05-13 14:40 1809消除hiberante.hbm.xml配置 ... -
spring2.5中基于注释的配置方式浅析
2009-05-13 11:55 1062spring2中基于注释的配置 ... -
谈谈Spring 2.x中简化配置的问题
2009-05-13 11:39 1270谈谈Spring 2.x中简化配置的问题 关键字: 简化配置 ...
相关推荐
Spring 2.5 和 Hibernate 3.2 是两个在企业级Java应用开发中非常重要的框架。Spring 是一个全面的后端应用框架,提供依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)以及大量的集成支持。而Hibernate 则是...
Struts2.0、Spring2.5和Hibernate3.2是经典的Java企业级开发框架,它们在2000年代末至2010年初广泛应用于构建大型Web应用程序。这三大框架的集成提供了完整的MVC(Model-View-Controller)架构,支持服务层和持久层...
标题 "jersey+spring2.5+hibernate3.3+jpa" 指的是一种集成技术,将轻量级的RESTful服务框架Jersey、企业级应用框架Spring 2.5、持久层框架Hibernate 3.3以及Java Persistence API(JPA)结合在一起,以实现高效且...
这篇博客“Spring之Spring2.5集成Hibernate3.6”主要探讨了如何将两个经典的开源框架——Spring 2.5和Hibernate 3.6进行整合,以实现数据持久化的高效管理。 Spring 2.5版本是Spring框架的一个重要里程碑,它引入了...
《Spring 2.5与Hibernate 3.04 API详解》 在软件开发领域,Spring框架和Hibernate ORM工具是Java开发者的重要伙伴。本资源“spring2.5-hibernate3.04_API”提供了这两个关键库的API帮助文档,旨在帮助开发者深入...
5. **开发业务逻辑**: 使用Spring的Service层和Hibernate的DAO层处理数据操作,Action层负责接收请求和转发响应。 SSH框架组合的优点包括: - **解耦合**:Spring的DI和AOP使得组件间松耦合,便于测试和维护。 - *...
本教程将探讨如何将Struts2.1、Spring2.5和Hibernate3.3这三大流行框架进行整合,以构建一个强大的Java Web应用程序。首先,我们先关注Spring2.5与Hibernate3.3的整合,这是整个集成的第一步。 Spring2.5是Spring...
【标题】"spring2.5 + jpa(hibernate3) 实例源码"涉及的核心技术是Spring 2.5框架与Java Persistence API (JPA)的整合,其中JPA的具体实现是Hibernate 3。这个实例提供了如何在Spring环境中配置和使用JPA进行数据库...
标题 "spring2.5 + hibernate3.2 实例源码" 涉及到的是两个非常关键的Java企业级开发框架:Spring 2.5和Hibernate 3.2。这个实例源码提供了如何将这两个框架集成并进行实际应用的示例。 Spring 2.5是Spring框架的一...
标题 "Spring2.5 + JPA(Hibernate)实现" 指的是在Spring框架的2.5版本中集成Java Persistence API (JPA) 和Hibernate ORM框架来管理数据库操作。这通常涉及利用Spring的IoC(Inversion of Control)和AOP(Aspect ...
Spring 2.5版本引入了许多增强的功能,如支持JSR-303 Bean Validation、改进的AOP代理、更灵活的XML配置以及基于注解的配置支持。这使得开发者可以更加方便地实现依赖注入,减少XML配置的工作量。 Hibernate 3.3...
Spring MVC、Hibernate 和 Spring 是Java开发...尽管当前版本已经更新至Spring 5和Hibernate 5,但Spring 2.5和Hibernate 3.0的组合仍广泛应用于许多现有项目中,理解其工作原理和配置方法对于Java开发者来说至关重要。
Struts1、Spring2.5和Hibernate是Java Web开发中常用的三大框架,它们各自负责不同的职责,Struts1处理表现层逻辑,Spring2.5管理依赖注入和业务逻辑,Hibernate则专注于持久化层操作。将这三大框架整合在一起,可以...
**Spring 2.5 整合 JPA 概述** Spring 框架以其高度的灵活性和可扩展性,已经成为Java开发中不可或缺的部分。在Spring 2.5版本中,它进一步增强了对Java Persistence API (JPA)的支持,使得开发者能够更加方便地将...
在Spring2.5中,你可以使用XML配置或注解来声明bean,它支持多种持久化策略,包括JDBC、Hibernate和JPA。 JPA(Java Persistence API)是Java平台上的一个标准,提供了ORM(对象关系映射)的能力,允许开发者以面向...
在本场景中,我们关注的是如何将Spring 2.5与JPA结合,并特别通过Hibernate作为JPA的实现来构建项目。以下是你提到的各个JAR包的作用和它们在整合过程中的角色: 1. **spring.jar**: 这是Spring框架的核心库,包含...
Struts2、Spring2.5、Hibernate3(JPA)和ExtJS3是构建现代企业级Web应用的四大核心技术,它们各自在应用架构中扮演着关键角色。下面将详细阐述这些技术及其组合使用时的基本概念和功能。 1. **Struts2**:Struts2...
Struts2、Spring2.5和Hibernate3.2是经典的Java Web开发框架组合,它们各自在应用程序的不同层面提供了强大的功能。下面将详细解释这三个框架以及它们如何协同工作。 **Struts2** Struts2是一个基于MVC(Model-View...