ApplicationContext 获取Spring 中的Bean 理解以及方式,注入的获取理解

ApplicationContext 中获取 bean 的理解

从 ApplicationContext 获取Spring 中的Bean 可以如下理解:

ApplicationContext 直译过来就是应用的上下文也就是整个应用的环境,以面向对象的思维来理解,所有的流程和设定我们都通过某一个具体的类,对象来管理,也就是应用的上下文我们也是当作一个对象来管理的,即使这仅仅只是框架内部定义的虚拟概念。Spring 我们通常都说是一个容器,也就是我们把应用中的所有服务组件 @component 标注的类(@controller @Service 等其实内部也包含 @component )也当作了一个对象都丢到了 spring 这个大容器内,容器可以当作一个大罐子来理解,而 spring 可以通过 配置文件(applicationContext.xml)的方式注入实体,通过 component-scan 同时将对应路径带有指定注解的类也加载到 spring 的大罐子里面,同时可以将一些类手动通过写到配置文件(applicationContext.xml)中来实现提前将各种服务对象放到容器中,相当于提前将一些我们用到的类,数据库配置对象,线程池对象,文件,缓存等服务对象在初始化时先创建好后放入到spring 这个大罐子当中,而这个大罐子本身也是处于 applicationContext 中,也就是我们应用环境上下文当中,所以可以通过 ApplicationContext 的对象通过 getBean 的方式拿到 spring 这个罐子中已经创建了的对应服务组件。

ApplicationContext 中获取 bean 方式

主要方式有两种:

// 获取bean 方法1
public static <T>T getBean(String name){
	return (T) applicationContext.getBean(name);
}
 
// 获取bean 方法2
public static <T> T getBean(Class<T> clazz){
	return (T) applicationContext.getBean(clazz);
}

类似文件写法见如下文章链接
springConetextAware

可以看的出 通过 applicationContext 获取bean ,也就是从 spring 这个大罐子(容器)里面获取可以通过 组件(注入的 bean )的名字或者 类的 .class 来获取

你可能还记得我们在项目中写Service 时,往往会在 注解 @Service 中指定当前服务组件的名称,类似于:

@Service("UserService")
public class UserService extends ... {
......
}

这种形式,到这里一切就串联起来了。

Service中注入的获取理解

在 @Service 中我们就常常通过 @Resource 和 @Autowired 两种方式注入或获取已经在 Spring 的容器中注入的组件,也就是我们初始化时被添加到应用 bean 容器里面的服务组件类,而且 我们在 Resource 中也常常通过 name 指定了某一个名称,通常的我们也会被问到,@Resouce 和 @Autowired 的区别,其中主要的区别之一也涉及到了 name 的指定, @Resouce 类似如下:

    @Resource(name = "UserService")
    private IUserService userService;

@Resouce 通过类型和名称注入对应的对象 JDK 提供,而 @Autowired 一般使用byType 也就是类型注入对应的类。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值