zoukankan      html  css  js  c++  java
  • 第43周星期三收获

    1. 今天发现word的引用功能可以不显示文章中的批注功能很好,好友审阅模式也很好,可以列出所有的批注,省的一篇很长的文章需要多次才能看到要找的批注。
    2. 今天发现MyEclipse是可以自定义快捷键的,keys里面设置就行了,尝试了几下但有时不好用,可能跟快捷键重复和所在窗口有关。明天尝试把其配置数据导出,修改后再导入试试。工具使用上有几点心得(1)把MyEclipse中启动是不需要的组件加载全部去掉了,减少了启动时内存占用,也加快了启动速度。(2)配置修改了xml文件打开方式,加快了打开的速度。(3)发现了ctrl+O快捷键可以搜索要查找的类方法,更简单快捷。Ctrl+K定义下一个要查找的单词。还有其它几个有用的ctrl+shift+x快捷键。
    3. Spring的配置使用思考:Spring组件实现了Tomcat容器的接口,容器启动时加载Web.xml配置文件时加载了Spring的配置文件,然后利用相关配置文件中的一些Bean进行工作。看了一些Spring教程和Spring知识点总结,转载http://blog.csdn.net/billycoder/article/details/6949788内容如下

      Spring的技术核心。

       

      Spring 是一个开源的:控制反转(Inversion of control )IOC ,依赖注入(Dependency Injection )和面向切面(Aop)的框架,它主要的目的是简化企业的开发。

       

      2. 控制反转

       

      所谓控制反转就是:应用本身不负责依赖对象的创建与维护,依赖对象的创建与维护是有外部容器负责的。这样控制权就有应用转向了外部容器,控制权的转移就是所谓的控制反转。

       

      3. 依赖注入

       

      所谓依赖注入就是指: 在运行期 由外部容器动态的将依赖对象注入到组件中。

       

      4. 为什么要使用Spring 呢

       

      <a>可以降低组件之间的耦合度,实现软件各层之间的解耦;

       

      Control----àService----àDAO

       

      <b>使用Spring 容器可以使用它提供的众多服务:事务管理服务,JMS服务,Spring Core服务,持久化服务,其它......

       

      事务管理: 不需要手工控制事物

       

      <c>容器提供单利模式支持;

       

      <d>容器提供了AOP技术,利用它很容易实现如:权限拦截,运行期监控等功能。

       

      <e>容器提供了很多的辅助类,使用这些类能够加快应用的开发,如: Jdbc Template,

       

      HibernateTemplate 。

       

      <f>Spring对主流的应用框架提供了支持如: Hibernate ,JPA , Struts.等。

       

      5. 实例化Spring 容器

       

      两种方式

       

      A : 在类路径下寻找配置文件来实例化Spring容器。ApplicationContext继承sessionfactory,所以不用sessionfactory

       

      ApplicationContext ctx = new ClassPathXmlApplicationContext("config-path");

      如果是两个以上:

      ApplicationContext ac = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml","dao.xml"});

       

      或者用通配符:

      ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:/*.xml");

       

      B:在文件系统路径下寻找配置文件来实例化Spring 容器;

       

      ApplicationContext ctx = new FileSystemXmlApplicationContext("d:\\bean.xml");

       

      注: 第二种方式通常在本地测试时用,因为每个应用的配置在不同机器上会不同。

       

      Spring 的配置文件可以通过String 类型的数组配置多个。

       

      然后就可以通过

       

      OrderService service = (OrderService)ctx.getBean("personService");

       

      6. dom4j读解析xml文件

       

      public class ItcastClassPathXmlApplicationContext {

       

      private List<BeanDefinition> beanDefines = new ArrayList<BeanDefinition>();

       

      public ItcastApplicationContext(String filename){

       

      init(filename);

       

      }

       

      private void init(String filename){

       

      SAXReader saxReader = new SAXReader();

       

      Document document=null;

       

      try{

       

      URL xmlpath = this.getClass().getClassLoader().getResource(filename);

       

      document = saxReader.read(xmlpath);

       

      Map<String,String> nsMap = new HashMap<String,String>();

       

      nsMap.put("ns","http://www.springframework.org/schema/beans");//加入命名空间

       

      XPath xsub = document.createXPath("//ns:beans/ns:bean");//创建beans/bean查询路径

       

      xsub.setNamespaceURIs(nsMap);//设置命名空间

       

      List<Element> beans = xsub.selectNodes(document);//获取文档下所有bean节点

       

      for(Element element: beans){

       

      String id = element.attributeValue("id");//获取id属性值

       

      String clazz = element.attributeValue("class"); //获取class属性值

       

      BeanDefinition beanDefine = new BeanDefinition(id, clazz);

       

      beanDefines.add(beanDefine);

       

      }

       

      }catch(Exception e){

       

      e.printStackTrace();

       

      }

       

      }

       

      7. Spring配置文件中bean 的属性

       

      Bean 可以有id , name..... 其中id 时唯一的,不可以包含特殊字符。而name可以包含特殊字符。

       

      8. 常用实例化bean的方法

       

      使用构造方法来实例化bean <bean id="bean-name" class="类路径">通过默认的构造方法来实例化bean对象;

       

      其它不常用的不介绍

       

      9. 每次通过Spring容器来获得的bean是同一个对象吗

      bean的属性scope="prototype",可以让每次实例化的bean对象不同

      默认容器启动就会实例化bean, bean的属性lazy-init="true"改变这种情况

       

      进行全局设置:<beans default-lazy-init="true">.......</beans>.

       

      10. Spring中的其它配置

       

      <bean init-method="方法名称"> </bean>这样会在bean实例化之后执行初始化方法。

       

      既然有初始化方法,那么Spring 也会有销毁的方法。可以这样指定:

       

      <bean destroy-method="方法名"></bean>

       

      我们可以通过正常的方式来关闭Spring 容器:

       

      AbstractApplicationContext ctx = new ClassPathXmlApplicationContext();

       

      Ctx.close(); //关闭容器

       

      11. Spring中依赖注入的几种方式

       

      基本类型的注入方式:

       

      <bean id="bean-name" class="classPath">

       

      <property name="atttibute-name" value="value1"></property>//set方式

       

      <constructor-arg index="0"type="java.lang.String" value="xxxxx">//构造方方式,index="0"是构造方法的第一个参数,也可以根据type指定参数

       

      </constructor-arg>

       

      </bean>

       

      注入其它bean:

       

      方式1: 通过属性,设置Setter()方法来注入;这个属性一般式接口形式的。

       

      <bean id="bean-name1" class="classpath"></bean>

       

      <bean id="bean-name2" class="classPath">

       

      <property name="name1" ref=" "bean-name1"/>//对象的引用

       

      </bean>

       

      方式 2:使用内部bean 但是该bean不能被其它bean使用;

       

      <bean id="bean-name1" class="classpath"></bean>

       

      <property name="name1">

       

      <bean id="name2" class="classPath"></bean>//产生一个新的对象

       

      </property>

       

      </bean>

       

      12. 如何为注入集合类型对象(不重要)

       

      Set List Map Peoperty

       

      <bean id="" ...>

       

      <property name="list">

       

      <list>

       

      <value>1</value>

       

      </lsit>

       

      </property>

       

      </bean>

       

      set和list没区别

       

      <bean id="" ...>

       

      <property name="map">

       

      <map>

       

      <entry key="a" value="1"/>

       

      </map>

       

      </property>

       

      </bean>

       

      13. 用注解的方式进行依赖注入

       

      需要引入命名空间,和如果要想出现提示信息还要添加schema文件。在上图中有详细的说明。

       

      14. 在spring中使用注解进行IOC

       

       

       

      然后在bean.xml中写入

       

      <aop:aspectj-autoproxy/> <!—和建立代理有关-->

       

      15. 注入方式

       

      @Autowired:默认是byType,配合Qualifier可以指定name

       

      @Resource:默认byName,找不到byType

       

      @resource需要导入spring->lib->j2ee->common-annotaion.jar

       

      异常处理一般在struts这层处理,spring很少处理异常

       

      指定默认扫描方式:

      <benan id="bean-name" class="class-path" autowire="default">

       

      autowire取值如下:byType; byName; constructor; Autaodetect 16.通过classpath自动扫描的方式把组件注入到spring容器中管理;

       

      注册解析注解的解析器;

       

      <context:annotation-config />

       

      注册注解的解析器同样也包括上面的范围,故有下面的配置时上面的配置可以不要;

       

      <context:component-scan base-package="wto.bean" />

       

      这种方法也可以通过注解来设定初始化方法,销毁方法,也可以指定bean的名称。

       

      @Servic 业务层组件

       

      @Controller 控制层组件

       

      @Repositiory 数据访问层组件 以上三种组件目前还没有区别可以随便用。

       

      @Component 泛指组件 当组件不好归类的时候我们可以使用这个注解进行标注。

       

      @Scope 设置bean的模式是(单利)single 还是proptoto(原型)

       

      以上注解都是标注在类上的

       

      下面的注解是标注在方法上的:

       

      @PostConstruct 设定初始化方法

       

      @PreDestroy 设定销毁的方法

       

      16. 在spring中使用AOP(面向切面编程)

       

      动态代理:被代理对象要组合到代理类.代理类要实现invacationhandler. 用proxy.newInstance()返回的对象.但是hibernate中的动态代理是直接操作的二级制码,spring也类似,所以需要引入cglib相关包

       

      17.AOP中的一些概念:Aspect(切面),joinpoint(连接点),Pointcut(切入点)Advicce(通知)Target(目标对象),Weave(织入),Introduction(引入)

       

      18.基于注解方式声明切面,但是AOP用xml好,IOC用annotation好

       

      19.Spring对数据库的支持

       

      hibernate对数据库的支持DPCP,需要导入common-dbcp.jar;common-pool.jar

       

      <bean id=" myDateSource >

       

      class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

       

      <property name="dirverClassName" value="com.mysql.jdbc.Driver"/>

       

      <property name="url" value="jdbc:mysql://localhost:3306/spring/>

       

      <property name="username" value="root"/>

       

      <property name="password" value="root"/>

       

      </bean>

       

      <bean id="mySessionFactory" class="org.springframework.orm.hibernate3. AnnotationSessionFactoryBean >

       

      <--用注解必须是这个接口而不是LocalSessionFactory-->

       

      <property name="dateSource ref="myDateSource"/>

       

      <property name="mappingResources">

       

      <list>

       

      <value>product.hbm.xml</value>

       

      </list>

       

      <property name="hibernateProperties>

       

      <value>

       

      hibernate.dialect=org.hibernate.dialect.HSQLDialect

       

      </value>

       

      </property>

       

       

       

      </bean>

       

       

       

      可以用占位符和property文件配合使用

       

      <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

       

      <property name="locations">

       

      <value>classpath:jdbc.perperties</value>

       

      </property>

       

      </bean>

       

      <bean id="dateSource" destroy-mothod="close">

       

      <property name="dirverClassName" value="${jdbc.driverClassName}/>

       

      <property name="url" value="${jdbc.url}/>

       

      <property name="username" value="${jdbc.username}/>

       

      <property name="password" value="${jdbc.password}/>

       

      </bean>

       

      jdbc.properties

       

      jdbc.driverClassName=com.mysql.jdbc.Driver

       

      jdbc.url=jdbc:mysql://localhost:3306/spring

       

      jdbc.username=root

       

      jdbc.password=root

       

      JDBC+spring整合开发的时候就可以用其实还可以,用如下的方法

       

      <bean id="txtManager" class="org.springframework.jdbc.datesource.DateSourceTransactionManager>

       

      <property name="dateSource" ref="dateSource"/>

       

      </bean>

       

      补充:属性文件还可以用下面方式赋值

       

      <property name="adminEmails">

       

      <props>

       

      <prop key"adminstrator">adminstrator@example.org</prop>

       

      <prop key="support"> support@example</prop>

       

      </props>

       

      </property>

       

      20 . Spring支持事务管理

       

      首先修改配置,和加入相应的schema

       

      <tx:annotaion-driven transaction-manager="txtManager">

       

      <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTrasactionManager>

       

      <property name="sessionFatory ref="sessionFactory"/>

       

      </bean>

       

      使用@Transactional

       

      @Transactional

       

      public void add(User user){

       

      userDAO.save(user);

       

      Log log = new Log();

       

      Log.setMsg("a user saved!");

       

      LogDAO.save(log);

       

      }

       

      现在假如手动throw new RuntimeException("testerror");事务就会回滚了

       

      propagation:是衍生,繁殖,就是事务的传播方式;

       

      默认是REQUESTED,还有其他值,这个做了解

      MANDTROY,NESTED,NEVER,NOT_SUPPORTED,REQUESTES_NEW,SUPPORTS

    4. Java Bean

      Spring是基于JavaBean的,所以想弄明白JavaBean的概念,想知道为什么叫Bean这个名字的由来,但没搜索找到答案, Bean英文含义豆子,也许就是想表达重用组件的含义。软件组件就是指可以进行独立分离、易于重复使用的软件部分。JavaBean就是一种基于Java平台的软件组件思想。JavaBean也是一种独立于平台和结构的应用程序编程接口(API)。bean跟javabean是一样的概念,知识不同场合的不同叫法。

      bean、javabean本质上是一个由java文件生成的类,按照sun的说法,一个组件即java应用程序或applet的重复使用的部件就是bean

      我觉得可以简单的把它理解为:符合一定规范的java类,所以你就可以像理解类一样来理解javabean.就是说javabean就是java中比较特殊的类,我们另外起个名字把它叫做javabean.跟其它语言类比的话,可以把它理解为其他语言里面的控件。bean类似与微软的COM组件,bean组件是java类,这些类遵循一些接口格式,以便于使方法命名,底层行为以及继承或实现的行为能够把类看作是标准的bean组件方式进行构造

      下面转一篇很有启发的文章:http://blog.csdn.net/xiazdong/article/details/6888024

      一、JavaBean出现的目的

       

       

      由于只用JSP开发会发现使用了很多的Scriptlet,会使得jsp文件非常混乱。如果使用了JavaBean,则可以大大减少JSP中代码量。

       

      JSP的理想状态是只负责显示,而不负责处理。

       

      二、JavaBean介绍

       

       

      JavaBean说的通俗点就是一个Java类用于JSP中。通过<jsp:useBean>或者import导入。

       

      JavaBean导入的类的约定:

       

      (1)类必须是public的;

       

      (2)必须有无参构造;

       

      (3)属性必须是private的;

       

      三、JavaBean存放位置

       

       

      在tomcat中的理想目录结构如下:

       

       

      JavaBean存放在WEB-INF/classes内。

       

      注意:

       

      (1)每次修改classes文件或web.xml后必须要重启服务器。

       

      如果觉得很麻烦,则在开发过程中可以通过在Server.xml中设置虚拟目录的位置添加:

       

      <Context path="..." docBase="..." reloadable="true"/>,这样就会变成自动导入模式,不必重启服务器。

       

      但是有一个缺点,就是服务器必须时刻监视,会降低性能。

       

      (2)在classes中放入的是class文件。

       

      (3)类必须要有所在的包。

       

      四、<jsp:useBean>用法:

       

       

      一般的形式:<jsp:useBean id="实例化名称" scope="page" class="完整类名称"/>

       

      id中是实例化对象;

       

      scope中可以是

       

      (1)page:在一页中保存

       

      (2)request:服务器端跳转仍保存;

       

      (3)session:跳转仍保存;

       

      (4)application:服务器没有关闭仍保存;

       

       

      class为实例化对象的类的完整名称;

       

      使用<jsp:useBean>的好处是自动帮助你创建一个名为id的值的对象。

       

      注意:JavaBean中一定要有无参构造函数。

       

      五、<jsp:setProperty>用法:

       

       

      一般形式有四种:

       

      (1)<jsp:setProperty name="实例化名称" property="*"/>:自动调用set方法;

       

      (2)<jsp:setProperty name="实例化名称" property="name1"/>:对于name1属性自动调用set方法;

       

      (3)<jsp:setProperty name="实例化名称" property="name1" value="value1"/>:对于name1属性赋予value1值;

       

      (4)<jsp:setProperty name="实例化名称" property="name1" param="param1"/>:把param1的值赋给name1属性;

       

      但是一般使用第一种方法最多。

       

      六、<jsp:getProperty>用法

       

       

      一般形式:<jsp:getProperty name="c1" propety="name1"/>自动调用c1对象的getName1()方法,并返回;

       

      其实效果和getter方法是一样的;

       

      七、JavaBean删除

       

      通过pageConext.removeAttribute("JavaBean名称");删除scope为page的JavaBean对象。依次类推。

  • 相关阅读:
    Delphi的字符(Char),字符串(String),字符串指针(PChar),字符数组arrayofchar(来自http://delphi.cjcsoft.net/论坛)
    关于Delphi中的字符串的浅析(瓢虫大作,里面有内存错误的举例)
    String[255]在高版本Delphi里还是被解释成Byte,总体长度256,使用StrPCopy可以给Array String拷贝字符串(内含许多实验测试)
    了解JVM加载实例化类的原理
    轻量级 Material Design 前端框架 MDUI (纯html,css,与css框架跟react vue不冲突)
    只学一点点:我的技术学习策略(虽然不赞同,但可以参考一下,针对不常用的技术可以这样,同时可以:寻找遁去的一,不用管别人怎么想;有学习的时间,不如自己写、自己实践,否则学完了都不知道是什么东西)
    clientdataset<---->json
    完全自定义窗体风格的实现
    监控其它进程
    用JSP+JavaBean开发模式实现一个销售额的查询
  • 原文地址:https://www.cnblogs.com/doit8791/p/2737998.html
Copyright © 2011-2022 走看看