Spring17_相关API5

一、ApplicationContext的继承体系

 applicationContext:接口类型,代表应用上下文,可以通过其实例获得 Spring 容器中的 Bean 对象

 

 说明:紫色是接口,浅绿色是抽象类,绿色是实现类

二、ApplicationContext的实现类

 1. ClassPathXmlApplicationContext

  它是从类的根路径下(resources路径)加载配置文件,推荐使用这种

 2. FileSystemXmlApplicationContext

  它是从磁盘路径上加载配置文件,配置文件可以在磁盘的任意位置。

 3. AnnotationConfigApplicationContext

  当使用注解配置容器对象时,需要使用此类来创建spring容器。它用来读取注解。

 代码实现:

  FileSystemXmlApplicationContext使用文件的绝对路径,applicationContext.xml右键-Copy Path

package com.itheima.demo;

import com.itheima.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class UserController {
    public static void main(String[] args) {
//        ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        ApplicationContext app = new FileSystemXmlApplicationContext("//Users//alsc//Desktop//lj//workspace//Spring//itheima_spring_ioc//src//main//resources//applicationContext.xml");
        UserService userService = (UserService) app.getBean("userService");
        userService.save();
    }
}

三、getBean()方法使用

 

ApplicationContext app = new ClassPathXmlApplicationContext("xml文件")
app.getBean("id")
app.getBean(Class)

 说明:当参数为字符串,表示根据Bean的id从容器中获得Bean实例,返回Object,需要强转。即字符串对应的是配置文件中的id。

    当参数为Class类型时,表示根据类型从容器中匹配Bean实例,当容器中相同类型的Bean有多个时,则此方法会报错。

 代码实现:

package com.itheima.demo;

import com.itheima.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UserController {
    public static void main(String[] args) {
        ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
//        UserService userService = (UserService) app.getBean("userService");//对应配置文件中的id
        UserService userService = app.getBean(UserService.class);
        userService.save();
    }
}

 容器中存在多个相同类型的Bean,即class一样时可以有多个不同的id

    <bean id="userService" class="com.itheima.service.impl.UserServiceImpl">
        <constructor-arg name="userDao" ref="userDao"></constructor-arg>
    </bean>

    <bean id="userService2" class="com.itheima.service.impl.UserServiceImpl">
        <constructor-arg name="userDao" ref="userDao"></constructor-arg>
    </bean>

 

posted on 2023-05-04 11:49  花溪月影  阅读(15)  评论(0编辑  收藏  举报