`
xxp3369
  • 浏览: 148186 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论
阅读更多
第13集:集成JPA环境

1。在整合struts、spring、jpa这几个框架时,为什么是先准备好jpa的环境呢?
       答:因为这是按这几个框架的依赖关系来确定的,spring要调用jpa,struts要调用spring,按照被调用者(被依赖者)先创建的原则,所以要先集成jpa,只有jpa测试通过后,再集成spring来调用jpa。
2.。采用jpa的hibernate实现来做数据访问,需要准备哪些jar包呢?
     答:除了要准备hibernate自身和hibernate自身依赖的包外,还要准备hibernate的jpa实现包和该实现包所依赖的包,hibernate自身和hibernate的jpa实现属于两个独立的产品,需要单独下载。
3. 采用jpa的hibernate实现来做数据访问,需要哪些步骤?
    答:1)导入hibernate与其jpa实现的有关包;2)导入数据库的jdbc驱动包;3)在classpath根路径下建立META-INF/persistence.xml文件;4)参照一个例子配置persistence.xml文件
4.persistence.xml文件中的持久化单元的名称有什么用?



关于第15段的问题
第15章在写业务类时,在前面加上@Service标注,是了表明这是一个能自动从容器中获取的bean,
可在bean.xml 中以有<context:component-scan base-package="com.itcast" /> 这样的配置,那么
上面的标注是不是多余了呢.
再就是业务类中的@PersistenceContext EntityManager em;  为啥EntityManager也能被注入,
是在哪被定义的呢.



至于你的第一个问题:
首先对于你说的在一个类上加上@Service注解后,该类
(即该bean)就好比为spring容器提供了一个标记,告诉
spring容器,我须要你来管理我,这个注解做的事也仅此
而以,至于<context: component-scan base-package="com.czbk"/>
黎老师说它的主要用途是解决一个项目里存在大量的bean须要
spring来管理,这样过多的配置文件导致可维护性差,用
该标签即开启了对指定包的扫描,它将会把@component
@conntroller @service @Repository作为受管理的bean放入spring
容器. 所以如果加上了注解没开扫描是不会产生任何作用的

至于你的第二个问题:
@persistenceContext EntityManager em;
首先我们从字面上去理解@persistenceContext它即为持久化上下文
我把它理解为持久化容器,因为它是JPA的注解,即表示的是JPA的持久
化容器,我们在META-INF会有一个persistence.xml文件来配置jpa的持
久化容器,至于它是如何将entityManager对象注入给em对象的也许只有
看源码才知道它是如何做的,但至少从这里我们可以知道,它在替
我们注入EntityManager的同时,被注入的EntityManager它是被容
器所管理的,即它是存在事务的,关键地方是它似乎依赖于
javax.persistence.EntityManagerFactory这个bean,如果不存在该bean
则会报异常
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
         <property name="persistenceUnitName">
          <value>itcast</value>
         </property>
       </bean>
      
       <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
         <property name="entityManagerFactory" ref="entityManagerFactory"></property>
       </bean>
      
       <tx:annotation-driven transaction-manager="transactionManager"/>
这样看来entityManager的注入会用到我们在spring里配置的
EntityManagerFactory,由于该实体工厂被加入了JPA事务,即由它所创建的EntityManager也
同样是受JPA事务所管理的




分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics