- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
在这篇快速文章中,我们将通过一个例子来讨论Spring BeanFactory
接口。
BeanFactory
接口提供了一个简单而灵活的配置机制,通过Spring IoC容器管理任何性质的对象。在深入了解一个例子之前,让我们先看看一些基础知识。
Spring Bean是构成Spring应用程序主干的Java对象,由Spring IoC容器管理。除了由容器管理之外,Bean并没有什么特别之处(在其他方面,它是应用程序中众多对象中的一个)。
Spring IoC容器负责实例化、配置和组装Bean。容器通过读取我们为应用程序定义的配置元数据来获得关于要实例化、配置和管理哪些对象的信息。BeanFactory
持有Bean的定义,并在客户应用要求时将其实例化。
在这个例子中,我们将向Spring IoC容器提供基于XML的配置元数据。
按照以下三个步骤来开发一个Spring应用程序。
使用你喜欢的IDE创建一个简单的Maven项目,并参考下图的打包结构。如果你是maven新手,请阅读《如何创建一个简单的Maven项目》。
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>net.javaguides.spring</groupId>
<artifactId>spring-bean-factory-example</artifactId>
<version>0.0.1-SNAPSHOT</version>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.0.RELEASE</version>
</dependency>
</dependencies>
<build>
<sourceDirectory>src/main/java</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Spring Bean是由Spring容器管理的Java对象。
package net.javaguides.spring.ioc;
public class HelloWorld {
private String message;
public void setMessage(String message) {
this.message = message;
}
public void getMessage() {
System.out.println("My Message : " + message);
}
}
<?xmlversion = "1.0"encoding = "UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="helloWorld" class="net.javaguides.spring.ioc.HelloWorld">
<property name="message" value="Hello World!" />
</bean>
</beans>
如果我们在一个独立的应用程序中拥有Spring Bean配置的XML文件,那么我们可以使用ClassPathXmlApplicationContext类来加载该文件并获得容器对象。
package net.javaguides.spring.ioc;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Application {
public static void main(String[] args) {
XmlBeanFactory factory = new XmlBeanFactory (new ClassPathResource("applicationContext.xml"));
}
}
ApplicationContext接口提供了getBean()方法来从Spring容器中检索Bean。
package net.javaguides.spring.ioc;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Application {
public static void main(String[] args) {
XmlBeanFactory factory = new XmlBeanFactory (new ClassPathResource("applicationContext.xml"));
HelloWorld obj = (HelloWorld) factory.getBean("helloWorld");
obj.getMessage();
}
}
这个例子的源代码可以在我的GitHub仓库中找到 https://github.com/RameshMF/spring-core-tutorial
对不起我的英语。我使用 Eclipse 3.7,它在 tomcat6 上运行网络应用程序(spring-mvc + spring-secirity),但会发生下一个错误: java.lang.Ille
每次我新建一个新的 BeanFactory 时,都会重新创建 XML 文件中的 bean 吗?换句话说,如果我将 bean 的作用域设置为 Singleton,即使我新建了另一个 BeanFactor
1. BeanFactory fac=new ClassPathXmlApplicationContext("Spring-Config.xml"); 2. Resource res=new Clas
我有一个单例类,我想使用 Spring 的 IoC 创建它。该类还需要使用 IoC 实例化动态数量的其他对象。因此,此类需要将 BeanFactory 作为构造函数参数传入。我怎样才能做到这一点? 这
我一直在努力寻找更好的方法来做到这一点。在 Spring 中,我的很多类需要从 XmlBeanFactory 加载 bean(对象)。所以我将以下行放入我的大部分类(class)中 private s
当使用 Spring 并结合 ProxyFactoryBean 和 @Inject Provider<> 时,最终会在启动过程中创建大量对象。 我已将原因确定为 DefaultListableBean
我对 Spring 框架还很陌生,我一直在使用它并将一些示例应用程序放在一起,以评估 Spring MVC 以用于即将到来的公司项目。到目前为止,我真的很喜欢我在 Spring MVC 中看到的东西,
我有两个实现我的服务接口(interface)的服务,我想在运行时根据某些规则选择正确的服务,例如: public interface Service { public String doSometh
这个问题在这里已经有了答案: BeanFactory vs ApplicationContext (21 个回答) 7年前关闭。 两者实际上都是 ioc 容器。但它们之间的实际区别是什么?哪个更好用?
对于自定义 Scope(由于法律原因我不能在这里发布)我需要一个自定义 BeanFactory 来覆盖 getBean(Class requiredType) 方法,例如: public class
我的意图是从各种来源/目录(首先,稍后可能从 ftp)创建 IntegrationFlow bean 实例。因此,在 application.properties 中,我想定义这样的内容,入站目录的数
我正在关注 tutorial使用JAVA操作Alfresco上的nodeRef和内容。但是当我尝试定义 serviceRegistry 时, ServiceRegistry serviceRegis
Spring Application Context 将在 Server StartUp 时加载所有 Singleton bean。但是在大应用程序的情况下,它已经将很多对象加载到内存中。这不会成为应
slow autowire by type problem终于通过创建缓存bean工厂解决了。 我真的很想能够将这样的 CachingByTypeBeanFactory 与 SpringJUnit4C
这是我的错误: 我遇到了这个错误,谁能帮我解决这个问题。 > SEVERE: Exception sending context initialized event to listener > ins
我目前正在重构一个大型 Swing 应用程序,以便从 XmlBeanFactory 获取一些对象。 许多不同的类可以使用它,我想知道共享这个 beanFactory 的最佳方式是什么。 我应该创建一个
我确信上述问题有一个简单的答案,但我无法轻易找到它(无论是在文档中还是在 stackoverflow.com 上) 我得到一个 BeanFactory/ApplicatioContext 可以用几个
我有许多原型(prototype) bean,它们都共享一个公共(public)父类(super class) ( Foo )。所有这些 bean 都有一个采用一个 String 参数的通用构造函数。
首先,我不确定这样做是否是一个好主意。 目标是创建一些带有注释的接口(interface),以隐藏配置数据库中基于位置的遗留字符串访问,而无需实现每个接口(interface)。 声明式配置接口(in
我想将一个 Spring BeanFactory 注入(inject)到由同一个 BeanFactory 创建的 Bean有什么办法吗? 顺便说一下,我正在开发一个网络应用程序。如果不是,我知道我可以
我是一名优秀的程序员,十分优秀!