SSH学习笔记

来源:互联网 发布:下列属于网络系统安全 编辑:程序博客网 时间:2024/05/21 17:08

SSH学习笔记

说明:根据平时学习过程中上网搜索的资料整合而成,供学习参考。

  • dtd:文档类型定义,可定义合法的标准通用标记语言、可扩展标记语言文档构建模块。它使用一系列合法的元素来定义文档的结构。文档类型定义可被成行地声明于标准通用标记语言、可扩展标记语言文档中,也可作为一个外部引用。
    hibernate-configuration-3.0.dtd是定义XML格式的。hibernate.cfg.xml配置可以参考.dtd和.xsd文件。
  • IoC(Inversion ofControl,控制反转)。这是spring的核心,贯穿始终。所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。这是什么意思呢,举个简单的例子,我们是如何找女朋友的?常见的情况是,我们到处去看哪里有长得漂亮身材又好的mm,然后打听她们的兴趣爱好、qq号、电话号、ip号、iq号………,想办法认识她们,投其所好送其所要,然后嘿嘿……这个过程是复杂深奥的,我们必须自己设计和面对每个环节。传统的程序开发也是如此,在一个对象中,如果要使用另外的对象,就必须得到它(自己new一个,或者从JNDI中查询一个),使用完之后还要将对象销毁(比如Connection等),对象始终会和其他的接口或类藕合起来。
      那么IoC是如何做的呢?有点像通过婚介找女朋友,在我和女朋友之间引入了一个第三者:婚姻介绍所。婚介管理了很多男男女女的资料,我可以向婚介提出一个列表,告诉它我想找个什么样的女朋友,比如长得像李嘉欣,身材像林熙雷,唱歌像周杰伦,速度像卡洛斯,技术像齐达内之类的,然后婚介就会按照我们的要求,提供一个mm,我们只需要去和她谈恋爱、结婚就行了。简单明了,如果婚介给我们的人选不符合要求,我们就会抛出异常。整个过程不再由我自己控制,而是有婚介这样一个类似容器的机构来控制。Spring所倡导的开发方式就是如此,所有的类都会在spring容器中登记,告诉spring你是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。
  • Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。
    谁控制谁,控制什么:传统JavaSE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对象的创建;谁控制谁?当然是IoC 容器控制了对象;控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。
    为何是反转,哪些方面反转了:有反转就有正转,传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象;为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;哪些方面反转了?依赖对象的获取被反转了。
      传统程序设计都是主动去创建相关对象然后再组合起来(左图)。当有了IoC/DI的容器后,在客户端类中不再主动去创建这些对象了(右图):
    图片来源于网络
      IoC对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,被动的等待IoC容器来创建并注入它所需要的资源了。
      IoC很好的体现了面向对象设计法则之一——好莱坞法则:“别找我们,我们找你”;即由IoC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找。

  • DI—Dependency Injection,即“依赖注入”:组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。
    理解DI的关键是:“谁依赖谁,为什么需要依赖,谁注入谁,注入了什么”,那我们来深入分析一下:
      ●谁依赖于谁:当然是应用程序依赖于IoC容器;   
      ●为什么需要依赖:应用程序需要IoC容器来提供对象需要的外部资源;
      ●谁注入谁:很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象;
      ●注入了什么:就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)。

      IoC和DI有什么关系呢?其实它们是同一个概念的不同角度描述,由于控制反转概念比较含糊(可能只是理解为容器控制对象这一个层面,很难让人想到谁来维护对象关系),所以2004年大师级人物Martin
    Fowler又给出了一个新的名字:“依赖注入”,相对IoC 而言,“依赖注入”明确描述了“被注入对象依赖IoC容器配置依赖对象”。
    spring就是通过反射来实现注入。
    @AspectJ风格的切面可以通过@Compenent注解标识其为Spring管理Bean,而@Aspect注解不能被Spring自动识别并注册为Bean,必须通过@Component注解来完成。
    依赖注入需要注意,DaoImpl类如果有继承Dao接口,依赖注入的类型必须是Dao接口,如果没有继承Dao接口,则直接用DaoImpl类型强制转换。

      例如:类BookDaoImpl继承接口BookDao,依赖注入时使用接口BookDao进行转换,此时配置bean应该将实现类BookDaoImpl配置为bean,不是将BookDao配置为bean;如果类BookDaoImpl没有继承任何接口,则使用BookDaoImpl强行转换就行;

  BookDao bookDaoImpl = (BookDao) context.getBean("bookDaoImpl");//不要new一个新对象
  • 使用HQL语句查询表,[FROM 表名]时,表名用的是映射到数据库表的类名,不是数据库表名。
  • 将struts的action配置为spring管理的bean,可在applicationContext.xml文件中配置,也可以用注解在action类.java文件中直接配置。
  • Spring的bean注解
    @Repository,只能标注在 DAO 类上,Spring 在容器初始化时将自动扫描base-package 指定的包及其子包下的所有 class文件,所有标注了 @Repository 的类都将被注册为 SpringBean;它还能将所标注的类中抛出的数据访问异常封装为 Spring 的数据访问异常类型。
    @Component 是一个泛化的概念,仅仅表示一个组件 (Bean) ,可以作用在任何层次。
    @Service 通常作用在业务层,但是目前该功能与@Component 相同。
    @Constroller 通常作用在控制层,但是目前该功能与 @Component 相同。
      通过在类上使用 @Repository、@Component、@Service 和 @Constroller注解,Spring会自动创建相应的 BeanDefinition 对象,并注册到 ApplicationContext 中。这些类就成了Spring受管组件。这三个注解除了作用于不同软件层次的类,其使用方式与 @Repository 是完全相同的。
      通过上述注解标识的Bean,其默认作用域是”singleton”,为了配合这四个注解,在标注 Bean 的同时能够指定 Bean的作用域,Spring2.5 引入了 @Scope 注解。 当一个 Bean 被自动检测到时,会根据那个扫描器的BeanNameGenerator 策略生成它的 bean名称。默认情况下,对于包含 name 属性的@Component、@Repository、 @Service 和@Controller,会把 name 取值作为 Bean的名字。如果这个注解不包含name值或是其他被自定义过滤器发现的组件,默认 Bean名称会是小写开头的非限定类名。id用来标识bean,是唯一的,且只有一个;name定义的是bean的alias,可以有多个,并可能与其他的bean重名。配置文件中不允许出现两个id相同的,否则在初始化时即会报错;但配置文件中允许出现两个name相同的,在用getBean()返回实例时,后面一个Bean被返回,应该是前面那个被后面同名的Bean覆盖了。如果id和name都没有指定,则用类全名作为name,e.g.:getBean(“com.stamen.BeanLifeCycleImpl”)。
  • LocalSessionFactoryBean,在applicationContext.xml中配置之后,需要另外一个*.hbm.xml的配置文件对实体和表的具体映射进行配置。AnnotationSessionFactoryBean提供一种注解的方式来映射,它可以依赖@注解通过实体类生成表(包括字段、主键•••)。这种方法是spring2.5以后才有的。
0 0