做一个好的网站需要什么,网站建设贰金手指科捷9,wordpress 导航栏搜索,网页注册qqspring容器
程序启动时#xff0c;会给spring容器一个清单#xff0c;清单中列出了需要创建的对象以及对象依赖关系#xff0c;spring容器会创建和组装好清单中的对象#xff0c;然后将这些对象存放在spring容器中#xff0c;当程序中需要使用的时候#xff0c;可以到容…spring容器
程序启动时会给spring容器一个清单清单中列出了需要创建的对象以及对象依赖关系spring容器会创建和组装好清单中的对象然后将这些对象存放在spring容器中当程序中需要使用的时候可以到容器中查找获取然后直接使用
dispring容器中创建对象时给其设置依赖对象的方式
ioc使用者使用依赖的对象需要自己去创建和组装而现在交给spring容器去完成。如给spring一个清单清单中列出了需要创建B对象以及其他的一些对象可能包含了B类型中需要依赖对象此时spring在创建B对象的时候会看B对象需要依赖于哪些对象然后去查找一下清单中有没有包含这些被依赖的对象如果有就去将其创建好然后将其传递给B对象 Spring系列第3篇Spring容器基本使用及原理
BeanFactory接口
org.springframework.beans.factory.BeanFactoryspring容器中具有代表性的容器就是BeanFactory接口这个是spring容器的顶层接口提供了容器最基本的功能。
常用的几个方法
//按bean的id或者别名查找容器中的bean
Object getBean(String name) throws BeansException//这个是一个泛型方法按照bean的id或者别名查找指定类型的bean返回指定类型的bean对象
T T getBean(String name, ClassT requiredType) throws BeansException;//返回容器中指定类型的bean对象
T T getBean(ClassT requiredType) throws BeansException;//获取指定类型bean对象的获取器这个方法比较特别以后会专门来讲
T ObjectProviderT getBeanProvider(ClassT requiredType);ApplicationContext接口
org.springframework.context.ApplicationContext这个接口继承了BeanFactory接口所以内部包含了BeanFactory所有的功能并且在其上进行了扩展增加了很多企业级功能比如AOP、国际化、事件支持等
ClassPathXmlApplicationContext类
org.springframework.context.support.ClassPathXmlApplicationContext这个类实现了ApplicationContext接口注意一下这个类名称包含了ClassPath Xml说明这个容器类可以从classpath中加载bean xml配置文件然后创建xml中配置的bean对象
AnnotationConfigApplicationContext类
org.springframework.context.annotation.AnnotationConfigApplicationContext这个类也实现了ApplicationContext接口注意其类名包含了Annotation和config两个单词上面我们有说过bean的定义支持xml的方式和注解的方式当我们使用注解的方式定义bean的时候就需要用到这个容器来装载了这个容器内部会解析注解来构建构建和管理需要的bean。 dependencyManagementdependenciesdependencygroupIdorg.springframework/groupIdartifactIdspring-core/artifactIdversion${spring.version}/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion${spring.version}/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-beans/artifactIdversion${spring.version}/version/dependency/dependencies/dependencyManagement
spring-core 提供了轻量级、非入侵的方式管理对象。主要包含iocdi。还提供aop支持用来记录日志性能监控。
spring-context 在spring-core的基础上加载和管理bean并提供处理配置 依赖注入 生命周期。
应用程序的上下文由ApplicationContext接口表示充当了同期角色是spring-context 的核心接口之一。管理bean作用域并提供bean的访问。提供可扩展的方式管理应用程序的上下文并支持各种配置及功能。
spring-boot 打印所有的bean
ApplicationContext appctx SpringApplication.run(DemoApplication.class, args)
String[] beanNames appctx.getBeanDefinitionNames();
Arrays.sort(beanNames);
for(String beanNamse:beanNames){System.out.print(name: beanName)
} spring-beans 提供bean的定义配置。xml注解等bean的实例化和初始化bean的生命周期bean的作用域管理
使用spring容器
Spring系列第3篇Spring容器基本使用及原理 下面演示一下bean名称和别名的各种写法。
!-- 通过id定义bean名称user1 --
bean iduser1 classcom.javacode.lesson.demo.User/!-- 通过name定义bean名称user2 --
bean nameuser2 classcom.javacode.lesson.demo.User/!-- id为名称name为别名bean名称user31个别名[user3_1] --
bean iduser3 nameuser3_1 classcom.javacode.lesson.demo.User/!-- bean名称user4多个别名[user4_1,user4_2,user4_3,user4_4] --
bean iduser4 nameuser4_1,user4_2;user4_3 user4_4 classcom.javacode.lesson.demo.User/!-- bean名称user5别名[user5_1,user5_2,user5_3,user5_4] --
bean nameuser5,user5_1,user5_2;user5_3 user5_4 classcom.javacode.lesson.demo.User/我们来写个java来输出上面所有bean的名称和其别名如下
package com.javacode2018.lesson001.demo2;import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;import java.util.Arrays;public class Client {public static void main(String[] args) {//1.bean配置文件位置String beanXml classpath:/com/javacode/lesson/demo2/beans.xml;//2.创建ClassPathXmlApplicationContext容器给容器指定需要加载的bean配置文件ClassPathXmlApplicationContext context new ClassPathXmlApplicationContext(beanXml);for (String beanName : Arrays.asList(user1, user2, user3, user4, user5)) {//获取bean的别名String[] aliases context.getAliases(beanName);System.out.println(String.format(beanName:%s,别名:[%s], beanName, String.join(,, aliases)));}System.out.println(spring容器中所有bean如下);//getBeanDefinitionNames用于获取容器中所有bean的名称for (String beanName : context.getBeanDefinitionNames()) {//获取bean的别名String[] aliases context.getAliases(beanName);System.out.println(String.format(beanName:%s,别名:[%s], beanName, String.join(,, aliases)));}}
}上面有2个新的方法 getAliases通过bean名称获取这个bean的所有别名 getBeanDefinitionNames返回spring容器中定义的所有bean的名称 运行输出
beanName:user1,别名:[]
beanName:user2,别名:[]
beanName:user3,别名:[user3_1]
beanName:user4,别名:[user4_1,user4_4,user4_2,user4_3]
beanName:user5,别名:[user5_3,user5_4,user5_1,user5_2]
spring容器中所有bean如下
beanName:user1,别名:[]
beanName:user2,别名:[]
beanName:user3,别名:[user3_1]
beanName:user4,别名:[user4_1,user4_4,user4_2,user4_3]
beanName:user5,别名:[user5_3,user5_4,user5_1,user5_2]