美文网首页
Spring入门(一)之初识

Spring入门(一)之初识

作者: 穿梭在围城 | 来源:发表于2018-12-02 15:22 被阅读0次

一、认识Spring

了解一个技术要先知道它是干嘛的,我的理解上Spring的本质就是一个对象容器。我们把对象交给Spring创建和管理(IOC)和在用到对象的时候由Spring帮我们从容器中取出并注入(DI)到我们使用的地方。

  • IOC(Inversion of Control):控制反转;将对象的创建方式由开发人员转移到Spring的框架中。
  • DI(Dependency Injection):依赖注入;由Spring将容器中的对象注入到你要使用的对象引用。

这两个核心技术的实现就成就了Spring的大半江山。

二、Spring项目中的jar包认识(简单)

image.png
  • Spring-core

    这个jar文件包含Spring框架基本的核心工具类,Spring其它组件要都要使用到这个包里的类,是其它组件的基本核心,当然你也可以在自己的应用系统中使用这些工具类。

  • spring-beans.jar

    这个jar文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean以及进行Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC/DI支持,引入spring-core.jar及spring-beans.jar文件就可以了。

  • spring-expression.jar

    这个jar文件是Spring的表达式。

  • spring-aop.jar

    这个jar文件包含在应用中使用Spring的AOP特性时所需的类。使用基于AOP的Spring特性,如声明型事务管理(Declarative Transaction Management),也要在应用里包含这个jar包。

  • spring-context.jar

    这个jar文件为Spring核心提供了大量扩展。可以找到使用Spring ApplicationContext特性时所需的全部类,JDNI所需的全部类,UI方面的用来与模板(Templating)引擎如Velocity、FreeMarker、JasperReports集成的类,以及校验Validation方面的相关类。

  • spring-dao.jar

    这个jar文件包含Spring DAO、Spring Transaction进行数据访问的所有类。为了使用声明型事务支持,还需在自己的应用里包含spring-aop.jar。

  • spring-hibernate.jar

    这个jar文件包含Spring对Hibernate 2及Hibernate 3进行封装的所有类。

  • spring-jdbc.jar

    这个jar文件包含对Spring对JDBC数据访问进行封装的所有类。

  • spring-orm.jar

    这个jar文件包含Spring对DAO特性集进行了扩展,使其支持 iBATIS、JDO、OJB、TopLink,因为Hibernate已经独立成包了,现在不包含在这个包里了。这个jar文件里大部分的类都要依赖spring-dao.jar里的类,用这个包时你需要同时包含spring-dao.jar包。

  • spring-remoting.jar

    这个jar文件包含支持EJB、JMS、远程调用Remoting(RMI、Hessian、Burlap、Http Invoker、JAX-RPC)方面的类。

  • spring-support.jar

    这个jar文件包含支持缓存Cache(ehcache)、JCA、JMX、邮件服务(Java Mail、COS Mail)、任务计划Scheduling(Timer、Quartz)方面的类。

  • spring-web.jar

    这个jar文件包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。

  • spring-webmvc.jar

    这个jar文件包含Spring MVC框架相关的所有类。包含国际化、标签、Theme、视图展现的FreeMarker、JasperReports、Tiles、Velocity、XSLT相关类。当然,如果你的应用使用了独立的MVC框架,则无需这个JAR文件里的任何类。

  • spring-mock.jar

    这个jar文件包含Spring一整套mock类来辅助应用的测试。Spring测试套件使用了其中大量mock类,这样测试就更加简单。模拟HttpServletRequest和HttpServletResponse类在Web应用单元测试是很方便的。

三、Spring项目的简单搭建

image.png
package cn.demo.domain;
/**
 * 
 * @ClassName:  User   
 * @Description:TODO(定义User类)   
 * @date:   2018年12月2日 下午2:42:20   
 */
public class User {

    private String name;//姓名
    private int age;//年龄

    public User() {
        super();
    }

    public User(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User [name=" + name + ", age=" + age + "]";
    }

}

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://www.springframework.org/schema/beans"
    xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">

    <bean name="user" class="cn.demo.domain.User">
        <property name="name" value="XiaoMing"></property>
        <property name="age" value="18"></property>
    </bean>

</beans>
package cn.demo.test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import cn.demo.domain.User;

public class HelloSpring {
    
    @Test
    public void fun01(){
        //创建Spring容器
        ApplicationContext ac = new ClassPathXmlApplicationContext("application-context.xml");
        //从容器获取User对象
        User user = (User) ac.getBean("user");
        //验证
        System.out.println(user);
    }

}

[图片上传失败...(image-f96d43-1543735360043)]

四、Spring对象的创建方式(三种)

  • Spring自己创建(常用)
  • 静态工厂创建
  • 动态工厂创建

五、Spring属性注入的方式

  1. 构造方法注入
image.png
  1. set方法注入

    • 简单类型的注入

      • <property>标签注入
      image.png
      • p命名空间注入
image.png
  • 复杂类型的注入

    package cn.zw.domain;
    
    import java.util.Arrays;
    import java.util.List;
    import java.util.Map;
    import java.util.Properties;
    
    public class CollectionBean {
       private Object[] arr;
       
       private List list;
       
       private Map map;
       
       private Properties props;
    
       public Properties getProps() {
           return props;
       }
    
       public void setProps(Properties props) {
           this.props = props;
       }
    
       public Object[] getArr() {
           return arr;
       }
    
       public void setArr(Object[] arr) {
           this.arr = arr;
       }
    
       public List getList() {
           return list;
       }
    
       public void setList(List list) {
           this.list = list;
       }
    
       public Map getMap() {
           return map;
       }
    
       public void setMap(Map map) {
           this.map = map;
       }
    
       @Override
       public String toString() {
           return "CollectionBean [arr=" + Arrays.toString(arr) + ", list=" + list + ", map=" + map + ", props=" + props
                   + "]";
       }   
    }
    
    <!-- 复杂类型的注入 -->
    <bean name="collectionBean" class="cn.zw.domain.CollectionBean">
        <!-- 
            数组 :
                1.数组中只需要注入一个值得话,当成简单类型注入就行
                 <property name="arr" ref="car"></property>
                2.装多值的情况    
         -->
        <property name="arr">
            <array>
                <value>tom</value>
                <value>19</value>
                <ref bean="car"/>
            </array>
        </property>
        
        <!-- List
                1.只需要注入一个值得话,当成简单类型注入就行
                <property name="list" value="car"></property>
                2.装多值的情况 -->
        <property name="list">
            <list>
                <value>zhaowei</value>
                <value>19</value>
                <ref bean="car"/>
            </list>
        </property>
        
        <!-- Map -->
        <property name="map" >
            <map>
                <entry key="name" value="zhaowei"></entry>
                <entry key="car" value-ref="car"></entry>
            </map>
        </property>
        
        <!-- properties类型的注入 -->
        
        <property name="props">
            <props>
                <prop key="name">zhaowei</prop>
            </props>
        </property>
        
     </bean>

相关文章

网友评论

      本文标题:Spring入门(一)之初识

      本文链接:https://www.haomeiwen.com/subject/onvjcqtx.html