Spring入门--IOC

一:IOC(控制反转)&DI(依赖注入)

IOC:控制反转是spring的2大核心之一,简单来说就是创建对象由以前的自己new 构造方法来调用,变成交给Spring创建对象。对于这个bean(IOC中所有的对象都称之为bean)的创建,Spring提供了2种配置方式方式:

(1)applicationContext.xml配置文件方式配置。

(2)注解方式配置。

DI:依赖注入,简单地说就是拿到的对象的属性,已经被注入好相关值了,直接使用即可。DI是IOC的一种实现方式

 

二:一个IOC的例子(以applicationContext.xml配置文件方式配置)

1.新建项目(java project)

 

2.导入jar包

下载spring所需要的jar包: https://pan.baidu.com/s/1DEDA0nx1FgURZHBarcDGlA (提取码:ebs5)

 

 

3.编写2个对象

package DTO;
public class Category {
    private int id;
    private String name;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
package DTO;

public class Product {
    private int id;
    private Category category;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public Category getCategory() {
        return category;
    }
   
    public void setCategory(Category category) {
        this.category = category;
    }
}

 

4.编写applicationContext.xml

在src目录下新建一个applicationContext.xml,它是Spring的核心配置文件,通过配置即可获取Category对象

<?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:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
   http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/aop
   http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
   http://www.springframework.org/schema/tx
   http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
   http://www.springframework.org/schema/context
   http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <!-- 添加一个Category对象 -->
    <bean name="category" class="DTO.Category">
        <!-- 往Category对象中注入一个name属性 -->
        <property name="name" value="category" />
    </bean>

    <!-- 添加一个Product对象 -->
    <bean name ="product" class="DTO.Product">
       <!-- 往Product对象中注入一个id属性 -->
       <property name="id" value="01" />
       <!-- 往Product对象中注入一个Category对象属性 -->
       <property name="category" ref="category" />
    </bean>
</beans>

 

5.测试

public class test {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml"});
        //获取Category对象
        Category category = (Category) context.getBean("category");
        //获取Category对象的name属性
        System.out.println(category.getName()); //category

        //获取Product对象
        Product product = (Product) context.getBean("product");
        //获取Product对象的Category对象属性
        System.out.println(product.getCategory());  //DTO.Category@52aa911c
        //获取Product对象的id属性
        System.out.println(product.getId()); //01
    }
}

 

 

三:一个IOC的例子(以注解方式配置注入对象的行为)

1.在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:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
   http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/aop
   http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
   http://www.springframework.org/schema/tx
   http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
   http://www.springframework.org/schema/context
   http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <!-- 添加注解配置 -->
    <context:annotation-config/>
    <!-- 添加一个Category对象 -->
    <bean name="category" class="DTO.Category">
        <!-- 往Category对象中注入一个name属性 -->
        <property name="name" value="category" />
    </bean>

    <!-- 添加一个Product对象 -->
    <bean name ="product" class="DTO.Product">
       <!-- 往Product对象中注入一个id属性 -->
       <property name="id" value="01" />
       <!-- 往Product对象中注入一个Category对象属性 -->
       <property name="category" ref="category" />
    </bean>

</beans>

 

2.在类中添加注解(@Autowired,@Resource)

package DTO;

import org.springframework.beans.factory.annotation.Autowired;

public class Product {

    private int id;
    @Autowired  //这里的@Autowired也可以放在改属性的set方法上,或者是利用@Resource(name="category")
    private Category category;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }

    public Category getCategory() {
        return category;
    }

    public void setCategory(Category category) {
        this.category = category;
    }
}

 

3.测试

package DTO;

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

public class test {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml"});
        //获取Category对象
        Category category = (Category) context.getBean("category");
        //获取Category对象的name属性
        System.out.println(category.getName()); //category

        //获取Product对象
        Product product = (Product) context.getBean("product");
        //获取Product对象的Category对象属性
        System.out.println(product.getCategory());  //DTO.Category@52aa911c
        //获取Product对象的id属性
        System.out.println(product.getId()); //01
    }
}

 

四:一个IOC的例子(以注解方式配置bean本身)

1.在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:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
   http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/aop
   http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
   http://www.springframework.org/schema/tx
   http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
   http://www.springframework.org/schema/context
   http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    
    <!-- 告诉spring,所有bean都放在DTO这个包下 -->
    <context:component-scan base-package="DTO"/>

<!-- 添加注解配置 --> <context:annotation-config/> <!-- 添加一个Category对象 --> <bean name="category" class="DTO.Category"> <!-- 往Category对象中注入一个name属性 --> <property name="name" value="category" /> </bean> <!-- 添加一个Product对象 --> <bean name ="product" class="DTO.Product"> <!-- 往Product对象中注入一个id属性 --> <property name="id" value="01" /> <!-- 往Product对象中注入一个Category对象属性 --> <property name="category" ref="category" /> </bean> </beans>

 

2.在类中添加注解(@Component)

@Component("category")
public class Category {

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    private int id;
    private String name = "category"; //因为配置从applicationContext.xml中移出来了,所以属性初始化放在属性声明上进行了
}
@Component("product")
public class Product {

    private int id = 1;
    @Autowired  //这里的@Autowired也可以放在set方法上,或者是利用@Resource(name="category")
    private Category category;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }

    public Category getCategory() {
        return category;
    }

    public void setCategory(Category category) {
        this.category = category;
    }
}

 

3.测试

public class test {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml"});
        //获取Category对象
        Category category = (Category) context.getBean("category");
        //获取Category对象的name属性
        System.out.println(category.getName()); //category

        //获取Product对象
        Product product = (Product) context.getBean("product");
        //获取Product对象的Category对象属性
        System.out.println(product.getCategory());  //DTO.Category@52aa911c
        //获取Product对象的id属性
        System.out.println(product.getId()); //01
    }
}

 

posted @ 2019-05-29 11:14  nianyuyu  阅读(147)  评论(0)    收藏  举报