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()方法返回的实例。