依赖注入IOC

简介: 依赖注入IOC

简介:由spring容器进行对象的创建和依赖注入,使用时取出来

反转:由spring容器进行对象的创建和依赖注入称为反转,将控制权从程序员手中夺走,交给spring容器,称为反转

<bean id="stu" class = "com.bjpowernode.pojo.Student">
//spring容器负责对象创建
<property name="name" value="张三">
//spring容器依赖注入值
</bean>

由spring创建对象

必须提供无参构造方法

<?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="org.example.Student"></bean>
</beans>
package org.example;

public class Student {
    private String name;
    private int age;
    public Student(){
        System.out.println("student类的无参构造方法");
    }

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

测试类

package org.example.text;

import org.example.Student;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class myText {
    @Test
    public void textStudent(){
        Student student = new Student();
    }
    @Test
    public void testStudentSpring(){
        //由spring容器创建对象
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        Student stu = (Student) ac.getBean("stu");
        System.out.println(stu);
    }
}

给创建的对象赋值

  1. 使用setter注入

    1. 简单类型注入使用value属性
    <bean id = "stu" class="org.example.Student">
        <property name="name" value="张三"></property>
        <property name="age" value="88"></property>
    </bean>
    1. 引用类型主人椅使用ref属性
    <bean id = "stu" class="org.example.pojo2.Student">
        <property name="name" value="lily"></property>
        <property name="age" value="12"></property>
        <property name="school" ref="school"></property>
    </bean>
    1. 注意:使用setter注入必须提供无参的构造方法,必须提供setXXX()方法。
      三层架构
<?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 = "uMapper" class = "org.example.dao.UsersMapperImpl">
    </bean>
    <!--创建业务逻辑层的对象-->
    <bean id = "uService" class="org.example.service.impl.UsersServiceImpl">
        <property name="usersMapper" ref="uMapper"></property>
    </bean>
    <!--创建界面层对象-->
    <bean id = "uController" class="org.example.controller.UsersController">
        <property name="usersService" ref="uService"></property>
    </bean>
</beans>
  1. 使用构造方法注入

    1. 使用构造方法的参数名称进行注入值
      ==使用标签==
    <!--创建school对象-->
    <bean id="school" class="org.example.pojo3.School">
        <constructor-arg name="name" value="清华大学" ></constructor-arg>
        <constructor-arg name="address" value="海淀区" ></constructor-arg>
    </bean>
    @Test
        public void textSchool(){
            ApplicationContext ac = new ClassPathXmlApplicationContext("r3/applicationContext.xml");
            School school = (School) ac.getBean("school");
            System.out.println(school.toString());
        }
    1. 使用构造方法的下标进行注入值
    <!--创建学生对象,使用构造方法下标注入值-->
    <bean id = "stu" class="org.example.pojo3.Student">
        <constructor-arg index="0" value="tony"></constructor-arg>
        <constructor-arg index="1" value="23"></constructor-arg>
        <constructor-arg index="2" ref="school"></constructor-arg>
    </bean>
    1. 使用默认的构造方法的参数的顺序注入值
      参考2,不使用index,按顺序注入

创建对象的注解

@Component:可以创建任意对象,创建的对面默认名称是类名的驼峰命名法,也可以指定【@Component("")】

<!--添加包扫描-->
    <context:component-scan base-package="org.example.s01"></context:component-scan>
ApplicationContext ac = new ClassPathXmlApplicationContext("s01/applicationContext.xml");
Student stu = (Student) ac.getBean("student");

@Controller:专门用来创建控制器的对象(Servlet),这种对象可以接收用户的请求,可以返回处理结果给客户端

@service:专门用来创建业务逻辑层的对象,负责向下访问数据访问层,处理完毕后的结果返回给界面层

@Repository:专门用来创建数据访问层的对象,负责数据库中的增删改查所以操作

相关文章
|
XML Java 数据格式
依赖注入~
依赖注入~
|
设计模式 Java Spring
依赖注入
依赖注入
|
Java Maven
SpringFrame-ioc 依赖注入
SpringFrame-ioc 依赖注入
|
SQL 开发框架 安全
3.1依赖注入
传统开发中,对象都是开发者创建组装,开发者必须了解各类的使用方法且某些类的耦合度较高,例如想把sql serve数据库改为MySql数据库则需要更改某些代码。控制反转的目的是让框架完成对象的创建和组装。从“我创建对象”编程“我要对象”
|
Java API C++
IOC理解
成功就是简单道理的深刻理解与灵活运用 前不久,阿里大牛虾总在群里抛出一个问题:“从深层次讲解一下如何理解IOC,IOC和DI是一回事吗?” 这个问题真是让人平静而又不平静 平静源于此问题就像问中国人怎么使用筷子,天天使用筷子,难道还不会使用筷子? 但又不平静,你能写出一份详细的说明书,让一个不会使用筷子的人按此说明成功地使用上筷子吗?
356 0
IOC理解
|
Oracle 架构师 Java
什么是IOC
什么是IOC
266 0
什么是IOC
|
XML 架构师 关系型数据库
|
自动驾驶 小程序 Java
什么是控制反转(IOC)?什么是依赖注入?
什么是控制反转(IOC)?什么是依赖注入?
什么是控制反转(IOC)?什么是依赖注入?
|
XML 存储 Java
|
Java Spring
Ioc个人理解
IOC根据官方给的意思是依赖注入,说白了,调用类的方面不用&quot;new 类名&quot;,而是在配置文件中配置后,然后新建一个工厂类,这样在工厂类中就可以直接调用了。下面是实现IOC的过程。
145 0
Ioc个人理解