2-Spring-IOC

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34229789/article/details/79975902

IOC概念

IOC:Inversion of Control(控制反转),既将对象的创建过程交由Spring的IOC容器来进行管理,从而做到解耦合的效果。

Spring的XML配置文件结构

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd 
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd ">

    <!-- 导入hello配置文件 -->
    <import resource="hello/hello.xml"/>
    <!-- 实例化hello -->
    <bean id="hello" class="com.wzw.spring.ioc.impl.HelloImpl"></bean>
    <!-- hello别名Hello -->
    <alias name="hello" alias="Hello"/>

</beans>

Bean实例化的三种方式

1. 基于构造方法

    <!-- 基于无参构造 -->
    <bean id="user" class="com.wzw.spring.ioc.model.User"></bean>
    <!-- 基于有参构造 -->
    <bean id="user2" class="com.wzw.spring.ioc.model.User2">
        <constructor-arg name="name" value="root"></constructor-arg>
        <constructor-arg name="password" value="password"></constructor-arg>
    </bean>

2. 基于静态工厂

静态工厂

/**
 * 静态工厂
 * 项目名称:com.wzw.spring<br/>
 * 类名称:UserStaticFactory<br/>
 * 类描述:
 * 时间 2018年4月17日 下午3:38:34
 * @author wzw
 * @version
 */
public class UserStaticFactory {

    public static User getUser(String name, String password) {
        return new User(name, password);
    }
}
    <!-- 基于静态工厂 -->
    <bean id="user3" class="com.wzw.spring.ioc.factory.UserStaticFactory"
        factory-method="getUser">
        <constructor-arg name="name" value="root"></constructor-arg>
        <constructor-arg name="password" value="password"></constructor-arg>
    </bean>

3. 基于实例工厂

实例工厂

/**
 * 实例工厂
 * 项目名称:com.wzw.spring<br/>
 * 类名称:UserFactory<br/>
 * 类描述:
 * 时间 2018年4月17日 下午3:42:08
 * @author wzw
 * @version
 */
public class UserFactory {

    public User getUser(String name, String password) {
        return new User(name, password);
    }
}
    <!-- 基于实例工厂 -->
    <bean id="userfactory" class="com.wzw.spring.ioc.factory.UserFactory"></bean>
    <bean id="user4" factory-bean="userfactory" factory-method="getUser">
        <constructor-arg name="name" value="root"></constructor-arg>
        <constructor-arg name="password" value="password"></constructor-arg>
    </bean>

Bean命名

    <!-- id, name相同 -->
    <bean id="user5" name="user6" class="com.wzw.spring.ioc.model.User">
        <constructor-arg name="name" value="root"></constructor-arg>
        <constructor-arg name="password" value="password"></constructor-arg>
    </bean>
    <!-- 无id -->
    <bean class="com.wzw.spring.ioc.model.User">
        <constructor-arg name="name" value="root"></constructor-arg>
        <constructor-arg name="password" value="password"></constructor-arg>
    </bean>
    <!-- id, 唯一 -->
    <bean id="user7" class="com.wzw.spring.ioc.model.User">
        <constructor-arg name="name" value="root"></constructor-arg>
        <constructor-arg name="password" value="password"></constructor-arg>
    </bean>
    <!-- name, 唯一 -->
    <bean name="user8" class="com.wzw.spring.ioc.model.User">
        <constructor-arg name="name" value="root"></constructor-arg>
        <constructor-arg name="password" value="password"></constructor-arg>
    </bean>
    <!-- 多name -->
    <bean name="user9,user10;user11" class="com.wzw.spring.ioc.model.User">
        <constructor-arg name="name" value="root"></constructor-arg>
        <constructor-arg name="password" value="password"></constructor-arg>
    </bean>
    <!-- alias标签 -->
    <alias name="user7" alias="user12"/>

测试类

    /**
     * Bean命名测试
     * @return void
     * 时间:2018年4月17日
     */
    @Test
    public void fun2() {
        ApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
        String[] aliases = context.getAliases("user9");
        System.out.println(aliases.length);
        for (String string : aliases) {
            System.out.println(string);
        }
        User bean = (User) context.getBean("user9");
        System.out.println(bean);
    }

IOC容器实例化方式(Spring读取配置文件的方式)

在Spring Ioc容器的代表就是org.springframework.beans包中的BeanFactory接口,BeanFactory接口提供了IoC容器最基本功能;而org.springframework.context包下的ApplicationContext接口扩展了BeanFactory,还提供了与Spring AOP集成、国际化处理、事件传播及提供不同层次的context实现 (如针对web应用的WebApplicationContext)。简单说, BeanFactory提供了IoC容器最基本功能,而 ApplicationContext 则增加了更多支持企业级功能支持。ApplicationContext完全继承BeanFactory,因而BeanFactory所具有的语义也适用于ApplicationContext。
容器实现一览:
• XmlBeanFactory:BeanFactory实现,提供基本的IoC容器功能,可以从classpath或文件系统等获取资源;
(1) File file = new File(“fileSystemConfig.xml”);
Resource resource = new FileSystemResource(file);
BeanFactory beanFactory = new XmlBeanFactory(resource);
(2)
Resource resource = new ClassPathResource(“classpath.xml”); BeanFactory beanFactory = new XmlBeanFactory(resource);
• ClassPathXmlApplicationContext:ApplicationContext实现,从classpath获取配置文件;
BeanFactory beanFactory =
new ClassPathXmlApplicationContext(“classpath.xml”);
• FileSystemXmlApplicationContext:ApplicationContext实现,从文件系统获取配置文件。
BeanFactory beanFactory =
new FileSystemXmlApplicationContext(“fileSystemConfig.xml”);

阅读更多

没有更多推荐了,返回首页