Spring框架学习(一)

来源:互联网 发布:域名怎么和空间绑定 编辑:程序博客网 时间:2024/06/08 16:05

大概内容:
1.Spring框架的介绍
2.Spring容器(IOC控制反转)
3.Spring容器的简单演示

Spring框架介绍

spring是JavaEE的应用程序框架,也是以IOC和AOP为核心的轻量级容器框架,能够对JavaBean的生命周期进行管理;spring框架可以单独使用,也可以和struts、hibernate等组合使用。

spring框架架构:
这里写图片描述

Spring框架的优缺点:
优点:
1.轻量级的容器框架,没有侵入性
2.通过Spring容器更加容易组合对象之间的关系,面向接口编程,降低耦合
3.AOP技术更好的进行功能扩展,遵循OCP开发原则

缺点:业务功能比较依赖Spring特有的功能和Spring环境

Spring容器(IOC控制反转)

Spring容器是Spring框架最基础的部分,通过依赖注入(DI,也叫控制反转IOC)来实现对JavaBean的管理,其中一个最基本的概念——–BeanFactory是任何Spring应用的核心,也是工厂模式的一个实现,它使用IOC将应用配置和依赖说明从实际的应用代码中分离出来,使各个层次的代码不再具有绝对的依赖性,实现一定程度上的解耦。

在实际项目中,Spring容器其实就是配置一个xml文件(文件名一般用applicationContext.xml,一般位置放在和src下面的地方,这里都是以Java项目为基础),在此之前先需要写一个JavaBean的类Person:

//Person.java/* * Spring中的JavaBean类尽量都写成标准形式:set和get方法、空参构造方法 */public class Person {    private String name;    private Integer age;    public Person() {    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public Integer getAge() {        return age;    }    public void setAge(Integer age) {        this.age = age;    }    @Override    public String toString() {        return "Person [name=" + name + ", age=" + age + "]";    }}
<!-- aaplicationContext.xml --><?xml version="1.0" encoding="UTF-8"?><!-- 下面部分名称空间的配置,这里虽然没用到,后面可能会用! --><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:context="http://www.springframework.org/schema/context"    xmlns:aop="http://www.springframework.org/schema/aop"              xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd        http://www.springframework.org/schema/context        http://www.springframework.org/schema/context/spring-context.xsd        http://www.springframework.org/schema/aop        http://www.springframework.org/schema/aop/spring-aop.xsd        "> <!-- singleton表示单例,即每次都是拿到同一个实例,默认为singleton -->    <bean id="p1" class="cn.hncu.domain.Person" scope="    singleton">        <property name="name" value="Jack"></property>        <property name="age" value="22"></property>    </bean> <!-- prototype为原型作用域,即每次创建的是一个新对象  -->    <bean id="p2" class="cn.hncu.domain.Person" scope="prototype">        <property name="name" value="Rose"></property>        <property name="age" value="25"></property>    </bean></beans>

我对Spring容器的理解:可以说就是一个工厂,在整个项目中所有需要以及可能用到的实例对象,都能通过Spring来帮我们完成创建对象的工作,而我们只需要直接拿过来用就行了,这样做的很大好处就是类和类之间的依赖关系没那么强了,降低了耦合性。

IOC(Inversion of Control):控制反转的基本概念是不直接创建对象,通过在Xml配置文件中描述创建Bean的方式,在需要使用到Bean是,再通过依赖注入(DI)对属性进行赋值。
Spring中注入有三种方式:set注入、接口注入、构造注入,其中接口注入和构造注入不常使用,这里就只演示set注入:

<bean  id="user" class="cn.hncu.demo1.Person">   <property name="pname" value="Tom">   </property>   <property name="page" value="21">   </property></bean>

Spring中Bean的作用域有四种:即singleton(单例)、prototype(多实例)、request、session四种。

1.singleton表示单例,即在Spring容器中共享一个Bean实例,并且所有对Bean的请求,只要id和该Bean定义相匹配,拿到的都是同一个Bean实例。

2.prototype表示多实例,即一个Bean对应多个实例,每一次请求都会拿到一个新的Bean实例

3.request表示每次请求都会拿到新的Bean实例,同时该Bean实例仅在当前HTTPRequest中有效

4.session表示每次请求都会拿到一个新的Bean实例,同时该Bean实例仅在当前HTTPSession中有效

Spring容器的简单演示(Java项目中演示)

1.创建好JavaBean的类

//User.javaimport java.util.Arrays;import java.util.List;import java.util.Map;import java.util.Set;public class User {    private String name;    private Integer age;    private Cat cat;    private List<String> addrs;    private Map<String,Object> map;    private Set<String> set;    private Object[] objs;    public User() {    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public Integer getAge() {        return age;    }    public void setAge(Integer age) {        this.age = age;    }    public Cat getCat() {        return cat;    }    public void setCat(Cat cat) {        this.cat = cat;    }    public List<String> getAddrs() {        return addrs;    }    public void setAddrs(List<String> addrs) {        this.addrs = addrs;    }    public Map<String, Object> getMap() {        return map;    }    public void setMap(Map<String, Object> map) {        this.map = map;    }    public Set<String> getSet() {        return set;    }    public void setSet(Set<String> set) {        this.set = set;    }    public Object[] getObjs() {        return objs;    }    public void setObjs(Object[] objs) {        this.objs = objs;    }    @Override    public String toString() {        return "User [name=" + name + ", age=" + age + ", cat=" + cat + ", addrs=" + addrs + ", map=" + map + ", set=" + set + ", objs=" + Arrays.toString(objs) + "]";    }}//Cat.javapublic class Cat {    private String name;    private String hobby;    public Cat() {    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getHobby() {        return hobby;    }    public void setHobby(String hobby) {        this.hobby = hobby;    }    @Override    public String toString() {        return "Cat [name=" + name + ", hobby=" + hobby + "]";    }}

2.配置文件

<!-- applicationContext.xml --><?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:context="http://www.springframework.org/schema/context"    xmlns:aop="http://www.springframework.org/schema/aop"    xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd        http://www.springframework.org/schema/context        http://www.springframework.org/schema/context/spring-context.xsd        http://www.springframework.org/schema/aop        http://www.springframework.org/schema/aop/spring-aop.xsd        ">    <!-- 注意,所有bean要尽量写标准的形式,要有空参构造,setter-getter方法  -->    <!-- 导入其它xml配置文件 -->    <import resource="cat.xml"/>    <bean id="user" class="cn.hncu.demo2.User">        <property name="name" value="Jack"></property>        <property name="age" value="23"></property>        <!-- 属性变量是一个bean,ref表示引用已经定义好的cat1  -->        <property name="cat" ref="cat1"></property>        <!-- 属性变量是一个List -->        <property name="addrs">           <list>              <value>益阳</value>              <value>上海</value>              <value>北京</value>              <value>天上</value>           </list>        </property>        <!-- 属性变量是一个Map -->        <property name="map">          <map>            <entry key="name" value="Mike" />            <entry key="age" value="20" />          </map>        </property>        <!-- 属性变量是一个Set -->        <property name="set">          <set>             <value>111</value>             <value>222</value>             <value>333</value>          </set>        </property>        <!-- 属性变量是一个Object[], 集合嵌套 -->        <property name="objs">           <array>              <value>字符串</value>              <!-- 引用外部bean -->              <ref bean="cat2"/>              <!-- 内部匿名bean -->              <bean class="cn.hncu.demo2.Cat">                 <property name="name" value="灰太狼"></property>                 <property name="hobby" value="抓羊"></property>              </bean>                           <list>                 <value>element1</value>                 <value>element2</value>                 <value>element3</value>              </list>           </array>        </property>     </bean></beans>-----------------------------------------------------------------<!-- cat.xml --><?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:context="http://www.springframework.org/schema/context"    xmlns:aop="http://www.springframework.org/schema/aop"    xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd        http://www.springframework.org/schema/context        http://www.springframework.org/schema/context/spring-context.xsd        http://www.springframework.org/schema/aop        http://www.springframework.org/schema/aop/spring-aop.xsd        ">    <bean id="cat1" class="cn.hncu.demo2.Cat">        <property name="name" value="Tom"></property>        <property name="hobby" value="fish"></property>    </bean>    <bean id="cat2" class="cn.hncu.demo2.Cat">        <property name="name" value="Rose"></property>        <property name="hobby" value="singing"></property>    </bean></beans>

3.通过配置文件读取Bean
注意:Spring 框架需要我们手动去导包,否则项目无法编译成功,直接报错,关于Spring包可以去网上下载,这就不展示了。因为Spring的包比较多,我们可以按需进行导包,此处演示需要导的包如下:
这里写图片描述

import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Demo2 {    @Test    public void demo(){        ApplicationContext ctx = new ClassPathXmlApplicationContext("cn/hncu/demo2/demo2.xml");//配置文件的位置        User user = ctx.getBean("user", User.class);        System.out.println(user);    }}

4.运行结果
这里写图片描述

总结:简单的了解了一下Spring框架、IOC技术以及演示了Spring容器,这些都是Spring的基础的知识点,其中IOC容器是Spring的两大核心技术之一。

原创粉丝点击