spring 框架

一、Spring框架的容器
Spring容器提供了一种管理方法,致力于解决我们各个层级之间的对象的调用关系。
在这里插入图片描述
我们通常调用各层级对象的时候,需要不断创建对象,一次访问就需要创建两个对象;如果我们使用Spring容器,将不同层级的对象放入容器中,每次使用的时候调用容器中的对象,就不用创建那么多对象,达到节约内存空间的目的。简单来讲,Spring容器就是存储JavaBean对象的容器。

二、Spring框架的第一大特性——IOC
IOC(inversion of controller)指的是控制反转,简单来书,就是讲创建对象的过程或者创建对象的权限交给了spring框架来帮我们处理,我们不用再通过new的方式来创建JavaBean对象,这个过程就叫做IOC。

创建JavaBean对象的三种方法
首先创建一个JavaBean对象

package com.itheima.main;

public class User {
    private String name;
    private Integer age;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void eat(){
        System.out.println(this.name+"正在吃饭");
    }

    public Integer getAge() {
        return age;
    }

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

}

方法一: 使用默认构造创建JavaBean对象
首先创建 applicationContext.xml 文件并配置我们的对象

<bean id="user" class="com.itheima.main.User">

</bean>

然后从容器中获取我们的JavaBean对象

 @Test
 public void getBean() throws Exception {
     ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
     User bean = (User) context.getBean("user");
     bean.eat();
 }

方法二: 使用静态工厂创建JavaBean对象

创建bean的工厂类

package com.itheima.main;

public class BeanFactory {
    public static User getBean(){
        return new User();
    }
}

在配置文件中进行配置

<bean id="user2" class="com.itheima.main.BeanFactory" factory-method="getBean">
</bean>

获取JavaBean对象

@Test
public void getBean2() throws Exception {
     ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
     User bean = (User) context.getBean("user2");
     bean.eat();
 }

方式三: 使用动态工厂创建JavaBean对象
创建工厂类的方式与上面相同
在配置文件中进行配置

 <bean id="createFactory" class="com.itheima.main.BeanFactory"></bean>
  <bean id="user3" factory-bean="createFactory" factory-method="getBean"></bean>

获取JavaBean对象

@Test
public void getBean3() throws Exception {
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    User bean = (User) context.getBean("user3");
    bean.eat();
}

Bean的作用域和作用范围
Bean属性scope可以声明bean的作用域范围,Bean的作用域范围有四种:

  • Prototype:多例,每次调用都会创建一个新的实例
  • Singleton:单例,创建一个对象,每次调用都是用这个对象
  • Request:适用于web开发中,将我们的对象存储在request域对象中
  • Session:适用于web开发中,将我们的对象存储在session域对象中

JavaBean的生命周期
我们可以在JavaBean类中添加init-method与destroy-method两个方法,实现bean在初始化和关闭的时候调用的方法,然后在配置文件中进行配置。
JavaBean类

package com.itheima.main;

public class User {
    private String name;
    private Integer age;

    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 void initMethod() {
        System.out.println(this.name + "出生了");
    }

    public void eat() {
        System.out.println(this.name + "正在吃饭");
    }

    // 关闭方法
    public void destroyMethod() {
        System.out.println(this.name + "死亡了");
    }
}

配置文件

 <bean id="user" class="com.itheima.main.User" init-method="initmethod" destroy-method="destroymethod">

 </bean>

三、Spring框架的第二大特性——DI
DI(dependency injection)指的是依赖注入,简单来说就是使用spring框架对我们的JavaBean对象赋值的过程。

1、使用setter方法进行赋值(使用上文中创建的JavaBean类)

注意:一定要给属性生成对应的setter方法

配置JavaBean类的属性

 <bean id="user" class="com.itheima.main.User" init-method="initmethod" destroy-method="destroymethod">
        <property name="name" value="张三"></property>        
        <property name="age" value="20"></property>
</bean>

从容器中获取我们的JavaBean对象

 @Test
 public void getBean() throws Exception {
      ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
      User bean = (User) context.getBean("user");
      bean.eat();
  
  }

2、使用构造器来申明JavaBean
在JavaBean中生成带所有属性的构造方法

public User() {
    super();
}

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

在配置文件中申明JavaBean对象

 <bean id="user" class="com.itheima.main.User">
        <constructor-arg name="name" value="张三"></constructor-arg>
        <constructor-arg name="age" value="20"></constructor-arg>
 </bean>

申明的另一种方法:

<bean id="user" class="com.itheima.main.User">
    <constructor-arg index="0" type="java.lang.String" value="张三"></constructor-arg>
    <constructor-arg index="1" type="java.lang.Integer" value="20"></constructor-arg>
</bean>

调用JavaBean的属性

 @Test
 public void getBean() throws Exception {
     ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
     User bean = (User) context.getBean("user");
     bean.eat();
 }

3、为集合属性赋值
创建一个含有集合属性的JavaBean类

package com.itheima.main;

import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

public class CollectProperty {
    private List list;
    private Set set;
    private Map map;
    private Properties properties;
    public List getList() {
        return list;
    }
    public void setList(List list) {
        this.list = list;
    }
    public Set getSet() {
        return set;
    }
    public void setSet(Set set) {
        this.set = set;
    }
    public Map getMap() {
        return map;
    }
    public void setMap(Map map) {`在这里插入代码片`
        this.map = map;
    }
    public Properties getProperties() {
        return properties;
    }
    public void setProperties(Properties properties) {
        this.properties = properties;
    }
    
}

为集合属性注入值

<bean id="collectionProperty" class="com.itheima.main.CollectProperty">
        <property name="list">
            <list>
                <value>abc</value>
                <value>123</value>
                <value>张三</value>
            </list>
        </property>
        <property name="set">
            <set>
                <value>成龙</value>
                <value>刘德华</value>
                <value>甄子丹</value>
            </set>
        </property>
        <property name="map">
            <map>
                <entry key="name" value="张三"></entry>           
                <entry key="age" value="20"></entry>
            </map>
        </property>
        <property name="properties">
            <props>
                <prop key="name">张三</prop>
                <prop key="age">20</prop>
            </props>
        </property>
 </bean>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值