import org.junit.Test; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; import org.springframework.context.support.GenericXmlApplicationContext; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.FileSystemResource; public class TestSpring { * 4.x版本以后读取spring的配置文件方式 * 最常用方式 @Test public void testSpringClassPath (){ ClassPathXmlApplicationContext ca= new ClassPathXmlApplicationContext( "applicationContext.xml" ); UserInfo user=(UserInfo)ca.getBean( "user" ); System.out.println(user); * 4.x版本以后读取spring的配置文件方式 * classpath用于访问类路径下的配置文件 * filesyetem用于访问文件系统下的配置文件 @Test public void testSpringFileSystem (){ FileSystemXmlApplicationContext ca= new FileSystemXmlApplicationContext( "c:/applicationContext.xml" ); UserInfo user=(UserInfo)ca.getBean( "user" ); System.out.println(user); * GenericXmlApplicationContext 是通用过的xml加载方式 * 可以使用 前缀 判断是类路径还是文件系统 * file:表示文件系统 * classpath代表类路径 @Test public void testSpringGener (){ GenericXmlApplicationContext ca= new GenericXmlApplicationContext( "file:c:/applicationContext.xml" ); UserInfo user=(UserInfo)ca.getBean( "user" ); System.out.println(user); * 3.x版本以后读取spring的配置文件方式 @Test public void testSpring3XClassPath (){ ClassPathResource cpr= new ClassPathResource( "applicationContext.xml" ); BeanFactory bf= new XmlBeanFactory(cpr); UserInfo user=(UserInfo)bf.getBean( "user" ); System.out.println(user); * 3.x版本以后读取spring的配置文件方式 @Test public void testSpring3XFileSystem (){ FileSystemResource cpr= new FileSystemResource( "c:/applicationContext.xml" ); BeanFactory bf= new XmlBeanFactory(cpr); UserInfo user=(UserInfo)bf.getBean( "user" ); System.out.println(user); package com.spring.hello;import org.junit.Test;import org.springframework.beans.factory.BeanFactory;import org.springframework.beans.factory.xml.XmlBeanFactory;import org.springframework.context.sup spring -framework-4.0.0.RELEASE-dist.zip 下载 spring 的 源码以及编译后的压缩包 解压之后 拷贝出 这几个 jar 包 放到一个 任意的文件夹 spring - bea ns-4.0.0.RELEASE.jar spring -context-4.0.0.RELEASE.jar
大约一年前,我写了一篇博客文章如何模拟 Spring Bea n 。 所描述的模式对生产代码几乎没有侵入性。 正如一位读者Colin在评论中正确指出的那样,基于@Profile注释的间谍/模拟 Spring bea n是更好的选择。 这篇博客文章将描述这种技术。 我在工作中以及副项目中都成功使用了这种方法。 请注意,在您的应用程序中普遍出现的嘲笑通常被视为设计气味。 介绍生产代码 首先,我们...
他们两个都是个工厂,但Factory Bea n本质上还是一个 Bea n,也归 Bea nFactory管理 Bea nFactory是 Spring 容器的顶层接口,Factory Bea n更类似于用户自定义的工厂接口。 Bea nFactory:以Factory结尾,表示它是一个工厂类(接口),它负责生产和管理 bea n的一个工厂。在 Spring 中, Bea nFactory是IOC容器的核心接口,它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。 Bea nFactory只是个接口,并不是IOC容器的具.
这篇blog源于一个疑问: 我们公司使了阿里的dubbo,但是阿里的开源网站http://code.alibabatech.com,挂掉有好几个月了,为什么我们的应用启动没有问题? 我们的应用的 Spring 配置文件里有类似的配置:
Spring Boot中,可以使用@Primary注解来标识一个 bea n具有高优先级。当同一个类型的多个 bea n被注入时,具有@Primary注解的 bea n将被首选。如果有多个 bea n都有@Primary注解,则可以使用@Qualifier注解来指定具体使用哪个 bea n。例如: ```java @Configuration public class MyConfig { @ Bea n @Primary public My Bea n my Bea n() { return new My Bea n(); @ Bea n public My Bea n another Bea n() { return new My Bea n(); 在上面的例子中,My Bea n具有@Primary注解,因此当注入My Bea n时, Spring 会首选my Bea n()方法返回的实例。 如果你想在使用@Primary注解的同时,保留其他同类型 bea n的注入,可以使用@Qualifier注解来指定具体使用哪个 bea n。例如: ```java @Service public class MyService { private final My Bea n my Bea n; @Autowired public MyService(@Qualifier("another Bea n") My Bea n my Bea n) { this.my Bea n = my Bea n; 在上面的例子中,虽然My Bea n具有@Primary注解,但是在MyService中使用了@Qualifier注解指定了使用名称为"another Bea n"的 bea n。因此,MyService将注入another Bea n()方法返回的实例。