`

Spring的几个有用的小功能

 
阅读更多

一、 Spring的Profile功能

这个功能的使用方法其实和Maven的profile是一样的,可以通过不同的参数来激活某些配置,这样便于我们在开发、调试以及生产模式下进行切换。

对于类的配置,如果需要启用Profile功能,有以下几种方式:

    1. 对于在配置类上使用注解方式的配置

 

@Configuration
@Profile(value="productprofile")
public class ProductConfig {
...
}

 

    2. 对于使用注解方式定义类

 

@Bean
@Profile("dev")
public Person getPerson() {
}

 

 

    3. 在XML里使用

 

	<beans>
		<bean id="person" class="com.test.spring.profile.ProfilePerson">
			<constructor-arg value="The message comes from default enviorment."/>
		</bean>
		
		<bean id="person2" class="com.test.spring.profile.ProfilePerson">
			<constructor-arg value="The message comes from default2 enviorment."/>
		</bean>
	</beans>
	
	<beans profile="dev">
		<bean id="person" class="com.test.spring.profile.ProfilePerson">
			<constructor-arg value="The message comes from development enviorment."/>
		</bean>
	</beans>
	
	<beans profile="prd">
		<bean id="person" class="com.test.spring.profile.ProfilePerson">
			<constructor-arg value="The message comes from production enviorment."/>
		</bean>
	</beans>

     4. 也可以将特定的配置集中在某些文件里,然后通过参数来激活   

<import resource="spring/spring-profile-${spring.profiles.active}.xml"/>

 

总结一下,就是以下这些:

1.ENV方式: ConfigurableEnvironment.setActiveProfiles("unittest")
2.代码方式:System.setProperty("spring.profiles.active", "dev")
3.JVM参数方式: -Dspring.profiles.active="unittest"
4.web.xml方式:
<init-param>
  <param-name>spring.profiles.active</param-name>
  <param-value>production</param-value>
</init-param>
5.标注方式(junit单元测试非常实用):
@ActiveProfiles({"unittest","productprofile"})

 

 

 

 

二、Spring里的事件发布功能

之前看过Guava的事件发布,回过头发现Spring也已经提供了,对于项目里简单的事件触发功能,肯定是够用了。以下内容转载自:http://wiselyman.iteye.com/blog/2212013

       应按照如下部分实现bean之间的消息通讯

  • 继承ApplicationEvent类实现自己的事件
  • 实现继承ApplicationListener接口实现监听事件
  • 使用ApplicationContext发布消息

 

//事件类
import org.springframework.context.ApplicationEvent;

public class DemoEvent extends ApplicationEvent{
    private static final long serialVersionUID = 1L;
    private String msg;

    public DemoEvent(Object source,String msg) {
        super(source);
        this.msg = msg;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

}

//监听类
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
@Component
public class DemoListener implements ApplicationListener<DemoEvent> {

    public void onApplicationEvent(DemoEvent event) {
            String msg = ((DemoEvent) event).getMsg();
            System.out.println("我监听到了pulisher发布的message为:"+msg);

    }

}

//测试类
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.stereotype.Component;
@Component
public class Main {

    public static void main(String[] args) {
        AnnotationConfigApplicationContext context =
                new AnnotationConfigApplicationContext("com.event");
        Main main =context.getBean(Main.class);
        main.pulish(context);
        context.close();

    }
    public void pulish(AnnotationConfigApplicationContext context){
        context.publishEvent(new DemoEvent(this, "22"));
    }

}

 

 

三、Spring的Conditional功能

其实这个功能感觉上跟Profile是类似的,主要是Conditional允许自定义规则,更加灵活一些。

这里有一篇文章,对两者有一个示例性的说明:

http://blog.csdn.net/yangxt/article/details/19970323

分享到:
评论

相关推荐

    spring-security所需要的jar包,

    4. **spring-security-core-tiger-2.0.5.RELEASE-sources.jar**:这个jar包包含了Spring Security核心组件的源代码,对于开发者来说非常有用,因为它允许他们查看和理解框架内部的工作原理,便于调试和自定义扩展。...

    Spring Data JPA 笔记

    接下来,我们将讨论几个关键知识点: 1. **实体(Entities)**:在Spring Data JPA中,实体是数据库表的映射。通过在类上添加`@Entity`注解,我们可以声明一个Java类为数据库表的代表。`@Id`注解用于标识主键字段。...

    Spring Boot 2.5.0简单学习pdf资料

    在 Spring Boot 2.5.0 中,项目开发流程通常包括需求分析、概要设计、详细设计、编码、测试和部署等几个阶段。在每个阶段都需要遵守一定的流程和规范,以确保项目的质量和可维护性。 环境搭建 在 Spring Boot ...

    springsecurity学习笔记

    在深入理解Spring Security之前,我们需要了解几个核心概念: 1. **认证(Authentication)**:这是确认用户身份的过程。Spring Security 提供了多种认证方式,如用户名/密码、证书、API密钥等。通常,用户通过登录...

    Spring 动态模型( Spring Dynamic Modules )参考指南

    通过将Spring的灵活与OSGi的模块化特性相结合,Spring Dynamic Modules提供了许多对企业级应用非常有用的功能。 #### 二、Spring Dynamic Modules 的核心功能 - **动态模块性**:在OSGi环境下,应用程序通常被拆分...

    Ext Direct Spring 参考手册

    主要包括以下几个部分: - **介绍**:简要介绍了ExtDirectSpring的功能特性和适用场景。 - **版本变更记录**:列举了不同版本之间的功能改进及修复的Bug等信息。 - **从1.0升级至1.1的迁移指南**:指导开发者如何...

    基于Spring Batch的大数据量并行处理

    Spring Batch采用了清晰的分层架构设计,主要包括以下几个层面: - **Application**:负责业务逻辑处理。 - **Batch Core**:包含核心的批处理领域对象,如Job、Step等。 - **Batch Execution Environment**:为...

    spring-android-core-1.0.0.RELEASE-sources.jar

    Spring for Android的核心模块主要关注于以下几个方面: 1. **依赖注入(Dependency Injection, DI)**:Spring的核心特性之一,DI在Android平台上同样适用。它允许开发者声明性地配置对象及其依赖关系,而不是硬...

    spring开发包

    Spring框架主要由以下几个核心模块组成: 1. **Core Container**:这是Spring框架的基础,包含Bean Factory和ApplicationContext。Bean Factory是Spring的IoC(Inversion of Control,控制反转)容器,负责管理对象...

    spring-framework-3.2.15.RELEASE-dist

    Spring 框架主要由以下几个核心模块组成: 1. **核心容器**(Core Container):这是Spring的基础,包括 Beans、Core、Context 和 Expression Language 模块。Beans模块提供了Bean工厂,它是Spring的IoC(Inversion...

    spring data hadoop reference

    配置 Hadoop 主要涉及到以下几个方面: - **核心配置**:包括 `hadoop-site.xml` 文件中的配置,这些配置通常用于设置 Hadoop 的基本行为。 - **资源管理器配置**:如 YARN(Yet Another Resource Negotiator)相关...

    Spring Nested事务简单案例

    在本案例中,我们关注的是Spring中的Nested事务,这是一个相对复杂的特性,但非常有用,特别是在需要子事务处理的场景下。下面将详细解释这个概念。 Nested事务是基于JDBC的Savepoint机制实现的,它可以让我们在一...

    spring-api(非常有用的资料!)

    在Spring框架中,API主要包括以下几个关键模块: 1. **Spring Core Container**: 这是Spring框架的基础,包括Bean工厂和ApplicationContext接口。Bean工厂负责管理对象的生命周期和依赖关系,而ApplicationContext...

    Spring Data JPA中文文档[1.4.3]

    在Spring Data JPA中,主要包含以下几个核心知识点: 1. **Repository接口**:这是Spring Data JPA的核心特性之一,通过定义一组通用的CRUD(创建、读取、更新、删除)操作接口,开发者可以快速实现数据访问层。...

    spring-4.1.7 jar包

    Spring框架主要由以下几个核心模块组成: 1. **Core Container**(核心容器):这是Spring的基础,包括Bean Factory和ApplicationContext。Bean Factory是Spring的IoC(Inversion of Control,控制反转)容器,负责...

    spring cloud 教程 pdf

    本教程的核心内容围绕以下几个关键知识点展开: 1. **服务发现**:Spring Cloud提供了Eureka和Consul等服务发现组件,使得服务能够互相找到对方,从而实现服务间的通信。服务注册与发现是微服务架构中的基础,它...

    spring 4.2.3所有jar包和依赖

    4.2.3版本中,Spring Framework包含以下几个主要模块: 1. **Spring Core Container**:这是Spring框架的基础,包括Bean Factory和Application Context。Bean Factory负责创建、配置和管理对象,而Application ...

    跟我学spring3,很不错的spring学习资料

    根据给定文件的信息,我们可以提炼出以下几个重要的知识点: ### 一、Spring 对 ORM 的支持 #### 8.1 概述 - **ORM (Object/Relation Mapping) 框架**:这是一种编程技术,用于将对象模型与关系型数据库之间的...

    Shiro+Spring Security学习文档

    "跟我学Shiro教程.pdf"可能涵盖了以下几个方面: 1. **认证**:Shiro提供了一种直观的方式来处理用户登录,包括用户名/密码的验证。它支持多种凭证匹配器,可以自定义处理不同类型的认证信息。 2. **授权**:Shiro...

    自定义 Schema 解析 Spring Bean

    实现自定义Schema解析的过程主要包括以下几个步骤: 1. **定义Schema**: 使用XSD(XML Schema Definition)文件定义新的XML命名空间和元素。这个文件会包含所有自定义的标签和它们的属性。例如,我们可以创建一个`...

Global site tag (gtag.js) - Google Analytics