2.使用静态类工厂

spring2.5基于注解和XML等配置应用

  • 格式:doc
  • 大小:112.50 KB
  • 文档页数:12

三种实例化Bean的方法1.使用类构造器<bean id="personService" class="cn.oseica.impl.PersonServiceBean"></bean>2.使用静态类工厂<bean id="personService2" class="cn.oseica.impl.PersonFactory" factory-method="createPerson"/>3.使用实例类工厂<bean id="personFactory" class="cn. oseica.impl.PersonFactory"/><bean id="personService3" factory-bean="personFactory" factory-method="createPerson"/>控制反转的实现-依赖注入xml注入注入其他bean外部bean<bean id="person"class="com.oseica.dao.PersonImpl"></bean><bean id="personService"class="com.oseica.service.PersonService"> <property name="person"ref="person"></property></bean>内部bean (最好不要被其他bean使用)<bean id="personService"class="com.oseica.service.PersonService"> <property name="person"><bean class="com.oseica.dao.PersonImpl"></bean></property></bean>注入属性<bean id="personService"class="com.oseica.service.PersonService"> <property name="id"value="23"></property></bean>构造器注入<bean id="person"class="com.oseica.dao.PersonImpl"></bean><bean id="personService"class="com.oseica.service.PersonService"> <constructor-arg index="0"type="com.oseica.dao.IPerson"ref="person"/> </bean>注解注入<beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:p="/schema/p"xmlns:context="/schema/context"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-2.5.xsd/schema/context/schema/context/spring-context-2.5.xsd"> <context:annotation-config/>在要注入的属性中使用@Resource 或set方法上(是javaee的注解方式推荐使用)@Autowire @Qulifier(“person”)(Spring 的注解方式)自动扫描装配<context:component-scan base-package="com.oseica"/>在相应的类上加上注解@Service 服务类@Repository dao类@Controller 控制类@Component 分类不清的类@Scope(“prototype”) 随时创建作用范围(单例/随时创建)@PostConstruct 初始化方法AOP切面切入点连接点通知<beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:aop="/schema/aop"xmlns:p="/schema/p"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-2.5.xsd /schema/aop/schema/aop/spring-aop-2.5.xsd"> <aop:aspectj-autoproxy/>基于XML开发准备普通切面类public class XMLPersonServiceAOP {//前置通知:public void doSomethingBefore(String name) {System.out.println("前置通知:"+name);}//后置通知public void doSomethingAfter(String personName) {System.out.println("后置通知:"+personName);}//最终通知public void doSomethingEnd() {System.out.println("最终通知:");}//例外通知public void doThrow(Exception e) {System.out.println("例外通知:");}//环绕通知public Object doAround(ProceedingJoinPoint pjp) throws Throwable{//if(){//判断用户是否有权限Object result=pjp.proceed();//}System.out.println("环绕通知:");return result;}}Xml配置<bean id="xmlPersonServiceAOP"class="com.oseica.service.aop.XMLPersonServiceAOP"></bean> <aop:config><aop:aspect id="myaop"ref="xmlPersonServiceAOP"><aop:pointcut expression="execution(* com.oseica.service.PersonService.*(..))"id="mycut"/><aop:before pointcut="execution(* com.oseica.service..*.*(..)) and args(name) " method="doSomethingBefore"arg-names="name" /><aop:after-returning pointcut-ref="mycut"method="doSomethingAfter"/><aop:after-throwing pointcut-ref="mycut"method="doThrow"/><aop:after pointcut-ref="mycut"method="doSomethingEnd"/><aop:around pointcut-ref="mycut"method="doAround"/></aop:aspect></aop:config>基于注解的方式开发在xml中配置<aop:aspectj-autoproxy/>@Aspect@Componentpublic class PersonServiceAOP {@Pointcut("execution(* com.oseica.service.PersonService.*(..))")private void anyMehtod() {}// 声明一个切入点@Before("anyMehtod() && args(name)")//前置通知:public void doSomethingBefore(String name) {System.out.println("前置通知:"+name);}@AfterReturning(pointcut="anyMehtod()",returning="personName")//后置通知public void doSomethingAfter(String personName) {System.out.println("后置通知:"+personName);}@After("anyMehtod()")//最终通知public void doSomethingEnd() {System.out.println("最终通知:");}@AfterThrowing(pointcut="anyMehtod()",throwing="e") //例外通知public void doThrow(Exception e) {System.out.println("例外通知:");}@Around("anyMehtod()")public Object doAround(ProceedingJoinPoint pjp) throws Throwable{//if(){//判断用户是否有权限Object result=pjp.proceed();//}System.out.println("环绕通知:");return result;}}Spring与JDBC 事务Annotation的方式(注解)文件Jdbc.properties 如下:driverClassName=org.gjt.mm.mysql.Driverurl=jdbc\:mysql\://localhost\:3306/itcast?useUnicode\=true&characterEncoding\=UTF-8username=rootpassword=123456initialSize=1maxActive=500maxIdle=2minIdle=1Spring xml文件如下<beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:aop="/schema/aop"xmlns:tx="/schema/tx"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-2.5.xsd/schema/context /schema/context/spring-context-2.5.xsd/schema/aop /schema/aop/spring-aop-2.5.xsd/schema/tx /schema/tx/spring-tx-2.5.xsd"><context:property-placeholder location="classpath:jdbc.properties"/><bean id="dataSource" class="mons.dbcp.BasicDataSource" destroy-method="close"><property name="driverClassName" value="${driverClassName}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/><!-- 连接池启动时的初始值--><property name="initialSize" value="${initialSize}"/><!-- 连接池的最大值--><property name="maxActive" value="${maxActive}"/><!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle 为止--><property name="maxIdle" value="${maxIdle}"/><!-- 最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请--><property name="minIdle" value="${minIdle}"/></bean><bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean><tx:annotation-driven transaction-manager="txManager"/><bean id="personService" class="cn.oseica.service.impl.PersonServiceBean"><property name="dataSource" ref="dataSource"/></bean></beans>使用:在类前加@Transactional对某方法的check例外进行回滚@Transactional(runbackFor=Exception.Class)对某方法不执行事务@Transactional(propagation=Propagation.NOT_SUPPORTED)XML的事务配置<beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:aop="/schema/aop"xmlns:tx="/schema/tx"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-2.5.xsd/schema/context /schema/context/spring-context-2.5.xsd/schema/aop /schema/aop/spring-aop-2.5.xsd/schema/tx /schema/tx/spring-tx-2.5.xsd"><context:property-placeholder location="classpath:jdbc.properties"/><bean id="dataSource" class="mons.dbcp.BasicDataSource" destroy-method="close"><property name="driverClassName" value="${driverClassName}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/><!-- 连接池启动时的初始值--><property name="initialSize" value="${initialSize}"/><!-- 连接池的最大值--><property name="maxActive" value="${maxActive}"/><!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle 为止--><property name="maxIdle" value="${maxIdle}"/><!-- 最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请--><property name="minIdle" value="${minIdle}"/></bean><bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean><aop:config><aop:pointcut id="transactionPointcut" expression="execution(* cn.oseica.service..*.*(..))"/><aop:advisor advice-ref="txAdvice" pointcut-ref="transactionPointcut"/></aop:config><tx:advice id="txAdvice" transaction-manager="txManager"><tx:attributes><tx:method name="get*" read-only="true" propagation="NOT_SUPPORTED"/><tx:method name="*"/></tx:attributes></tx:advice><bean id="personService" class="cn.oseica.service.impl.PersonServiceBean"><property name="dataSource" ref="dataSource"/></bean></beans>集成xml方式SpringJAR 包aspectjrt.jaraspectjweaver.jarcglib-nodep-2.1_3.jarcommon-annotations.jarcommons-dbcp.jarcommons-logging.jarcommons-pool.jarlog4j-1.2.15.jarspring.jarspring-webmvc-struts.jarbean.xml<?xml version="1.0"encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:aop="/schema/aop"xmlns:tx="/schema/tx"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-2.5.xsd/schema/context/schema/context/spring-context-2.5.xsd/schema/aop/schema/aop/spring-aop-2.5.xsd/schema/tx/schema/tx/spring-tx-2.5.xsd"><bean id="dataSource"class="mons.dbcp.BasicDataSource"destroy-method="close"><property name="driverClassName"value="com.microsoft.sqlserver.jdbc.SQLServerDriver"></property><property name="url"value="jdbc:sqlserver://localhost:1433;databaseName=zf"></property><property name="username"value="sa"></property><property name="password"value="123"></property><!-- 连接池启动时的初始值 --><property name="initialSize"value="1"/><!-- 连接池的最大值 --><property name="maxActive"value="500"/><!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 --><property name="maxIdle"value="2"/><!-- 最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 --><property name="minIdle"value="1"/></bean><!--配置hibernate session工厂 --><bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"ref="dataSource"/><property name="mappingResources"><list><value>cn/oseica/entity/Person.hbm.xml</value></list></property><property name="hibernateProperties"><value>hibernate.dialect=org.hibernate.dialect.MySQL5Dialecthibernate.hbm2ddl.auto=updatehibernate.show_sql=falsehibernate.format_sql=falsee_second_level_cache=truee_query_cache=falsehibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider</value></property></bean><!-- 配置事务管理器 --><bean id="txManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"ref="sessionFactory"/></bean><!-- dao层 --><bean id="personDao"class="cn.oseica.dao.impl.PersonImpl"><property name="sessionFactory"ref="sessionFactory"/></bean><!-- 配置事务 --><aop:config><aop:pointcut id="transactionPointcut"expression="execution(* cn.oseica.dao..*.*(..))"/> <aop:advisor advice-ref="txAdvice"pointcut-ref="transactionPointcut"/> </aop:config><tx:advice id="txAdvice"transaction-manager="txManager"><tx:attributes><tx:method name="get*"read-only="true"propagation="NOT_SUPPORTED"/><tx:method name="*"/></tx:attributes></tx:advice><!-- 配置action --><bean name="/personList"class="cn.oseica.web.action.PersonAction"><property name="personDao"ref="personDao"/></bean></beans>启动配置Web.xml中<context-param><param-name>contextConfigLocation</param-name><param-value>classpath:beans.xml</param-value></context-param><!-- 对Spring容器进行实例化--><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>或在struts配置文件中<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"><set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml" /> </plug-in>hibernateJAR包antlr-2.7.6.jarcommons-collections-3.1.jardom4j-1.6.1.jarehcache-1.2.3.jarejb3-persistence.jarhibernate3.jarhibernate-annotations.jarhibernate-cglib-repack-2.1_3.jarhibernate-commons-annotations.jarhibernate-entitymanager.jarStruts1.2<servlet><servlet-name>action</servlet-name><servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param><param-name>config</param-name><param-value>/WEB-INF/struts-config.xml</param-value></init-param><init-param><param-name>debug</param-name><param-value>3</param-value></init-param><init-param><param-name>detail</param-name><param-value>3</param-value></init-param><load-on-startup>0</load-on-startup></servlet><servlet-mapping><servlet-name>action</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping>Struts2<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping><filter><filter-name>OpenSessionInViewFilter</filter-name><filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> </filter><filter-mapping><filter-name>OpenSessionInViewFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>Annotation方式<?xml version="1.0"encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:aop="/schema/aop"xmlns:tx="/schema/tx"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-2.5.xsd/schema/context/schema/context/spring-context-2.5.xsd/schema/aop/schema/aop/spring-aop-2.5.xsd/schema/tx/schema/tx/spring-tx-2.5.xsd"><!-- 配置切面代理 --><aop:aspectj-autoproxy/><!-- 自动扫描装配 --><context:component-scan base-package="com.oseica"/><!-- 数据源 --><bean id="dataSource"class="mons.dbcp.BasicDataSource"destroy-method="close"><property name="driverClassName"value="com.microsoft.sqlserver.jdbc.SQLServerDriver"></property><property name="url"value="jdbc:sqlserver://localhost:1433;databaseName=zf"></property><property name="username"value="sa"></property><property name="password"value="123"></property><!-- 连接池启动时的初始值 --><property name="initialSize"value="1"/><!-- 连接池的最大值 --><property name="maxActive"value="500"/><!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 --><property name="maxIdle"value="2"/><!-- 最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 --><property name="minIdle"value="1"/></bean><!--配置hibernate session工厂 --><bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"ref="dataSource"/><property name="mappingResources"><list><value>cn/oseica/entity/Person.hbm.xml</value></list></property><property name="hibernateProperties"><value>hibernate.dialect=org.hibernate.dialect.MySQL5Dialecthibernate.hbm2ddl.auto=updatehibernate.show_sql=falsehibernate.format_sql=falsee_second_level_cache=truee_query_cache=falsehibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider</value></property></bean><!-- 配置事务管理器 --><bean id="txManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"ref="sessionFactory"/></bean><!-- 启动annotation事务--><tx:annotation-driven transaction-manager="txManager"/></beans>在类中使用注解如上各知识点spring提供的乱码解决方案在web.xml中配置<filter><filter-name>encoding</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>encoding</filter-name><url-pattern>/*</url-pattern></filter-mapping>open session in view<filter><filter-name>OpenSessionInViewFilter</filter-name><filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> </filter><filter-mapping><filter-name>OpenSessionInViewFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>。