企业级开发框架  

  Spring Framework 是整个 Spring 生态的基础,各个模块都是基于 Spring Framework 衍生出来的。

  Spring 的两大核心机制 IOC 控制翻转、AOP 面向切面编程。

    IOC 对象创建不再由开发者完成,而是容器自动创建,开发者直接取出来用即可。

1、新建maven项目

2、添加依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.sunjian</groupId>
    <artifactId>springPrac</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.2.RELEASE</version>
        </dependency>
    </dependencies>

</project>

3、新建实体类

Student

package com.sunjian.entity;

/**
 * @author sunjian
 * @date 2020/3/14 9:13
 */
public class Student {
    private String id;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    private String name;
    private String age;

    @Override
    public String toString() {
        return "Student{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", age='" + age + '\'' +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

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

Student2

package com.sunjian.entity;

/**
 * @author sunjian
 * @date 2020/3/14 10:05
 */
public class Student2 {
    private String id;
    private String name;
    private String age;

    public Student2(String id, String name, String age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", age='" + age + '\'' +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

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

Student3

package com.sunjian.entity;

/**
 * @author sunjian
 * @date 2020/3/14 10:05
 */
public class Student3 {
    private String id;
    private String name;
    private String age;
    private Student4 student4;

    public Student4 getStudent4() {
        return student4;
    }

    public void setStudent4(Student4 student4) {
        this.student4 = student4;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

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

    @Override
    public String toString() {
        return "Student3{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", age='" + age + '\'' +
                ", student4=" + student4 +
                '}';
    }
}

Student4

package com.sunjian.entity;

/**
 * @author sunjian
 * @date 2020/3/14 10:05
 */
public class Student4 {
    private String id;
    private String name;
    private String age;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", age='" + age + '\'' +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

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

Students

package com.sunjian.entity;

/**
 * @author sunjian
 * @date 2020/3/14 12:05
 */
public class Students {
    private String id;
    private String name;
    private String age;
    private Classes classes;

    @Override
    public String toString() {
        return "Students{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", age='" + age + '\'' +
                '}';
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

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

    public Classes getClasses() {
        return classes;
    }

    public void setClasses(Classes classes) {
        this.classes = classes;
    }
}

Classes

package com.sunjian.entity;

import java.util.List;

/**
 * @author sunjian
 * @date 2020/3/14 12:02
 */
public class Classes {
    private String id;
    private String name;
    private List<Students> students;

    public List<Students> getStudents() {
        return students;
    }

    public void setStudents(List<Students> students) {
        this.students = students;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Classes{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", students=" + students +
                '}';
    }
}

4、在resources目录下新建spring.xml文件,添加bean

<?xml version="1.0" encoding="UTF-8"?>
<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">

    <!-- 无参构造方式 -->
    <bean id="stu" class="com.sunjian.entity.Student">
        <property name="id" value="1"></property>
        <!--<property name="name" value="sunjian"></property>-->
        <!--特殊字符处理-->
        <property name="name">
            <value>
                <![CDATA[<孙健>]]>
            </value>
        </property>
        <property name="age" value="32"></property>
    </bean>

    <!-- 有参构造方式 1-->
    <bean id="stu_1" class="com.sunjian.entity.Student2">
        <constructor-arg index="0" value="1"></constructor-arg>
        <constructor-arg index="1" value="孙健"></constructor-arg>
        <constructor-arg index="2" value="31"></constructor-arg>
    </bean>
    <!-- 有参构造方式 2 常用 -->
    <bean id="stu_2" class="com.sunjian.entity.Student2">
        <constructor-arg name="id" value="1"></constructor-arg>
        <constructor-arg name="name" value="孙健"></constructor-arg>
        <constructor-arg name="age" value="32"></constructor-arg>
    </bean>
    <!-- 有参构造方式 3-->
    <bean id="stu_3" class="com.sunjian.entity.Student2">
        <constructor-arg value="1"></constructor-arg>
        <constructor-arg value="孙健"></constructor-arg>
        <constructor-arg value="33"></constructor-arg>
    </bean>

    <!-- 两个bean的级联方式 一对一-->
    <bean id="stu3" class="com.sunjian.entity.Student3">
        <property name="id" value="1"></property>
        <property name="age" value="33"></property>
        <property name="name" value="sunjian stu3"></property>
        <property name="student4" ref="stu4"></property>
    </bean>
    <bean id="stu4" class="com.sunjian.entity.Student4">
        <property name="id" value="1"></property>
        <property name="age" value="34"></property>
        <property name="name" value="sunjian stu4"></property>
    </bean>

    <!-- bean对象之间的集合注入 一对多-->
    <bean id="classes" class="com.sunjian.entity.Classes">
        <property name="id" value="1"></property>
        <property name="name" value="243班"></property>
        <property name="students">
            <list>
                <ref bean="stus1"></ref>
                <ref bean="stus2"></ref>
                <ref bean="stus3"></ref>
            </list>
        </property>
    </bean>
    <bean id="stus1" class="com.sunjian.entity.Students">
        <property name="id" value="1"></property>
        <property name="name" value="张三"></property>
        <property name="age" value="30"></property>
    </bean>
    <bean id="stus2" class="com.sunjian.entity.Students">
        <property name="id" value="2"></property>
        <property name="name" value="李四"></property>
        <property name="age" value="31"></property>
    </bean>
    <bean id="stus3" class="com.sunjian.entity.Students">
        <property name="id" value="3"></property>
        <property name="name" value="赵四"></property>
        <property name="age" value="32"></property>
    </bean>

</beans>

5、测试类

package com.sunjian.test;

import com.sunjian.entity.*;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @author sunjian
 * @date 2020/3/14 9:14
 */
public class Test {
    public static void main(String[] args) {
        // 加载IOC容器
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");

        System.out.println("-------------无参构造方式-------------------------");

        // 根据bean的id去拿
//        Student student = (Student) applicationContext.getBean("stu");
        // 根据类型去拿 (注意:spring.xml中只能有一个class="com.sunjian.entity.Student")
        Student student = applicationContext.getBean(Student.class);
        System.out.println(student);

        System.out.println("-------------有参构造方式-------------------------");

//        Student2 student2 = (Student2) applicationContext.getBean("stu_2");
//        Student2 student2 = (Student2) applicationContext.getBean("stu_3");
        Student2 student2 = (Student2) applicationContext.getBean("stu_1");
        System.out.println(student2);

        System.out.println("--------------两个bean的级联方式------------------------");

        Student3 student3 = (Student3) applicationContext.getBean("stu3");
        System.out.println(student3);

        System.out.println("---------------bean对象之间的集合注入-----------------------");
        Classes classes = (Classes) applicationContext.getBean("classes");
        System.out.println(classes);
    }
}

运行结果

-------------无参构造方式-------------------------
Student{id='1', name='
                <孙健>
            ', age='32'}
-------------有参构造方式-------------------------
Student{id='1', name='孙健', age='31'}
--------------两个bean的级联方式------------------------
Student3{id='1', name='sunjian stu3', age='33', student4=Student{id='1', name='sunjian stu4', age='34'}}
---------------bean对象之间的集合注入-----------------------
Classes{id='1', name='243班', students=[Students{id='1', name='张三', age='30'}, Students{id='2', name='李四', age='31'}, Students{id='3', name='赵四', age='32'}]}

6、注意事项

  • 实体类中,必须有无参构造。
  • 成员变量必须有setter方法。

  IOC实例化对象的过程,通过反射 + XML解析的方式对spring.xml进行处理,反射拿到无参构造函数,调用创建对象,同时获取setter方法,调用完成成员变量的赋值。

OK.

Spring框架——IOC 容器的创建与使用的更多相关文章

  1. Spring框架IOC容器和AOP解析 非常 有用

    Spring框架IOC容器和AOP解析   主要分析点: 一.Spring开源框架的简介  二.Spring下IOC容器和DI(依赖注入Dependency injection) 三.Spring下面 ...

  2. Spring框架IOC容器和AOP解析

    主要分析点: 一.Spring开源框架的简介  二.Spring下IOC容器和DI(依赖注入Dependency injection) 三.Spring下面向切面编程(AOP)和事务管理配置  一.S ...

  3. spring框架--IOC容器,依赖注入

    思考: 1. 对象创建创建能否写死? 2. 对象创建细节 对象数量 action  多个   [维护成员变量] service 一个   [不需要维护公共变量] dao     一个   [不需要维护 ...

  4. SpringMVC系列(十五)Spring MVC与Spring整合时实例被创建两次的解决方案以及Spring 的 IOC 容器和 SpringMVC 的 IOC 容器的关系

    一.Spring MVC与Spring整合时实例被创建两次的解决方案 1.问题产生的原因 Spring MVC的配置文件和Spring的配置文件里面都使用了扫描注解<context:compon ...

  5. Spring的IOC容器第一辑

    一.Spring的IOC容器概述 Spring的IOC的过程也被称为依赖注入(DI),那么对象可以通过构造函数参数,工厂方法的参数或在工厂方法构造或返回的对象实例上设置的属性来定义它们的依赖关系,然后 ...

  6. spring的Ioc容器与AOP机制

    为什么要使用Spring的Ioc容器? 1.首先,spring是一个框架,框架存在的目的就是给我们的编程提供简洁的接口,可以使得我们专注于业务的开发,模块化,代码简洁,修改方便. 通过使用spring ...

  7. spring之IOC容器创建对象

    1.术语了解 1.1组件/框架设计 侵入式设计 引入了框架,对现有的类的结构有影响:即需要实现或继承某些特定类. 例如: Struts框架非侵入式设计 引入了框架,对现有的类结构没有影响. 例如:Hi ...

  8. Spring的IoC容器(转)BeanFactory

    Spring的IoC容器 Spring读书笔记-----Spring的Bean之Bean的基本概念 加菲猫 Just have a little faith. Spring的IoC容器 (用户持久化类 ...

  9. [转载]Spring下IOC容器和DI(依赖注入) @Bean及@Autowired

    Spring下IOC容器和DI(依赖注入) @Bean及@Autowired自动装配 bean是什么 bean在spring中可以理解为一个对象.理解这个对象需要换一种角度,即可将spring看做一门 ...

随机推荐

  1. 我的python面试简历

    分享前一段我的python面试简历,自我介绍这些根据你自己的来写就行,这里着重分享下我的项目经验.公司职责情况(时间倒序),不一定对每个人适用,但是有适合你的点可以借鉴 我的真实经验:(14年毕业,化 ...

  2. 京东Y事业部打造一体化质量管理平台

    互联网企业质量管理的困惑 作为互联网时代的互联网企业,我们的研发模式和传统模式相比,最显著的不同在于发布节奏加快了,这个加快不是快了10%,20%,50%,而是加快了几倍,甚至几十倍,上百倍.面对加快 ...

  3. u-boot的环境变量详解

    u-boot的环境变量      u-boot的环境变量是使用u-boot的关键,它可以由你自己定义的,但是其中有一些也是大家经常使用,约定熟成的,有一些是u-boot自己定义的,更改这些名字会出现错 ...

  4. Java程序监控---Metrics

    概念 Metrics是一个给JAVA服务的各项指标提供度量工具的包,在JAVA代码中嵌入Metrics代码,可以方便的对业务代码的各个指标进行监控 目前最为流行的 metrics 库是来自 Coda ...

  5. python爬虫-MongoDB安装配置

    MongoDB安装配置: 在安装配置MongoDB的过程中遇到了很多问题,现在重新梳理一遍安装流程.遇到的问题及其解决方法 系统版本:Windows 10 MongoDB版本:4.2.1 1.下载地址 ...

  6. CollectionUtils工具类

    CollectionUtils工具类 这篇讲的CollectionUtils工具类是在apache下的,可以使代码更加简洁和安全. 使用前需导入依赖 <dependency> <gr ...

  7. javascript功能插件大集合 前端常用插件 js常用插件

    转载来源:https://github.com/jobbole/aw... 包管理器管理着 javascript 库,并提供读取和打包它们的工具.•npm – npm 是 javascript 的包管 ...

  8. js判断PC端还是移动端的代码小坑

    我在写官网的时候做了pc和移动端两个,在通过网上查找了这样的代码,看着完全没问题,等放进去页面中后,PC端页面一直刷新,根本停不下来,找了类似js还是同样的问题.通过不断尝试后才发现,问题就是多了一行 ...

  9. golang切片

    切片与数组 go的数组是这样的 array := [3]int{1,2,3} array := [...]int{1,2,3} go的切片 array := []int{1,2,3} //1 arra ...

  10. BTrace实战

    BTrace在解决现场问题的时候非常有用. 1.概述 1.1下载 https://github.com/btraceio/btrace,最新版本是1.3.9 目前1.3.x系列最低支持JDK1.7,要 ...