Spring框架学习(一)

大概内容:
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.java
import 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.java
public 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的两大核心技术之一。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值