zoukankan      html  css  js  c++  java
  • Spring简介及入门实例

    Spring简介

    Spring是一个应用程序级别的轻量级框架,对企业级开发提供“一站式”服务。sping是一个开源的框架。程序下载站点:http://spring.io/projects/spring-framework 

    什么是轻量级框架?

    轻量级框架是和重量级框架(如:EJB)比较而言的,spring框架的核心包大概1M左右。

    什么是容器?

    容器可以装载对象、实例化对象和配置对象之间的依赖关系。

    IOC/DI?

    IOC:IOC的全称是inversion of control(控制反转)是指程序之间的依赖关系由依赖具体实现,变为依赖抽象接口。依赖抽象非具体!

    DI:DI的全称是dependence injection(依赖注入)是指程序之间的依赖关系由容器动态注入,而非硬编码实现。Spring里面的所有类都叫java bean,类和类之间的依赖关系都写到配置文件里面去,比如spring里面的所有的bean比作是项链的每一个珠子,而配置文件可比作是串起来每个珠子的线。

    AOP?

    AOP全称是aspect oriented programming(面向切面编程)是指程序的某一方面独立出来,单独设计。如:事务、日志、权限等。而OOP面向对象编程。

    IOC容器?

    在spring中最核心的思想是实现IOC容器,spring的大部分功能都是基于IOC容器的。

    AOP实现?

    除了IOC之外,Spring中最抢眼的是AOP实现了,在spring中提供了三种对AOP编程技术的实现:

            1.对持久层的支持

    Spring对持久层做了良好的支持,(封装了JDBC的操作,集成流行的ORM技术框架hibernate、iBATIS、mybatis,EclipseLink,JFinal、JDO)

            2.对web层支持

             a.Spring MVC

             b.对其他框架的集成(Struts、webwork)

             3.对其他框架和技术的集成

             RMI 和webservice

             EJB

            JavaMail

            定时任务和调度

    一、Spring例子初步

         1.新建web项目,然后通过properties传递name参数

           properties文件是在src目录下创建file文件,命名Name.properties即可。该例子的思想就是通过加载配置文件达到任意修改properties文件的目的。

          

         新建HelloWorld类

     1 package com.feimao.test;
     2 
     3 public class HelloWorld {
     4     private String name;
     5     public String getName(){
     6         return this.name;
     7     }
     8     public void setName(String name) {
     9         this.name = name;
    10     }
    11     public String hello(){
    12         return "hello , " + name;
    13     }
    14 }

         创建Tester类

     1   public static void main(String[] args){
     2 
     3         HelloWorld hw = new HelloWorld();
     4 
     5         String name = " ";
     6 
     7         Properties prop = new Properties();
     8 
     9         try {
    10 
    11             prop.load(Tester.class.getClassLoader().getResourceAsStream("Name.properties"));
    12 
    13             name = prop.getProperty("name");
    14 
    15         } catch (IOException e) {
    16 
    17             e.printStackTrace();
    18 
    19         }
    20 
    21         hw.setName(name);
    22 
    23         System.out.println(hw.hello());
    24 
    25     }
    26 
    27 }

    properties文件构造

    1 name=feimao

     二、Spring版本重写下上面的例子

           1.添加jar包,用了spring的两个核心jar包,一个是spring.jar,一个是日志commons-logging-1.2.jar。

           2.创建配置文件,目的是声明javabean,主要是通过xml的配置文件,配置beans中的id、class和其属性property

           3.获得bean工厂,然后通过容器实例,加载读取beans.xml

           4.测试

      创建beans.xml

    1 <?xml version="1.0" encoding="UTF-8"?>
    2 <!DOCTYPE beans PUBLIC "_//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"
    3         >
    4 <beans>
    5     <bean id = "hw" class = "com.feimao.test.HelloWorld">
    6             <property name = "name" value = "feimao"/>
    7     </bean>
    8 
    9 </beans>

     构造Spring版本的测试类

     1 package com.feimao.test;
     2 
     3 import org.springframework.beans.factory.BeanFactory;
     4 import org.springframework.beans.factory.xml.XmlBeanFactory;
     5 import org.springframework.core.io.ClassPathResource;
     6 import org.springframework.core.io.Resource;
     7 
     8 public class Tester {
     9     public static void main(String[] args){
    10         Resource r = new ClassPathResource("beans.xml");//读取配置文件
    11         BeanFactory factory = new XmlBeanFactory(r);//创建工厂,创建bean,获得工厂
    12         HelloWorld hw = (HelloWorld)factory.getBean("hw");//通过getBean方法由beans.xml中的id,获得class类。同时返回object类型需要强制转换
    13         System.out.println(hw.hello());
    14     }
    15 }

     三、演示USB 接口、移动硬盘、U 盘和计算机之间的依赖关系,以便更好的理解依赖注入和控制反转的思想。

            依赖注入最常用的方式:

                    设置注入和构造方法注入

      创建USB接口

    1 package com.feimao.test;
    2 
    3 public interface USB {
    4     public void read();
    5     public void write();
    6 
    7 }

     创建硬盘的类并实现USB接口

     1 package com.feimao.test;
     2 
     3 public class UDisk implements USB{
     4     @Override
     5     public void read() {
     6         System.out.println("from UDisk read!");
     7     }
     8     public void write() {
     9         System.out.println("to UDisk write!");
    10     }
    11 }

     创建移动硬盘的类并实现USB接口

     1 package com.feimao.test;
     2 
     3 public class MoveDisk implements USB {
     4     @Override
     5     public void read() {
     6         System.out.println("from MoveDisk read!");
     7     }
     8 
     9     public void write() {
    10         System.out.println("from MoveDisk read!");
    11     }
    12 }

    创建电脑类并依赖USB接口

     1 package com.feimao.test;
     2 
     3 public class Computer {
     4     private USB usb;
     5     public USB getUsb() {
     6         return usb;
     7     }
     8     public void setUsb(USB usb){
     9         this.usb = usb;
    10     }
    11     public void test(){
    12         usb.read();
    13         usb.write();
    14     }
    15 }

    Tseter类中添加Computer getBean方法

     1 public class Tester {
     2     public static void main(String[] args){
     3         Resource r = new ClassPathResource("beans.xml");//读取配置文件
     4         BeanFactory factory = new XmlBeanFactory(r);//创建工厂,创建bean,获得工厂
     5         /*HelloWorld hw = (HelloWorld)factory.getBean("hw");//通过getBean方法由beans.xml中的id,获得class类。同时返回object类型需要强制转换
     6         System.out.println(hw.hello());*/
     7         Computer c = (Computer) factory.getBean("c") ;
     8         c.test();
     9     }
    10 }

    在beans.xml文件中添加新的bean

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE beans PUBLIC "_//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"
     3         >
     4 <beans>
     5     <bean id = "hw" class = "com.feimao.test.HelloWorld">
     6             <property name = "name" value = "feimao"/>
     7     </bean>
     8     <bean id = "uDisk" class = "com.feimao.test.UDisk"/>
     9     <bean id = "moveDisk" class = "com.feimao.test.MoveDisk"/>
    10     <bean id = "c" class = "com.feimao.test.Computer">
    11         <property name = "usb" ref = "uDisk"/>
    12     </bean>
    13 
    14 </beans>

  • 相关阅读:
    动态开点线段树
    Codeforces Round #524 (Div. 2) F. Katya and Segments Sets(主席树)
    Codeforces Round #524 (Div. 2) E. Sonya and Matrix Beauty(字符串哈希,马拉车)
    Codeforces Round #523 (Div. 2) E. Politics(最小费+思维建图)
    UVA12118 Inspector's Dilemma(欧拉路径)
    UVA
    UVA-127 "Accordian" Patience(模拟)
    UVA-1599 Ideal Path(双向BFS)
    UVA-1572 Self-Assembly(拓扑排序判断有向环)
    UVA-122 Trees on the level(树的遍历)
  • 原文地址:https://www.cnblogs.com/feimaoyuzhubaobao/p/9980789.html
Copyright © 2011-2022 走看看