码迷,mamicode.com
首页 > 编程语言 > 详细

Spring ioc

时间:2018-12-12 12:23:33      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:面向对象   学生   cee   技术分享   splay   b16   代码   none   support   

 Spring ioc

IoC:控制反转(Inversion of Control)

没有IoC的程序中我们使用面向对象编程对象的创建与对象间的依赖关系完全硬编码在程序中,对象的创建由程序自己控制,控制反转后将对象的创建转移给第三方

所谓控制反转就是:获得依赖对象的方式反转了。

技术分享图片

 

IoC是Spring框架的核心内容,使用多种方式完美的实现了IoC,可以使用XML配置,也可以使用注解,新版本的Spring也可以零配置实现IoC。Spring容器在初始化时先读取配置文件,根据配置文件或元数据创建与组织对象存入容器中,程序使用时再从Ioc容器中取出需要的对象。

 

技术分享图片

 使用XML方式配置Bean的时候,Bean的定义信息是和实现分离的,而采用注解的方式可以把两者合为一体,Bean的定义信息直接以注解的形式定义在实现类中,从而达到了零配置的目的。

控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IoC容器,其实现方法是依赖注入(Dependency Injection,DI)。

 

使用XML配置的方式实现IOC

maven项目

1、配置pom

技术分享图片
<?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.wbg</groupId>
    <artifactId>springdemo</artifactId>
    <version>1.0-SNAPSHOT</version>


<!--打包-->
    <packaging>war</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring.version>4.3.0.RELEASE</spring.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
            <version>4.10</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.8.9</version>
        </dependency>
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>3.2.4</version>
        </dependency>
    </dependencies>
</project>
View Code

2、创建一个学生类

技术分享图片

技术分享图片
package com.wbg.springdemo.entity;

public class Student {
    String name;
    int age;
    String sex;

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

    public Student() {
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Student(String name, int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
}
View Code

3、创建学生的接口

 技术分享图片

技术分享图片
package com.wbg.springdemo.dao;

import com.wbg.springdemo.entity.Student;

public interface StudentDao {
     /**
      * 添加学生
      * @param student
      * @return
      */
     Student saveStudent(Student student);
}
View Code

4、实现接口

技术分享图片
package com.wbg.springdemo.dao;

import com.wbg.springdemo.entity.Student;


//spring使用@Service进行实现
//手动实现<bean id="studentDao" class="com.wbg.springdemo.dao.StudentDaoImp" />
public class StudentDaoImp implements StudentDao {
    public Student saveStudent(Student student) {
        return student;
    }
}
View Code

 

技术分享图片

 5、 容器的配置文件

技术分享图片
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="studentDao" class="com.wbg.springdemo.dao.StudentDaoImp" />
</beans>
View Code

 

技术分享图片

 

6、业户类

技术分享图片
package com.wbg.springdemo.service;

import com.wbg.springdemo.dao.StudentDao;
import com.wbg.springdemo.entity.Student;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * 实现业务
 */
public class StudentService {

    StudentDao studentDao;
    //构造器实现
    public StudentService(){
        //容器
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("IOCStudentBean.xml");
        //从容器中获取studentDao的bean
        studentDao= (StudentDao) applicationContext.getBean("studentDao");

    }

    /**
     * 添加学生方法
     * @param student 给一个学生对象
     */
    public void saveStudent(Student student){
        System.out.println("开始添加学生");
        Student std=studentDao.saveStudent(student);
        System.out.println(std);
    }
}
View Code

技术分享图片

 7、测试

技术分享图片
package com.wbg.springdemo.service;

import com.wbg.springdemo.entity.Student;
import org.junit.Test;

import static org.junit.Assert.*;

public class StudentServiceTest {

    @org.junit.Test
    public void saveStudent() {
        StudentService studentService=new StudentService();
        studentService.saveStudent(new Student("韦邦杠",20,"男"));
    }
}
View Code

技术分享图片

 结果

技术分享图片

装配Spring Bean 有三种方式注入

1、构造注入

技术分享图片

2、setter注入

技术分享图片

3、接口注入(不推荐)

 测试

技术分享图片

 

 实现业务代码

技术分享图片

技术分享图片
package com.wbg.springdemo.service;

import com.wbg.springdemo.dao.StudentDao;
import com.wbg.springdemo.entity.Student;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * 实现业务
 */
public class StudentService {

    StudentDao studentDao;
    //构造器实现
    public StudentService(){
        //容器
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("IOCStudentBean.xml");
        //从容器中获取studentDao的bean
        studentDao= (StudentDao) applicationContext.getBean("studentDao");
        //从容器中获取studentProperty的bean
        Student studentProperty= (Student) applicationContext.getBean("studentProperty");
        //studentConstructor
        Student studentConstructor= (Student) applicationContext.getBean("studentConstructor");
        System.out.println(studentProperty);
        System.out.println(studentConstructor);
    }

    /**
     * 添加学生方法
     * @param student 给一个学生对象
     */
    public void saveStudent(Student student){
        System.out.println("开始添加学生");
        Student std=studentDao.saveStudent(student);
        System.out.println(std);
    }
}
View Code

 

Spring ioc

标签:面向对象   学生   cee   技术分享   splay   b16   代码   none   support   

原文地址:https://www.cnblogs.com/weibanggang/p/10107259.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!