<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd
">
<beans>
<!-- dataSource -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>
jdbc:mysql://127.0.0.1:3306/hejie
</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>hejie</value>
</property>
</bean>
<!-- sessionFactory -->
<!--bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<!-- hibernate注释时用的类 AnnotationSessionFactoryBean -->
<property name="dataSource">
<ref bean="dataSource"/>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
<!--property name="mappingResources"-->
<property name="annotatedClasses"> <!-- hibernate注释时用 -->
<list>
<!--<value>com/yeepay/entity/person_xml.xml</value>-->
<value>com.yeepay.entity.Person</value>
<value>com.yeepay.entity.Book</value>
</list>
</property>
</bean>
<!-- template -->
<bean id="template" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<!-- dao -->
<bean id="personDao" class="com.yeepay.dao.impl.PersonDaoImpl">
<property name="template" ref="template"></property>
</bean>
<!-- biz -->
<!-- 事物 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 拦截器 -->
<bean id="interceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager"></property>
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED,-Exception</prop>
</props>
</property>
</bean>
<!-- 自动代理 --> <!-- 缺陷:不能细化到某些对某些-->
<bean id="autoproxy" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<value>*Dao</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>interceptor</value>
</list>
</property>
</bean>
</beans>
<!--
遇到的问题:
1.核心jar包:hibernate(hbm)+spring(DriverManagerDataSource)
---spring.jar
---log4j-1.2.11.jar
---dom4j-1.6.1.jar
---commons-logging-1.0.4.jar
---hibernate3.jar
---commons-collections-2.1.1.jar
---cglib-2.1.3.jar
---asm.jar
---antlr-2.7.6.jar
---数据库驱动
2.org.springframework.jdbc.datasource.DriverManagerDataSource与org.apache.commons.dbcp.BasicDataSource 的区别
---区别:
DriverManagerDataSource:在每个连接请求时都新建一个连接。与DBCP的BasicDataSource不同,DriverManagerDataSource提供的连接没有进行池管理。
SingleConnectionDataSource:在每个连接请求时都返回同一个连接。虽然它不同严格意义上的池管理数据源,但我们可以把它看作只有一个连接的池
org.apache.commons.dbcp.BasicDataSource:有连接池的功能,无论是效率还是在资源利用率上都优于DriverManagerDataSource
(commons-dbcp.jar,commons-pool.jar,c3p0-0.9.0.4.jar)
---实例:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
改为:<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
注意:用BasicDataSource时,在value标签内值不要有空格或者换行。
包:commons-dbcp.jar, commons-pool.jar
---hibernate的注释与hbm
注释:产生sessionFactory类:org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean
映射属性:<property name="annotatedClasses"> hibernate注释时用
<list>
<value>com.yeepay.entity.Person</value>//指到类
<value>com.yeepay.entity.Book</value>
</list>
</property>
hbm:产生sessionFactory类:org.springframework.orm.hibernate3.LocalSessionFactoryBean
映射属性:<property name="annotatedClasses">
<list>
<value>com/yeepay/entity/person_xml.xml</value>
</list>
</property>
3.关于Spring中autowire="byName" /"byType"
如果userDAO设置了autowire="byName" ,假设ServiceImpl有一个属性名为userDAO,Spring就会在配置文件里查找有没有名字为userDAO的bean, 自动为ServiceImpl注入。
如果bean有两个属性,一个想默认注入,一个想自定义,只要设定了autowire,然后显式的声明那个想自定义的,就可以达到要求。这就应了需求,在需要特别配置的时候就提供配置,否则给我一个默认注入。
还可以在根部的<beans>节点写一句default-autovwrie="byName",可以让文件里的所有bean 都默认autowrie。不过有人认为开发期可以这样,但Production Server上不应该使用Autowire。但有人认为那些自定义一次的地方比如TranscationManager应该详细定义,而Dao,Service这种大量重复定义的bean就可以这样做。--------注:bean的id 或者 name都行!
4.对比了5中事务处理方法还是觉得BeanNameAutoProxyCreator最为方便且好理解。不能对某一个类的某些方法做代理。
5.用MethodInterceptor自己写了一个advice切入到其他类中,模仿事务处理。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd
">
<beans default-autowire="byName">
<!-- test class ->
<bean id="mytarget" name="log" class="com.service.LogService"></bean>
<bean id="golog" class="com.service.GoLog" >
//在一个方法中调用mytarget的一个有事务的方法。
</bean>
<!-- 通知 ->
<bean id="myAdvice" class="com.spring.MyAdvice"></bean>//配置这个通知,可以直接配到代理中
<!-- pointCut -> //配成一个切入点,可以和通知一样配到代理中
<bean id="runAdvisor"
class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="advice">
<bean class="com.spring.MyHandler" />
</property>
<property name="patterns">
<list>
<value>.*yestransaction</value>
</list>
</property>
</bean>
<!-- 代理 -> //代理都是其中target拥有所有interceptorNames的的advice。在调用时getBean(“代理id”);
<!--bean id="r" name="proxy"
class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<list>
<value>com.service.Log</value>
<value>com.service.Go</value>
</list>
</property>
<property name="target" ref="mytarget"></property>
<property name="interceptorNames">
<list>
<value>runAdvisor</value>
</list>
</property>
</bean->
<!--自动代理->
//多对多,要是想对某些方法得要写advisor。调用用自己的id。
<bean id="autoproxy" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<value>mytarget</value>
<value>golog</value>解决**** 在golog中定义方法.*yestransaction
</list>
</property>
<property name="interceptorNames">
<list>
<value>runAdvisor</value>
</list>
</property>
</bean>
</beans>
<!-- 设想:有一个target是targets(只要方法命名注意),解决对某些方法 ->解决****
-->
分享到:
相关推荐
一. 准备工作 二. Spring -Aop入门 三. Spring-Aop 前置通知、后置通知、环绕通知、异常通知实现 四. Spring-Aop 之Pointcut+advice+Advisor 实现 五.Spring-Aop 引入的介绍
汽车仿真软件ADVISOR的论文资料-ADVISOR软件的混合仿真方法.pdf ADVISOR混合动力电动汽车仿真系统的二次开发及应用.pdf ADVISOR混合动力电动汽车仿真系统的二次开发及应用.pdf ADVISOR...
基于ADVISOR的电动汽车性能仿真.pdf
Oracle+10G+最佳20位新特性:SQL+Advisor+和+ADDM
<description>Spring公共配置文件 <!-- 启用spring注解支持 --> <!-- <!-- class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">--> <!-- <!-- value="classpath:hibernate.cfg....
3. New Features and Enhancements in Spring Framework 4.0 ............................................ 17 3.1. Improved Getting Started Experience .........................................................
NetApp巡检工具 ConfigAdvisor-4.7.0,连通环境后可以对存储进行快速巡检
3. New Features and Enhancements in Spring Framework 4.0 ............................................ 17 3.1. Improved Getting Started Experience .........................................................
面向方面的编程,它们的术语,方面,实现类,建议,Advisor it与Pointcut和Advice的关系然后.................................... 明确的联合点--------->为其库目标对象代理...........>结合业务方法及其建议
<description>Spring公共配置文件 <!-- mes 的數據庫 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="oracle....
MATLAB电动汽车 混合动力汽车仿真插件 ADVISOR2002包括ADVISOR2002patchforR13.m
7.4. Spring里的advisor(Advisor) API 7.5. 使用ProxyFactoryBean创建AOP代理 7.5.1. 基础 7.5.2. JavaBean属性 7.5.3. 基于JDK和CGLIB的代理 7.5.4. 对接口进行代理 7.5.5. 对类进行代理 7.5.6. 使用“全局”...
美团技术团队出品的用来优化sql的工具,可以对SQL语句进行优化,分析瓶颈
资源来自pypi官网。 资源全名:tencentcloud-sdk-python-advisor-3.0.524.tar.gz
资源来自pypi官网。 资源全名:tencentcloud-sdk-python-advisor-3.0.556.tar.gz
资源来自pypi官网。 资源全名:tencentcloud-sdk-python-advisor-3.0.540.tar.gz
SPRING:aspect和advisor区别
MATLAB电动汽车 混合动力汽车仿真插件 ADVISOR2002包括ADVISOR2002patchforR13.m
资源分类:Python库 所属语言:Python 资源全名:tencentcloud-sdk-python-advisor-3.0.593.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059