zoukankan      html  css  js  c++  java
  • Java知识总结-8

    spring是一个bean容器,将bean创建的细节在配置文件中配置,应用程序通过bean的ID获得对象
    单词:
    关于配置的:
    scope --配置是否是单例 prototype --多例 singleton --单例
    destroy-method ---销毁时执行的方法 property ---调用set方法赋值 constructor-arg ---构造方法赋值
    joinpoint 连接点

    控制反转IOC
    所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护由外部容器来负责。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转。


    依赖注入DI
    (把依赖的对象注入到对象里)
    所谓依赖注入就是指:在运行期间,有外部容器动态地将依赖对象注入到组件中(构造方法和set方法)


    好处:
    1.降低组件之间的耦合度,实现软件各层之间的解耦.
    2.可以使容器提供众多服务如事务管理消息服务处理等等。当我们使用容器管理事务时,开发人员就不需要手工 控制事务,也不需要处理复杂的事务传播
    3.容器提供单例模式支持,开发人员不需要自己编写实现代码.
    4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能

    spring创建对象的方法
    new ---seter方法
    --bean的class是创建对象的全限定名
    --用property子标签为属性赋值,property的name属性是setter方法去掉set之后的部分,首字母大小写不敏感
    --如果该属性是简单类型,则用value指定属性的值
    new --有参构造方法
    --bean的class是创建对象的完全限定名
    用constructor-arg 子标签为属性赋值,他的name属性是构造器的参数名称 也可以用index 也可以用type
    静态工厂
    bean的class是工厂的完全限定名
    factory-method 指定工厂方法名字 例如 getTeacher
    工厂方法
    --bean的class是创建对象的全限定名(可以不指定)
    factory-bean 指定工厂对象,(bean的ID),工厂类对象另外需要一个bean定义
    factory-method 指定工厂方法名字 例如 getTeacher
    单例
    同静态工厂


    bean的创建细节:
    <bean的属性设置>---此单例非单例模式的单例
    spring缺省的bean是单例的 单例bean默认是容器被加载时被创建的 属性 lizy-init="true"---使用时在创建(对多例无作用)
    scope 属性设置bean是(单例singleton/多例prototype) 多例bean是使用时在创建
    init-method --初始化的方法 bean 被创建时调用 在构造方法/setter 方法/ factory-method 之后执行
    destroy-methed -bean被销毁时调用
    ---销毁时机
    单例:spring 容器关闭时销毁,多例:spring不管理(超出作用域销毁)

    bean注解:
    <context:component-scan base-package="cn.gacl.java"/>
    类的注解:
    @Component(“a”)---如果没有起名字,则id是首字母小写的类名 是所有受Spring 管理组件的通用形式,@Component注解可以放在类的头上,@Component不推荐使用。 (相当于<bean>***</bean>)

    @Controller 通常对应表现层的Bean,也就是Action 等同于@component

    @Service 通常对应的是业务层Bean 等同于@component

    @Repository 通常对应数据访问层Bean 等同于@component

    属性的注解:
    注解是通过反射未属性赋值 所以不需要get set 方法

    @Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作 是spring的注解

    @Resource(name="") 的作用相当于 @Autowired,只不过 @Autowired 按 byType 自动注入,面@Resource 默认按 byName 自动注入罢了 是 Javax 的注解


    aop切面编程
    切面 共同方法抽取的类
    通知 切面类的方法
    切入点 把通知加入到目标类的位置
    织入 把通知加入到切入点
    ------
    1.编写一个切面类,包括一些提取出的执行方法 方法的参数 JoinPoint a --切入方法的签名(每个通知都可以有这个参数)
    2.配置文件配置
    <aop:config>
    <aop:pointcut expression=" execution (* com.bawei.dao.*.*(..))" id="t"/>
    <aop:aspect ref="aop" >
    <aop:before method="befor" pointcut-ref="t" /> //之前执行的方法
    <aop:after-returning method="after" pointcut-ref="t" returning="a"/> //之后执行的方法 returning 可以设置执行目标方法后返回值 值是别名 在切面类方法的参数名字 类型是实际返回的类型
    </aop:aspect>
    </aop:config>
    环绕类型的 aop方法 Object methedName(ProceedingJionPoint name,.....) -(必须是这种格式) 方法体中 用name.proceed();//调用目标方法

    注解方法:
    1.编写一个切面类,包括一些提取出的执行方法
    2.class 加注解 @Component ---相当于<bean> @Aspect --相当于<aop:config >
    方法(也可以在类属性定义 private final String POINTCUT = "execution (* com.bawei.jdbcdemo.service.*.*(..))";)
    @Before(value = "execution (* com.bawei.jdbcdemo.service.*.*(..))") || @Before(value = POINTCUT)
    // 后置,参数是从目标方法中返回的值,需要在配置文件中设置returning
    @AfterReturning(value = POINTCUT, returning = "ret")
    // 最终
    @After(POINTCUT)
    // 异常
    @AfterThrowing(value = POINTCUT, throwing = "e")
    // 环绕
    @Around(POINTCUT)
    ------如果需要赋值 则用 value = POINTCUT, returning = "ret" 形式

    ssh整合配置

    一、xml 方式
    1.导入jar backage ,建立包 类 (dao 类可以继承 hibernateDaoSupper)

    2.建立 struts applicationContext.xml 配置文件
    3.0 struts 配置文件常量
    struts 配置文件常量
    //开发模式
    <constant value="true" name="struts.devMode"/>
    //简单主题
    <constant value="simple" name="struts.ui.theme"/>
    //action 的实例由 spring 提供
    <constant value="spring" name="struts.objectFactory"/>
    //拦截所有的 .do 结尾的访问到action
    <constant value="do" name="struts.action.extension"/>
    3.1 applicationContext.xml 配置
    ************首先配置sessionFactory**********
    <bean destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource" id="dataSource">
    <property value="com.mysql.jdbc.Driver" name="driverClassName"/>
    <property value="jdbc:mysql:///ssh" name="url"/>
    <property value="root" name="username"/>
    <property value="pass" name="password"/>
    </bean>
    <bean class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" id="sessionFactory">
    <property name="dataSource" ref="dataSource"/>
    <!-- 配置映射文件的三种方式: 1.使用mappingResources 要求列出所有的映射文件 2.使用mappingLocations 使用*通配符指定多个映射文件,注意前面有classpath: 3.使用mappingDirectoryLocations 指定映射目录即可,注意前面有classpath: 第二种和第三种常用 -->
    <!-- <property name="mappingResources"> <list> <value>com/bawei/sshxml/bean/Student.hbm.xml</value> </list> </property> -->
    <!-- <property name="mappingLocations"> <list> <value>classpath:com/bawei/sshxml/bean/*.hbm.xml</value> </list> </property> -->
    <property name="mappingDirectoryLocations">
    <list>
    <value>classpath:com/bawei/sshxml/bean/</value>
    </list>
    </property>
    <property name="hibernateProperties">
    <value> hibernate.dialect=org.hibernate.dialect.MySQLDialect hibernate.show_sql=true </value>
    </property>
    </bean>
    ********************配置事务*****************
    <bean class="org.springframework.orm.hibernate3.HibernateTransactionManager" id="transactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
    <!-- read-only : 为true时只读事务,为false时是读写事务,默认为false。只读事务比读写事务效率高。对于查询操作,使用只读事务。 isolation : 事务的隔离级别,默认为REPEATABLE_READ propagation : 事务的传播属性,默认为REQUERED,如果一个查询操作不需要事务,则可以使用SUPPORTS timeout : 事务的超时,当设置的超时时间到时,如果事务还没有结束,则回滚并关闭。默认为-1,就是永不超时。 默认情况下产生异常就回滚 rollback-for : 指定产生回滚的异常类型 no-rollback-for:指定不回滚的异常类型 rollback-for和no-rollback-for可以同时指定 -->
    <tx:method name="get*" read-only="true"/>
    <tx:method name="find*" read-only="true"/>
    <tx:method name="*" no-rollback-for="ArithmeticException"/>
    </tx:attributes>
    </tx:advice>
    <aop:config>
    <aop:pointcut id="studentServiceOperation" expression="execution(* com.bawei.sshxml.service.impl.*.*(..))"/>
    <aop:advisor pointcut-ref="studentServiceOperation" advice-ref="txAdvice"/>
    </aop:config>
    *******************配置<bean>

    3.web.xml 配置监听器 用于加载 spring 容器
    context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
    </context-param>
    <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    4.struts2-spring-plugin-x.x.x.jar 保证了action的实例由 spring 提供

    -----------------
    二、注解方式
    1.导入jar backage ,建立包 类 (dao 类可以继承 hibernateDaoSupper)

    2.建立 struts applicationContext.xml 配置文件
    3.0 struts 配置文件常量
    ******同 xml 配节方式
    3.1 applicationContext.xml 配置文件
    <context:component-scan base-package="com.bawei.ssh"/>//配置自动扫描bean
    ************配置sessionFactory 同上
    配置事务
    <tx:annotation-driven transaction-manager="transactionManager"
    得到事务管理器
    <bean class="org.springframework.orm.hibernate3.HibernateTransactionManager" id="transactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
    --------类里的配置
    <bean> 同bean 注解

  • 相关阅读:
    游戏引擎/GUI的设计与实现-主题
    Perl 写的巡检数据库的脚本
    Perl 利用grep 判断元素是否在数组里
    抓报错对应的SQL
    org.hibernate.exception.GenericJDBCException: Could not open connection
    java.sql.SQLException: Access denied for user 'sa'@'localhost' (using password: YES)
    java.sql.SQLException: Access denied for user 'sa'@'localhost' (using password: NO)
    Caused by: java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index
    Caused by: org.h2.jdbc.JdbcSQLException: Table "T_STUDENT_INFO" not found; SQL statement
    No bean named 'hibernateTemplate' is defined
  • 原文地址:https://www.cnblogs.com/flytwosky/p/6964128.html
Copyright © 2011-2022 走看看