Spring的IOC技术(配置文件形式)

目录

一、什么是IOC

二、IOC的程序入门

1.创建mavenJava项目,引入依赖

2.编写接口和实现类

3.编写spring核心配置文件(applicationContext.xml)

4.测试类

5.测试结果-------一个对象

三、Spring框架的Bean管理的配置文件

四、实例化Bean对象的三种方式

1.无参数的构造方法(默认且用的多)

2.静态工厂实例化---一个对象

3.动态工厂实例化方式

五、DI依赖注入

1.属性的set方法注入值

业务层接口:

业务层实现类:

持久层接口:

持久层实现类:

配置文件:

测试类:

运行:​编辑

2.属性构造方法方式注入值

业务层实现类:

配置文件:

运行:​编辑

3.数组、集合等的注入

CollectionBean 类:

配置文件:

测试类:

运行结果:

六、多配置文件方式

1.主配置文件中包含其他的配置文件

2.工厂创建的时候直接加载多个配置文件


一、什么是IOC

IOC---控制反转,将对象的创建权力交给Spring框架(通过bean标签),

它是面向对象编程中的一种设计原则,可以用来降低计算机代码之间的耦合度

二、IOC的程序入门

1.创建mavenJava项目,引入依赖

<dependencies>
    <!--spring的核心依赖-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.0.2.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/log4j/log4j -->
    <!--日志-->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.12</version>
    </dependency>
    <!--测试-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
</dependencies>

2.编写接口和实现类

接口:

package com.qcby.service;

/*
* 业务层接口
* */
public interface UserService {
    /*接口中的抽象方法*/
    public void hello();
}

实现类:
 

package com.qcby.service.impl;

import com.qcby.service.UserService;
/*
* 用户模块实现类实现用户模块接口
* */
public class UserServiceImpl implements UserService {
    @Override
    public void hello(){
        System.out.println("Hello IOC!");
    }
}

3.编写spring核心配置文件(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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--IOC管理bean-->
    <!-- bean的意义是将该类的创建对象权利交给spring框架 -->
    <bean id="userService" class="com.qcby.service.UserServiceImpl"></bean>
</beans>

4.测试类

package com.qcby.test;

import com.qcby.service.UserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/*
* 测试类
* 测试UserService交给spring管理
* */
public class UserServiceTest {
    //测试方法
    @Test
    public void run1(){
        //单例模式:UserService这个类只能创建一个对象

        //使用Spring的工厂
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
        //通过工厂获得类
        UserService userService1=(UserService) applicationContext.getBean("userService");
        UserService userService2=(UserService) applicationContext.getBean("userService");
        userService1.hello();
        userService2.hello();
        System.out.println(userService1);
        System.out.println(userService2);
    }
}

5.测试结果-------一个对象

三、Spring框架的Bean管理的配置文件

1.id属性

在约束中采用ID的约束,唯一;

取值要求:必须以字母开始,可以使用字母、数字、连字符、下划线、句话、冒号 ,不能出现特殊字符

2.class属性

bean对象的全路径

3.scope属性

代表Bean的作用范围,有单例和多例

(1)singleton单例(默认值),最常用的方式-----同一对象

(2)prototype多例(相当于new)(两个对象)

四、实例化Bean对象的三种方式

1.无参数的构造方法(默认且用的多)

<bean id="us" class="com.qcby.service.UserServiceImpl"></bean>

2.静态工厂实例化---一个对象

静态工厂是一个对象,已经有了,再用还是原来的

例子:
类:

package com.qcby.demo1;

import com.qcby.service.UserService;
import com.qcby.service.UserServiceImpl;

/*静态工厂方式*/
public class StaticFactory {
    public static UserService createUs(){
        System.out.println("通过静态工厂的方式创建UserServiceImpl对象...");
        return new UserServiceImpl();
    }
}

配置文件:

<bean id="us" class="com.qcby.demo1.StaticFactory" 
                                factory-method="createUs"></bean>

3.动态工厂实例化方式

package com.qcby.demo1;

import com.qcby.service.UserService;
import com.qcby.service.UserServiceImpl;

public class Dfactory {
    public UserService createUs(){
        System.out.println("实例化工厂的方式...");
        return new UserServiceImpl();
    }
}

配置文件

<bean id="dfactory" class="com.qcby.demo1.Dfactory"></bean>
<bean id="us2" factory-bean="dfactory" factory-method="createUs2"></bean>

五、DI依赖注入

DI依赖注入就是实现IOC的方式

1.属性的set方法注入值

业务层接口:

package com.qcby.service;

/*
* 订单业务层接口
* */
public interface OrderService {
    public void saveOrder();
}

业务层实现类:

package com.qcby.service.impl;

/*
* 订单的实现
* 调用持久层操作数据库
* */
import com.qcby.dao.OrderDao;
import com.qcby.service.OrderService;

public class OrderServiceImpl implements OrderService{
    private OrderDao orderDao;//它是私有属性,所以必须提供set方法

    public void setOrderDao(OrderDao orderDao) {
        this.orderDao = orderDao;
    }

    public void saveOrder(){
        orderDao.saveOrder();
    }
}

持久层接口:

package com.qcby.dao;

/*
* 持久层接口
* 保存订单
* */
public class OrderDao {
    public void saveOrder();
}

持久层实现类:

package com.qcby.dao;

public class OrderDaoImpl implements OrderDao {
    @Override
    public void saveOrder(){
        System.out.println("保存了订单!");
    }
}

配置文件:

<bean id="os" class="com.qcby.service.impl.OrderServiceImpl">
    <property name="orderDao" ref="od"></property>
</bean>
<bean id="od" class="com.qcby.dao.OrderDao"></bean>

测试类:

package com.qcby.test;

import com.qcby.service.OrderService;
import com.qcby.service.UserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class OrderServiceTest {
    @Test
    public void run1(){
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
        OrderService orderService=(OrderService)applicationContext.getBean("os");
        orderService.saveOrder();
    }
}

运行:

2.属性构造方法方式注入值

其他不变,

业务层实现类:

package com.qcby.service.impl;

/*
* 订单的实现
* 调用持久层操作数据库
* */
import com.qcby.dao.OrderDao;
import com.qcby.service.OrderService;

public class OrderServiceImpl implements OrderService{
    private OrderDao orderDao;
    public OrderServiceImpl(OrderDao orderDao) {
        this.orderDao = orderDao;
    }

    public void saveOrder(){
        orderDao.saveOrder();
    }
}

配置文件:

<bean id="os" class="com.qcby.service.impl.OrderServiceImpl">
    <constructor-arg name="orderDao" ref="od"></constructor-arg>
</bean>
<bean id="od" class="com.qcby.dao.OrderDao"></bean>

运行:

3.数组、集合等的注入

用的set方法

CollectionBean 类:

package com.qcby.demo3;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Properties;

public class CollectionBean {
    private String[] strs;

    public void setStrs(String[] strs) {
        this.strs = strs;
    }

    private List<String> list;
    public void setList(List<String> list) {
        this.list = list;
    }
    
    private Map<String,String> map;
    public void setMap(Map<String, String> map) {
        this.map = map;
    }
    
    private Properties properties;
    public void setProperties(Properties properties) {
        this.properties = properties;
    }

    @Override
    public String toString() {
        return "CollectionBean{" +
                "strs=" + Arrays.toString(strs) +
                ", list=" + list +
                ", map=" + map +
                ", properties=" + properties +
                '}';
    }
}

配置文件:

<!--给集合属性注入值-->
<bean id="collectionBean" class="com.qcby.demo3.CollectionBean">
    <property name="strs">
        <array>
            <value>美美</value>
            <value>小凤</value>
        </array>
    </property>
    <property name="list">
        <list>
            <value>熊大</value>
            <value>熊二</value>
        </list>
    </property>
    <property name="map">
        <map>
            <entry key="aaa" value="老王"></entry>
            <entry key="bbb" value="小王"></entry>
        </map>
    </property>
    <property name="properties">
        <props>
            <prop key="username">张三</prop>
            <prop key="password">1234</prop>
        </props>
    </property>
</bean>

测试类:

package com.qcby.test;

import com.qcby.demo3.CollectionBean;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class CollectionTest {
    @Test
    public void run(){
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
        CollectionBean collectionBean= (CollectionBean) applicationContext.getBean("collectionBean");
        System.out.println(collectionBean);
    }
}

运行结果:

六、多配置文件方式

多配置文件的加载方式

1.主配置文件中包含其他的配置文件

<?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">


    <import resource="applicationContext2.xml"></import>
</beans>

2.工厂创建的时候直接加载多个配置文件

ApplicationContext applicationContext = 
         new ClassPathXmlApplicationContext("applicationContext.xml",
                                          "applicationContext2.xml");

猜你喜欢

转载自blog.csdn.net/2201_76081438/article/details/143368439