• Spring随笔


    1.spring介绍

    Spring 是什么?
         Spring是一个开源的控制反转(Inversion of Control ,IoC)和面向切面(AOP)的容器框架。它的主要目的是简化企业开发。

    控制反转(Inversion of Control,IoC)?
         应用本身不负责依赖对象的创建及维护,依赖对象的创建和维护是由外部容器负责的。这样控制权就有应用转移到了外部容器,控制权的转移就是所谓的反转。
     
    依赖注入(Dependency Injection)?
         在运行期,由外部容器动态地将依赖对象注入到组件中。

    Spring优点? 
         1.降低组件之间的耦合度,实现软件各层之间的解耦。
         2.sprig提供了众多的服务。例如事物服务、JMS服务、持久化服务。
         3.容器提供单例模式支持,开发人员不需要自己编写实现代码。
         4.容器提供了AOP技术,利用它很容易实现如权限拦截、运行期监控等功能。
         5.容器提供的众多辅助类,使用这些类能够加开应用的开发,如:jdbcTemplate、HibernateTemplate.
         6.Spring对于主流的应用框架提供了集成支持,如:集成hibernate、JPA、struts等这样更便于应用的开发。

    搭建spring开发环境

    spring必须用到的jar:
        \dist\spring.jar
        \lib\jakarta-commons\commons-logging.jar
        如果使用了切面编程(AOP),还需要下了jar文件:
        \lib\aspectj\aspectjrt.jar 和\lib\aspectj\aspectjweaver.jar
       \lib\cglib\cglib-nodep-2.1_3.jar
       如果使用到了JSR-250中的注解,如果@Resource/@PostConstruct/@Predestroy,还需要下列jar文件
       \lib\j2ee\common-annotations.jar

    如果PC不能联网,在spring配置文件下面不能提示信息,如果要提示信息则需要在eclipse中配置。
    window-->preferences-->XML-->XML Catalog

       Location:选择本地的xsd文件(xsd文件在\dist\resources\目录下)。即“E:\spring-framework-2.5.6\dist\resources\spring-beans-2.5.xsd”
       Key type:选择Schema location
       Key:在“http://www.springframework.org/schema/beans”后面加上xsd的文件名称。即“\spring-beans-2.5.xsd”


    //1.在类路径下寻找配置文件来实例化容器
         ApplicationContext cxt = new  ClassPathXmlApplicationContext(new String[]{"beans.xml"});
        PersonService personService = (PersonService)cxt.getBean("personService");
           personService.save();
    //2.在文件系统路径下寻找配置文件来实例化容器
         ApplicationContext context = new FileSystemXmlApplicationContext(new String[]{"d:\\beans.xml"});

    模仿spring的ApplicationContext读取配置文件

    用到dom4j的dom4j-1.6.1.jar和lib\jaxen-1.1-beta-6.jar

    import java.net.URL;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.XPath;
    import org.dom4j.io.SAXReader;

    public class ClassPathXMLApplicationContext {

         List<BeanDefinition> beanDefines = new ArrayList<BeanDefinition>();
         Map<String,Object> singletons = new HashMap<String, Object>();
     
     public ClassPathXMLApplicationContext(String fileName){
          this.readXML(fileName);
          this.instanceBeans();
     }

     /**
      * bean实例化
      */
     private void instanceBeans() {
      for(BeanDefinition beanDefine :beanDefines){
       try {
            if(beanDefine.getClassName() != null && !"".equals(beanDefine.getClassName().trim())){
                 singletons.put(beanDefine.getId(), Class.forName(beanDefine.getClassName()).newInstance());
            }
       } catch (Exception e) {
            e.printStackTrace();
       }
      }
     
     }


     /**
      * 读取XML文件
      * @param fileName
      */
     private void readXML(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");
           //创建beans/bean查询路径
           XPath xsub = document.createXPath("//ns:beans/ns:bean");
           //设置命名空间
           xsub.setNamespaceURIs(nsMap);
           //获取文档下所有bean节点
           List<Element> beans = xsub.selectNodes(document);
           for(Element element:beans){
                String id = element.attributeValue("id");
                String clazz = element.attributeValue("class");
                BeanDefinition beanDefine = new BeanDefinition(id, clazz);
                beanDefines.add(beanDefine);
       }
      
      } catch (Exception e) {
       e.printStackTrace();
      }
     }
     
     public Object getBean(String beanName){
      return singletons.get(beanName);
     }
    }

     BeanDefinition 中有两个字段 id和class  这两个字段的get、set方法 构造方法

  • 相关阅读:
    最小生成树(卡鲁斯卡尔)
    最小生成树(kruskal模版 Prim模板)
    hdu1247(Hat’s Words)
    hdu1671Phone List(字典树)
    hdu1305Immediate Decodability(字典树)
    hdu1251(统计难题)
    oj1500(Message Flood)字典树
    oj2892(字典树)
    数论公式
    2504(多项式求和)
  • 原文地址:https://www.cnblogs.com/yuxuan/p/2075563.html
Copyright © 2020-2023  润新知