这里有新鲜出炉的精品教程, 程序狗速度看过来!
Spring Framework 开源 j2ee 框架
Spring 是什么呢? 首先它是一个开源的项目, 而且目前非常活跃; 它是一个基于 IOC 和 AOP 的构架多层 j2ee 系统的框架, 但它不强迫你必须在每一层 中必须使用 Spring, 因为它模块化的很好, 允许你根据自己的需要选择使用它的某一个模块; 它实现了很优雅的 MVC, 对不同的数据访问技术提供了统一的接口, 采用 IOC 使得可以很容易的实现 bean 的装配, 提供了简洁的 AOP 并据此实现 Transcation Managment, 等等
本篇文章主要介绍了详解 Spring 中 bean 实例化的三种方式, 小编觉得挺不错的, 现在分享给大家, 也给大家做个参考一起跟随小编过来看看吧
今天我想来说说如何通过 xml 配置来实例化 bean, 其实也很简单
使用 xml 配置来实例化 bean 共分为三种方式, 分别是普通构造方法创建静态工厂创建实例工厂创建, OK, 那么接下来我们来分别看看这几种方式
普通构造方法创建
这种创建方式使我们使用最多的一种创建方式, 直接配置 bean 节点即可, 比如我有一个 User 类, 如下:
- public class User {public void add() {
- System.out.println("add()---------");
- }
- }
然后通过简单配置一个 bean 节点就可以获取实例了, 如下:
<bean class="org.sang.User" id="user"/>
OK, 我们通过如下代码进行一个简单的测试:
- ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
- User user = (User) context.getBean("user");
- System.out.println(user);
运行输出结果如下:
静态工厂创建
除了通过普通的构造方法创建之外, 我们也可以通过静态构造方法来创建一个 bean 的实例, 假设我有一个类叫做 User2, 如下:
- public class User2 {
- public void add() {
- System.out.println("add2()---------");
- }
- }
我给它创建一个静态工厂, 如下:
- public class User2Factory {
- public static User2 getInstance() {
- return new User2();
- }
- }
该工厂中有一个静态方法, 该静态方法返回一个 User2 的实例, 在 Spring 的配置文件中, 我们看看如何生成 User2 的实例:
<bean id="user2" class="org.sang.User2Factory" factory-method="getInstance"/>
还是 bean 节点, 只是多了一个 factory-method 属性, 该属性指明该类中的静态工厂方法名为 getInstance, 这样 Spring 框架就知道调用哪个方法来获取 User2 的实例了, 测试代码如下:
- @Test
- public void test2() {
- ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
- User2 user = (User2) context.getBean("user2");
- user.add();
- }
测试结果如下:
值得强调的是, 这种方法并不常用
实例工厂创建
小伙伴们看了静态工厂创建 bean 实例肯定都觉得很麻烦, 事实上还有比静态工厂更麻烦的写法, 那就是通过实例工厂来创建 bean 实例实例工厂, 顾名思义, 就是我们工厂中的方法不是静态的, 比如说, 我有一个实体类叫做 User3, 如下:
- public class User3 {
- public void add() {
- System.out.println("add3()---------");
- }
- }
然后我还有一个工厂方法, 如下:
- public class User3Factory {
- public User3 getUser3() {
- return new User3();
- }
- }
小伙伴们看到, 在 User3Factory 类中有一个 getUser3 的方法, 该方法返回一个 User3 类的实例, 但是该方法不是静态的, 那么我们在 Spring 的配置文件中要进行怎样的配置才能获取 User3 的一个实例呢? 如下:
- <bean class="org.sang.User3Factory" id="user3Factory"/>
- <bean id="user3" factory-bean="user3Factory" factory-method="getUser3"/>
第一个 bean 用来获取 user3Factory 的实例, 第二个 bean 则根据 User3Factory 的实例, 然后指定 factory-method, 通过 getUser3 方法来获取 User3 的实例
测试代码如下:
- @Test
- public void test3() {
- ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
- User3 user = (User3) context.getBean("user3");
- user.add();
- }
测试结果如下:
OK, 以上就是 bean 实例化的三种方式, 最最常用的是第一种
本文案例 GitHub 地址 https://github.com/lenve/JavaEETest/tree/master/Test28-Spring1
来源: http://www.phperz.com/article/18/0316/357614.html