• 第1章 Spring的应用


    一、Spring 的两种核心容器:BeanFactory 和 ApplicationContext(都通过xml加载Bean的)

    二、通过ApplicationContext实例化:

    1.通过ClassPathXmlApplicaationContext创建

    ApplicationContext applicationContext = new ClassPathXmlApplicationContext(String configLocation);

    configLocation参数用于指定Spring配置文件的名称和位置。

    如果其值为“applicationContext.xml”,则Spring会去类路径中查找名为applicationContext.xml的配置文件

    Spring配置文件名称可自定义,一般开发都定为applicationContext.xml(有时也定为beans.xml)

    所以常用语句就是:

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

    表示初始化spring容器,加载配置文件。

    2.通过FileSystemXmlApplicationContext创建

    ApplicationContext applicationContext = new FileSystemXmlApplicationContext(String configLocation);

    不是从类路径中读取配置文件,而是通过参数指定配置文件的位置,例如:"D:/workspaces/applicationContext.xml",如果参数中写的不是绝对路径,调用时默认用绝对路径。灵活性差,不推荐。

    然后,xml文件是啥?类似这种东西,除了<bean>,其他照抄,用多了自然就会懂。

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4     xsi:schemaLocation="http://www.springframework.org/schema/beans 
     5     http://www.springframework.org/schema/beans/spring-beans-4.3.xsd"> 
    6 <!-- 将指定类配置给Spring,让Spring创建其对象的实例 --> 7 <bean id="userDao22" class="com.itheima.ioc.UserDaoImpl" /> 8 9 <!--添加一个id为userService的实例 --> 10 <bean id="userService" class="com.itheima.ioc.UserServiceImpl"> 11 <!-- 将id为userDao22的Bean实例注入到userService实例中,name属性表示Bean实例中的相应属性名,ref属性用于指定其属性值 --> 12 <property name="userDao" ref="userDao22" /> 13 </bean> 14 15 </beans>

    通过容器获取实例:

    类名 + 对象名  = (强转类名)+ applicationContext.getBean(String name/id);

    比如:UserService userService = (UserService) applicationContext.getBean("userService");

    三、控制反转和依赖注入

    1.控制反转(IoC,Inversion of Control):说白了就是不用new,用容器获取对象,把创建和查找依赖对象的控制权交给了容器。

    2.依赖注入(DI,Dependency Injection):使用Spring框架创建对象时,动态地将其所依赖的对象注入Bean组件中,两种方法。(1)属性setter方法注入,指Spring容器使用setter方法注入被依赖的实例。通过调用无参构造器或无参静态工厂方法实例化Bean后,调用该Bean的setter方法。(2)构造方法注入:指Spring容器使用构造方法注入被依赖的实例。

    书上多少个名字重合的,都不知道哪个匹配哪个,现有以下几个接口和实现接口的类

    package com.itheima.ioc;
    public interface UserDao {
        public void say();
    }
    package com.itheima.ioc;
    public class UserDaoImpl implements UserDao {
        public void say() {
            System.out.println("userDao say hello World 222!");
        }
    }
    package com.itheima.ioc;
    public interface UserService {
        public void say();
    }
    package com.itheima.ioc;
    public class UserServiceImpl implements UserService {
        // 声明UserDao属性
        private UserDao userDao44;
        // 添加UserDao属性的setter方法,用于实现依赖注入
        public void setUserDao(UserDao userDao) {
            this.userDao44 = userDao;
        }
        // 实现的接口中方法
        public void say() {
            //调用userDao中的say()方法,并执行输出语句
            this.userDao44.say();
            System.out.println("userService say hello World !");
        }
    }

    测试IoC,很简单地调用say方法,本章看不出什么门道。

    package com.itheima.ioc;
    import org.springframework.context.ApplicationContext;
    import 
        org.springframework.context.support.ClassPathXmlApplicationContext;
    public class TestIoC {
        public static void main(String[] args) {
            //1.初始化spring容器,加载配置文件
            ApplicationContext applicationContext = 
                new ClassPathXmlApplicationContext("applicationContext.xml");
            //2.通过容器获取userDao实例
            UserDao userDao111 = (UserDao) applicationContext.getBean("userDao22");
        
            //3.调用实例中的say()方法
            userDao111.say();
        }
    }

    输出:userDao say hello World 222!

    测试DI:

    package com.itheima.ioc;
    import org.springframework.context.ApplicationContext;
    import 
        org.springframework.context.support.ClassPathXmlApplicationContext;
    public class TestDI {
        public static void main(String[] args) {
            //1.初始化spring容器,加载配置文件
            ApplicationContext applicationContext = 
                 new ClassPathXmlApplicationContext("applicationContext.xml");
            //2.通过容器获取UserService实例
            UserService userService = 
                (UserService) applicationContext.getBean("userService");
            //3.调用实例中的say()方法
            userService.say();
        }
    }

    输出:

    userDao say hello World 222!
    userService say hello World !

  • 相关阅读:
    8.存储器
    7.计算机的总线
    6.计算机的字符与编码集
    5.计算机的计量单位
    JAVA 实用插件
    并发(三)
    并发(二)
    Java 8 Lambda
    并发(一)
    Mybatis(七)-- LRU LFU 算法
  • 原文地址:https://www.cnblogs.com/shoulinniao/p/10879029.html
Copyright © 2020-2023  润新知