`
dinguangx
  • 浏览: 244851 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

[Spring3.1]动态创建Spring bean

阅读更多

 

目前正在使用的软件开发包中有一个业务服务基类BaseService,所有的自定义服务类都会继续于这个BaseService,但是业务服务实例是由软件包中封装好的BaseServiceFactory创建的,在需要使用具体的业务实例时,BaseServiceFactory接收具体的BaseService类名来创建服务实例,如下:

 

public BaseService getService(String className);
 

现在想要将该软件开发包与spring进行整合,将所有的业务服务类加入到spring容器中,作为spring bean使用,所以就想采用动态创建spring bean的方式来实现:首先由className生成Bean定义,再由Bean定义来产生代码业务类。

目前spring提供基于XMLannotation等多种方式的bean配置,但是这些配置都是在容器启动的时候已经确定了bean的类型以及参数类型,要实现我们现在的这种业务场景,只有通过BeanDefinitionBuilder来创建Bean定义并加入BeanFactory

springBeanFactory子类众多,其中DefaultListableBeanFactory可以支持动态增加Bean定义,代码实现如下

public class CustomBaseServiceFactory {
 
  private static final String BEAN_POSTFIX = ".service";
  public BaseService getService(String className) {
     String beanName = className + BEAN_POSTFIX;
     ConfigurableApplicationContext applicationContext = (ConfigurableApplicationContext) SpringContextHolder
            .getApplicationContext();
     DefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory) applicationContext
            .getBeanFactory();
     if (!beanFactory.containsBean(beanName)) {
         BeanDefinitionBuilder bdb = BeanDefinitionBuilder
                .rootBeanDefinition(className);
         bdb.setScope("prototype");
         beanFactory.registerBeanDefinition(beanName,
                bdb.getBeanDefinition());
     }
 
     return (BaseService) beanFactory.getBean(beanName);
  }
}
 

这样,即完成了对BaseService的改造,无论是对业务类增加AOP或者注入属性都可以方便地实现。更为方便的是,如果使用的是该类的子类,不再需要在子类上增加@Service,@Component之类的标记了;如果需要在子类中注入其他的bean,只需要在该属性上增加@autowired@resource即可实现属性的注入。

 

 

 

0
0
分享到:
评论
2 楼 dinguangx 2012-09-17  
melin 写道
以前用过,遇到aop不灵啊

经过后面的测试,我也发现这个问题了,不知道算不算spring的BUG,还是说spring有意而为之
1 楼 melin 2012-09-14  
以前用过,遇到aop不灵啊

相关推荐

    spring 3.1的 源码

    3. **Spring Expression Language (SpEL)**:Spring 3.1增强了SpEL表达式语言,允许在运行时动态查询和操作对象图。这在处理复杂的条件逻辑和数据绑定时非常有用。 4. **Java配置**:Spring 3.1引入了Java配置类,...

    Spring 3.1 jar包

    首先,Spring 3.1 引入了Groovy配置支持,这使得开发者可以使用Groovy语言编写bean的配置,提供了更简洁和动态的配置方式。Groovy配置文件具有更强的表达力,能够减少XML配置的繁琐,提高开发效率。 其次,Spring ...

    spring3.1 jar全集

    在这个"spring3.1 jar全集"中,我们包含了Spring的核心组件和其他关键模块,如AOP(面向切面编程)和Beans模块。 首先,让我们深入了解一下Spring Core。这是Spring框架的基础,提供了依赖注入(DI)和控制反转...

    spring3.1源码包

    另外,Spring 3.1对RESTful服务的支持也得到了加强,通过`@RestController`注解,开发者可以轻松创建RESTful服务,这在构建基于HTTP的服务和API时非常有用。同时,`@ResponseBody`和`@RequestBody`注解帮助将HTTP...

    最新 spring3.1 完整jar包

    在这个“最新 spring3.1 完整jar包”中,包含了Spring框架的所有核心组件和其他相关模块,确保了开发环境的完备性。 1. **核心容器**:Spring的核心在于其IoC(Inversion of Control)容器,它负责管理应用对象的...

    spring3.1相关配置文件

    2. **AOP增强**:Spring 3.1对AOP的支持也有所加强,增加了对代理模式的选择,可以选择JDK动态代理或CGLIB代理。`@Aspect`注解用于定义切面,`@Before`, `@After`, `@Around`, `@AfterReturning`和`@AfterThrowing`...

    spring3.1完整包

    这个"spring3.1完整包"包含了Spring框架的多个核心模块,下面将详细介绍这些模块及其功能。 1. **org.springframework.context-3.1.0.M1.jar**:这是Spring上下文模块,提供了容器的核心功能,包括Bean的定义、配置...

    spring3.1开发宝典

    《Spring3.1开发宝典》是一份详尽的指南,专为那些希望深入了解和掌握Spring框架3.1版本的开发者准备。这份宝典不仅涵盖了Spring框架的核心概念,还深入探讨了新特性、增强功能以及如何在实际项目中应用这些知识。 ...

    spring3.1需要的jar包

    标题中的“spring3.1需要的jar包”指的是在使用Spring框架版本3.1时所需的外部依赖库。Spring是一个开源的Java平台,它为构建企业级应用提供了全面的框架支持,包括依赖注入(DI),面向切面编程(AOP),以及用于...

    spring3.1所需的全部jar包

    Spring 3.1是该框架的一个重要版本,它引入了许多增强功能和优化,提高了开发效率和应用性能。这个压缩包包含了运行Spring 3.1应用程序所需的所有jar文件,确保了环境的完整性和兼容性。 首先,Spring的核心库`...

    spring3.1+xfire1.26

    在"spring3.1+xfire1.26 全注解"这个项目中,开发者利用Spring 3.1的注解特性来配置和管理应用程序组件,以及XFire 1.26来处理Web服务的创建和交互。全注解意味着不再需要XML配置文件,而是直接在Java类和方法上使用...

    Spring3.1AOP简单例子

    在"Spring3.1.0Demo2-AOP"这个示例中,我们可能还会看到如何将AOP与Spring的其他功能(如IoC容器和依赖注入)结合使用,以创建一个完整的应用。例如,切面可能被注入到其他bean中,或者使用Spring的事务管理功能来...

    spring3.1官方手册英文版

    在Spring 3.1中,SpEL被广泛应用于bean属性的动态设置和条件逻辑的判断。 8. **消息支持** Spring 3.1提供了对消息传递系统的支持,包括JMS(Java Message Service),使得应用程序能够实现异步通信和解耦。 9. *...

    spring 3.1中文文档

    3. **bean的实例化与管理**:Spring 3.1支持通过构造方法、静态工厂方法和实例工厂方法等方式实例化bean,同时提供了bean的生命周期管理、作用域设置等功能。 4. **自定义范围的实现**:除了默认提供的单例、原型、...

    struct2.3+spring3.1+mybits3.1 核心Jar包和配置文件

    "struct2.3+spring3.1+mybits3.1 核心Jar包和配置文件"的组合正是这样一个经典的应用架构,它将Struts2、Spring3.1和MyBatis3.1这三个流行框架整合在一起,为开发者提供了强大的MVC(Model-View-Controller)架构...

    spring3.1+hibernate4.1+struts2整合jar包

    在"spring3.1+hibernate4.1+struts2整合jar包"中,包含了这三个框架的最新稳定版本,确保了良好的兼容性和性能。Spring 3.1引入了更多改进,如支持JSR-330标准的依赖注入,增强了对Groovy的支持,以及对AOP的进一步...

    spring3.1 struts2.3 hibernate4.1 jpa集成小例子

    这个"spring3.1 struts2.3 hibernate4.1 jpa集成小例子"是一个典型的Java Web项目,它展示了如何将Spring 3.1、Struts 2.3、Hibernate 4.1和Java Persistence API (JPA) 这四大组件融合到一个应用中。接下来,我们将...

    spring 3.1 参考手册 英文

    ### Spring 3.1 参考手册中文解读 #### 概览 Spring 3.1 是 Spring 框架的一个重要版本更新,它在 Spring 3.0 的基础上增加了许多新特性和改进,旨在提高开发者的生产力并进一步增强框架的功能性。本篇解读将根据...

    spring 3.1 mvc sample

    1. **Annotation-based Configuration**:Spring 3.1进一步推广了注解配置,使得开发者可以无需XML配置就能创建和管理Bean。例如,@Controller、@Service、@Repository和@Autowired等注解用于声明和装配Bean。 2. *...

    spring 3.1使用手册

    - **Bean Factory**:最基础的容器接口,负责创建并管理bean。 - **Application Context**:提供了一个更为完整的配置能力,通常用于应用程序的上下文中,支持国际化、事件发布等功能。 - **Bean的生命周期管理**:...

Global site tag (gtag.js) - Google Analytics