Spring配置入门案例(配置文件方式)

1. IOC(控制反转)

什么是IOC

  1. ioc控制反转,把对象的创建交给spring管理
  2. ioc操作两部分
    (1)ioc的配置文件方式
    (2)ioc的注解方法

ioc底层原理

  1. ioc底层原理使用技术
    (1)xml配置文件
    (2)dom4j解析xml
    (3)工厂设计模式
    (4)反射

  2. 原理
    第一步:创建xml文件,配置要创建的对象

id="user" class="cn.wang.ioc.User">

第二步:创建工厂类,使用dom4j解析配置文件,反射创建对象

//1.使用dom4j解析xml文件
//根据id值user,得到id值对应的class属性值
String classValue="class属性值";
//2.使用反射创建对象
Class clazz=Class.forName(classValue);
//创建对象
User user=clazz.newInstance();
return user

ioc入门案例

第一步:导入jar包

Spring配置入门案例(配置文件方式)_第1张图片
做spring最基本功能是,导入Beans,Core,Context,SpEL四个核心jar包即可

第二步:创建类,在类里创建方法

public class User{
    public void add(){
        System.out.println("add()");
    }
}

第三步:创建spring配置文件,配置创建类

(1) spring的核心配置文件的名称和位置是不固定的,建议放在src目录下,官方建议文件名:applicationContext.xml
(2)引入schema约束


<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

(3) 配置创建类

<bean id="user" class="cn.wang.ioc.User">bean>

第四步:测试对象的创建

public class TestIoc {
    @Test
    public void testPerson() {
        // 1.加载Spring配置文件
        ApplicationContext context = new ClassPathXmlApplicationContext(
                "bean1.xml");
        // 2.得到配置文件创建的对象
        Person person = (Person) context.getBean("person");
        System.out.println(person);
    }
}

spring的bean管理(xml方式)

bean实例化方式

  1. 在spring里通过配置文件创建对象
  2. bean实例化的三种方式
    第一种:使用类的无参构造方法创建(前提有无参构造)
<bean id="user" class="cn.wang.ioc.User">bean>

第二种:使用静态工厂创建对象
(1)创建静态工厂类

//Person的静态工厂
public class PersonFactory {
    // 静态方法,返回Person对象
    public static Person getInstance() {
        return new Person();
    }
}

(2)配置文件配置静态工厂

<bean id="person" class="cn.wang.property.PersonFactory"
        factory-method="getInstance">bean>

第三种:使用实例工厂创建对象
(1)创建实例工厂类

//Person的实例工厂
public class PersonFactory {
    public Person getInstance() {
        return new Person();
    }
}

(2)配置文件配置实例工厂

<bean id="personFactory" class="cn.wang.property.PersonFactory">bean>
<bean id="person" factory-bean="personFactory"
factory-method="getInstance">bean>

bean标签常用属性

1. id属性

id属性址名称任意命名
id属性值不包含特殊符号
根据id得到配置对象

2. class属性

创建对象所在类的全路径

3. name属性

功能与id相同,但是可以包含特殊符号

4. scope属性

(1) singtleton:默认值,单例

Person p1 = (Person) context.getBean("person");
Person p2 = (Person) context.getBean("person");

多次调用返回同一对象

(2)prototype:多例,多次调用返回不同对象
(3)request:创建对象放到request域中
(4)session:创建对象方法哦session域中
(5)globalSession:创建对象放到globalSession域中

2. DI(依赖注入)

什么是DI

  1. 创建对象时,向类里的属性设置值
  2. 属性注入的三种方式
    (1)使用set方法注入
    (2)使用有参构造注入
    (3)使用接口注入
  3. spring框架中支持前两种方式
    (1)使用set方法注入
<bean id="person" class="cn.wang.property.Person">

        <property name="pname" value="zs">property>
bean>

(2)使用有参构造注入

public class Person {
    private String pname;

    public void setPname(String pname) {
        this.pname = pname;
    }

}
<bean id="user" class="cn.wang.ioc.User">
        
        <constructor-arg name="pname" value="Tony">constructor-arg>
    bean>

(3)注入对象类型属性
1. 创建service和dao类
在service中得到dao
2. 具体实现过程
在service中把dao作为属性
生成dao的set方法

public class UserService {
    // 1.定义UserDao类型属性
    private UserDao userDao;

    // 2.生成set方法
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
}
  1. 配置文件注入关系
<bean id="userDao" class="cn.wang.property.UserDao">
        <property name="name" value="Tom">property>
    bean>
    <bean id="userService" class="cn.wang.property.UserService">
        
        
        <property name="userDao" ref="userDao">property>
    bean>

(4)p名称空间注入
Spring配置入门案例(配置文件方式)_第2张图片

p名称空间注入
(5)注入复杂类型属性


    
    <bean id="person" class="cn.wang.property.Person">
        <property name="pname" value="zs">property>
        <property name="arrs">
            <list>
                <value>aaavalue>
                <value>bbbvalue>
                <value>cccvalue>
            list>
        property>
        <property name="list">
            <list>
                <value>qqqvalue>
                <value>wwwvalue>
                <value>eeevalue>
            list>
        property>
        <property name="map">
            <map>
                <entry key="001" value="Tom">entry>
                <entry key="002" value="Amy">entry>
                <entry key="003" value="Jim">entry>
            map>
        property>
        <property name="props">
            <props>
                <prop key="username">adminprop>
                <prop key="passwprd">adminprop>
            props>
        property>
    bean>

3. IOC和DI区别

(1)IOC控制反转,把对象创建交给spring配置
(2)DI依赖注入,向类里面属性注入值
(3)关系,依赖注入不能单独存在,需要在IOC基础上完成操作

你可能感兴趣的:(框架)