• Spring


    1. 介绍IOC

    IOC就是控制反转,听上去很高大上,其实简单说,就是以前手动创建对象的实例,现在由spring代理你创建这个实例

    2.HelloWorld

    这里写了3个类和一个spring xml配置文件,

    • UserService.java - 接口
    • UserServiceImpl.java - 实现类
    • UserServiceTest.java - 测试类
    • springConfig.xml - spring配置文件

    UserService.java

    public interface UserService {
    
        /**
         * 添加用户
         */
        void addUser();
    }

    UserServiceImpl.java

    public class UserServiceImpl implements UserService{/**
         * 实现接口方法
         */
        public void addUser() {
            System.out.println("添加用户成功");
        }
    }

    springConfig.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-4.3.xsd">
             
             
            <bean id="userServiceBean" class="com.test.spring.ioc.UserServiceImpl"></bean>
    </beans>

    UserServiceTest.java

    import org.junit.Test;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class UserServiceTest {
    
        @Test
        public void test() {
            //以前
         //UserService userService = new UserServiceImpl();
         //userService.addUser();
            
            /**
             * spring的写法,这是一个工厂类,这里有一个参数,参数对应配置文件的classpath位置,src为根目录
             */
            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("/com/test/spring/ioc/springConfig.xml");
            
            //这里的参数为 配置文件中 bean id,意思就是获取 对应id实例对象
            UserService us = (UserService)context.getBean("userServiceBean");
            us.addUser();
        }
    }

    3.作用域

    在默认情况下,spring创建的所有对象都是单例,可以通过从以下的测试方法,可以得出结论

    //创建对象1
    UserService us_1 = (UserService)context.getBean("userServiceBean"); System.out.println(us_1);
    //创建对象2 UserService us_2
    = (UserService)context.getBean("userServiceBean"); System.out.println(us_2);

    /**
    *打印的结果为可以看出两个对象都是同一个
    *
    */

    如果想要创建多实例,那就需要修改他的作用域

     

    • singleton(默认)单例
    • prototype 多例
    • request 没研究
    • session 没研究
    • global session 没研究

    在配置文件bean 添加scope属性修改为prototype,重新执行上面的测试方法,结果就是两个对象都不一样

    <?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-4.3.xsd">
             
             
            <bean id="userServiceBean" class="com.test.spring.ioc.UserServiceImpl" scope="prototype"></bean>
    </beans>

    在单例的情况下,当你执行读取配置文件的时候,对象将会立即创建,但如果是多例的情况下,只有在执行getBean的情况下,才会被新建,可以通过以下方式来测试一下

    public class UserServiceImpl implements UserService{
    
        /**
         * 可以不加这个构造函数,添加上这个构造函数的目的是测试实例化的生命周期
         */
        public UserServiceImpl() {
            System.out.println("实例化");
        }
        
        /**
         * 实现接口方法
         */
        public void addUser() {
            System.out.println("添加用户成功");
        }
    }

    4. 创建bean的方式

    • 默认方式 - <bean id="" class="">
    • 静态工厂 - 就是在一个静态类(里面所有方法都是静态的)里面提供一个静态方法,用于创建对象实例

      配置的写法

    <?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-4.3.xsd">
             
             <!-- 静态工厂创建bean方式 -->
            <bean id="userServiceBean" class="com.test.spring.factory.MyFactory" factory-method="createUserService"></bean>
           
    </beans>

      工厂MyFactory.java

    /**
     * 静态工厂
     *
     */
    public class MyFactory {
    
        /**
         * 创建一个userservice实例
         * @return
         */
        public static UserService createUserService() {
            return new UserServiceImpl();
        }
    }
    • 实例工厂 - 在一个非静态类里面,提供一个方法用于创建对象实例

      配置写法

    <?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-4.3.xsd">
    
            <!-- 实例工厂创建bean方式 -->
            <bean id="instanceFactoryBean" class="com.test.spring.factory.MyFactoryInstance"></bean>
          
         <!-- 通过上面的实例bean,调用里面的方法 --> <bean id="userServiceBean2" factory-bean="instanceFactoryBean" factory-method="createUserServiceInInstanceFactory"></bean> </beans>

      实例工厂

    /**
     * 实例工厂
     *
     */
    public class MyFactoryInstance {
    
        public UserService createUserServiceInInstanceFactory() {
            return new UserServiceImpl();
        }
    }
  • 相关阅读:
    android manifest.xml 文件
    android 打开 res raw目录 中 数据库文件
    android intentService
    android 注册广播接受者
    android activity 窗口 样式
    android activity 生命周期
    android 后台 activity 被系统回收 保存状态
    Python的包管理工具easy_install, setuptools, pip,distribute介绍
    Python的包管理工具easy_install, setuptools, pip,distribute介绍
    MySQL 1071错误解决办法
  • 原文地址:https://www.cnblogs.com/oscar1987121/p/10874613.html
Copyright © 2020-2023  润新知