- 浏览: 624139 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (819)
- java开发 (110)
- 数据库 (56)
- javascript (30)
- 生活、哲理 (17)
- jquery (36)
- 杂谈 (15)
- linux (62)
- spring (52)
- kafka (11)
- http协议 (22)
- 架构 (18)
- ZooKeeper (18)
- eclipse (13)
- ngork (2)
- dubbo框架 (6)
- Mybatis (9)
- 缓存 (28)
- maven (20)
- MongoDB (3)
- 设计模式 (3)
- shiro (10)
- taokeeper (1)
- 锁和多线程 (3)
- Tomcat7集群 (12)
- Nginx (34)
- nodejs (1)
- MDC (1)
- Netty (7)
- solr (15)
- JSON (8)
- rabbitmq (32)
- disconf (7)
- PowerDesigne (0)
- Spring Boot (31)
- 日志系统 (6)
- erlang (2)
- Swagger (3)
- 测试工具 (3)
- docker (17)
- ELK (2)
- TCC分布式事务 (2)
- marathon (12)
- phpMyAdmin (12)
- git (3)
- Atomix (1)
- Calico (1)
- Lua (7)
- 泛解析 (2)
- OpenResty (2)
- spring mvc (19)
- 前端 (3)
- spring cloud (15)
- Netflix (1)
- zipkin (3)
- JVM 内存模型 (5)
- websocket (1)
- Eureka (4)
- apollo (2)
- idea (2)
- go (1)
- 业务 (0)
- idea开发工具 (1)
最新评论
-
sichunli_030:
对于频繁调用的话,建议采用连接池机制
配置TOMCAT及httpClient的keepalive以高效利用长连接 -
11想念99不见:
你好,我看不太懂。假如我的项目中会频繁调用rest接口,是要用 ...
配置TOMCAT及httpClient的keepalive以高效利用长连接
由于项目的需要spring的业务相关的bean不是写在xml文件中,因为项目是一个模块一个模块提交的,提交的时候不想修改xml文件,因此就用到了spring的注解Service。
例如:
Java代码
这等同于:
spring会在classpath里面扫描标记有TestService等标签的类,扫描组件的配置如下:
Xml代码
加上以上的配置后,spring会自动的扫描org.sdp文件下的标记有注释的类。
以上的配置看似很“完美”,其实如果项目稍微大时就会出现问题,大家都知道spring的bean的id必须唯一,如果两个人同事写代码就有可以造成写同样的bean名称。
解决这个问题的一个思路是把bean的名称修改为 类的全路径,例如org.sdp.A 和com.bey.A 。
只要修改spring默认的bean命名策略就可以了。
AnnotationBeanNameGenerator是bean的默认命名策略,他实现了BeanNameGenerator接口。在Service里面,如果不写bean的名称,那么默认的名曾是类名,但是第一个字母是小写的。
例如:
Html代码
观察spring的源代码发现,buildDefaultBeanName方法首先了bean名称小写的作用。
因此,可以写一个类继承自AnnotationBeanNameGenerator,重写buildDefaultBeanName方法。
我的改下代码:
在扫描配置中需要添加自己的命名策略类:
参考:http://www.cnblogs.com/sunxucool/archive/2012/12/19/2824935.html
例如:
Java代码
@Service("TestService") public class TestService { }
这等同于:
<bean id="TestService" class="TestService"/>
spring会在classpath里面扫描标记有TestService等标签的类,扫描组件的配置如下:
Xml代码
<!-- sdp-service主要是注入服务类 --> <context:component-scanbase-package="org.sdp"/>
加上以上的配置后,spring会自动的扫描org.sdp文件下的标记有注释的类。
以上的配置看似很“完美”,其实如果项目稍微大时就会出现问题,大家都知道spring的bean的id必须唯一,如果两个人同事写代码就有可以造成写同样的bean名称。
解决这个问题的一个思路是把bean的名称修改为 类的全路径,例如org.sdp.A 和com.bey.A 。
只要修改spring默认的bean命名策略就可以了。
AnnotationBeanNameGenerator是bean的默认命名策略,他实现了BeanNameGenerator接口。在Service里面,如果不写bean的名称,那么默认的名曾是类名,但是第一个字母是小写的。
例如:
Html代码
com.xyz.FooServiceImpl -> fooServiceImpl
观察spring的源代码发现,buildDefaultBeanName方法首先了bean名称小写的作用。
protected String buildDefaultBeanName(BeanDefinition definition) { String shortClassName = ClassUtils.getShortName(definition.getBeanClassName()); return Introspector.decapitalize(shortClassName); }
因此,可以写一个类继承自AnnotationBeanNameGenerator,重写buildDefaultBeanName方法。
public class SdpAnnotationBeanNameGenerator extends AnnotationBeanNameGenerator { @Override protected String buildDefaultBeanName(BeanDefinitiondefinition) { return definition.getBeanClassName(); } }
我的改下代码:
@Override protected String buildDefaultBeanName(BeanDefinition definition) { String className =definition.getBeanClassName(); className=className.substring(className.lastIndexOf(".")+1); if(className.toLowerCase().endsWith("impl")){ className=className.substring(0, className.length()-4); } if((className.toLowerCase().endsWith("service")||className.toLowerCase().endsWith("dao"))==false){ return super.buildDefaultBeanName(definition); } className=className.substring(0,1).toLowerCase() + className.substring(1); return className; }
在扫描配置中需要添加自己的命名策略类:
<!-- sdp-service主要是注入服务类 --> <context:component-scan base-package="org.sdp" name-generator="org.sdp.spring.SdpAnnotationBeanNameGenerator" />
参考:http://www.cnblogs.com/sunxucool/archive/2012/12/19/2824935.html
发表评论
-
TransactionalEventListener注解
2021-07-04 12:14 1117TransactionalEventListener注解 记 ... -
Spring核心之bean
2021-06-16 13:49 207Spring Aop介绍 AOP,确实难,会让很多人懵逼 ... -
不使用@EnableTransactionManagement注解就能使用事务
2021-06-13 11:03 463https://blog.csdn.net/weixin_38 ... -
spring4.1.8扩展实战之三
2019-01-03 23:35 410spring4.1.8扩展实战之三:广播与监听 https:/ ... -
Spring装配Bean的过程
2018-03-22 20:40 345(spring-第1回【IoC基础篇】)Spring容器中Be ... -
第三章 DispatcherServlet详解 ——跟开涛学SpringMVC
2018-03-20 19:54 479http://jinnianshilongnian.iteye ... -
Spring事件机制
2017-10-26 22:56 343Spring事件机制的简单例子 http://blog.cs ... -
Spring3.1新属性管理API:PropertySource、Environment、Profile
2017-09-06 20:17 427http://jinnianshilongnian.iteye ... -
FactoryBean的实现原理与作用
2017-09-05 20:50 0FactoryBean的实现原理与作用 http://blog ... -
@Inject和@Autowired以及@Resource区别
2017-08-21 15:52 726@value 注解配置默认值 但是,如果配置文件中没有设置 n ... -
通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作
2017-08-02 09:51 540关于在spring 容器初始化 bean 和销毁前所做的操作 ... -
Spring HttpInvoker远程调用的例子
2017-07-20 19:42 401http://blog.csdn.net/liuhui_306 ... -
spring 获取bean的几种方式
2017-07-20 17:36 398http://www.cnblogs.com/luoluosh ... -
一句话概括下spring框架及spring cloud框架主要组件
2017-07-19 16:56 44作为java的屌丝,基本上 ... -
AOP日志,记录调用类、方法、方法参数名称、方法参数值(包括对象和基本类型)
2017-07-15 19:15 2238http://blog.csdn.net/paincupid/ ... -
spring mvc Controller中使用@Value无法获取属性值
2017-06-28 17:14 961http://www.cnblogs.com/xianan87 ... -
4种方法让SpringMVC接收多个对象
2017-06-06 11:23 525http://blog.csdn.net/lutinghuan ... -
springmvc在普通类中获取HttpServletRequest对象
2017-05-25 17:18 727https://stackoverflow.com/quest ... -
spring的配置文件中mvc:view-controller path使用方法
2017-05-14 13:11 872[list] 1、重定向 <mvc:view-contr ... -
warning no match for this type name: com.cloud.access.web [Xlint:invalidA
2017-02-27 08:47 1520warning no match for this type ...
相关推荐
例如,开发者可以通过自定义标签来定义一组特定的注解策略,或者在处理某些特定场景时,通过注解来控制Bean的行为。 总结起来,Spring的自定义标签解析是通过`NamespaceHandler`机制实现的,而注解解析则依赖于类...
在Spring框架中,自定义标签和注解解析是核心功能之一,它们允许开发者根据特定需求扩展和定制Spring的配置方式。本文将深入探讨这两个概念的解析原理,帮助读者理解Spring如何处理自定义标签和注解。 首先,让我们...
然而,这两种接口的方法命名约定可能会导致代码过于依赖Spring,因此Spring 4.0引入了`@PostConstruct`和`@PreDestroy`注解作为替代,它们更符合JSR-250规范,可以更好地与其他Java EE环境兼容。 此外,`...
- 最后,为了使Spring能够识别并使用我们的`CustomCommandExecutor`,需要在配置文件或使用注解配置中注册这个bean。 5. **应用场景**:自定义命令执行器常用于以下场景: - 当需要在多个地方调用同一个方法,但...
这里,`MyCustomNameGenerator`是一个实现了`BeanNameGenerator`接口的类,用于提供定制化的Bean命名策略。 #### 结论 Spring框架的注解驱动依赖注入极大地简化了应用的配置,提高了代码的可读性和可维护性。通过...
在这个项目中,我们应该能看到对自定义Spring Boot Starter的引用以及其他必要的依赖。 5. `src`:源代码目录,通常包含`main`和`test`两个子目录,分别存放主代码和测试代码。在`main`下,会有Java源码和资源文件...
不过,仍需确保Bean的类名或自定义的`@Component`注解上的`@Qualifier`值是唯一的。 总之,理解并遵循Spring Bean的命名规则和注入机制是防止这类故障的关键。在实际开发中,保持良好的命名习惯,合理使用注解和...
总的来说,自定义Spring Boot Starter能够帮助你构建可重用、模块化的组件,降低复杂性,并提高开发效率。通过深入学习和实践`demo-spring-boot-starter`的源码,你将更好地理解Spring Boot的自动配置原理,以及如何...
在Spring框架中,扩展点是允许用户自定义行为的关键组件,而`NamespaceHandler`就是其中的一个重要扩展点,主要用于处理自定义的XML命名空间。当我们需要在Spring配置文件中引入自定义标签时,`NamespaceHandler`起...
在“spring mvc 3 国际化(下)——简单自定义操作”这一主题中,我们将深入探讨如何自定义国际化过程,以满足特定的应用场景需求。 首先,国际化的核心是资源文件,通常命名为`messages.properties`,用于存储默认...
Spring框架是Java开发中广泛应用的...不过,需要注意的是,随着Spring的发展,Java配置和注解方式已经越来越流行,自定义XSD在某些场景下可能不再是首选,但了解这个过程仍然对理解Spring的底层工作机制有极大的帮助。
3. **使用`@Configuration`和`@Bean`注解**:在Spring配置类中,使用`@Configuration`注解标记该类为配置类,然后使用`@Bean`注解声明数据源对象。例如: ```java @Configuration public class DataSourceConfig ...
除了内置的注解,Spring还支持自定义注解,只需在自定义注解上添加`@Component`注解,即可赋予其标记Bean的能力。虽然这一特性不常用,但它展示了Spring的高度灵活性。 ##### BeanNameGenerator与自定义命名策略 ...
- **Bean命名**:每个Bean都有一个或多个标识符,这些标识符在容器内必须是唯一的。可以通过id属性或name属性来指定。 - **Bean实例化**:Bean可以通过构造器、静态工厂方法或实例工厂方法来实例化。 #### 依赖 ...
### Spring2.5与3.0注解详解 在探讨Spring框架中注解的应用之前,我们首先需要理解注解在Java编程语言中的基础概念。注解是Java SE 5引入的一种元数据机制,用于在代码中嵌入元数据,而Spring框架充分利用了这一...
Spring Boot简化了传统Spring应用的配置,通过`@EnableAutoConfiguration`注解,它能自动识别并配置相应的bean。在多数据源场景下,我们需要自定义数据源配置。 1. **集成Druid连接池** Druid是一个强大的Java...
Spring允许自定义作用域,开发者可以创建自己的作用域以及在自定义作用域中使用Bean。 1.6 自定义Bean的性质 Spring允许自定义Bean的生命周期回调、依赖以及作用域等。 1.6.1 生命周期回调 Spring管理Bean的生命...
**组件扫描**的核心思想是:Spring会在启动时自动搜索指定包及其子包下带有特定注解的类,并将这些类作为Spring Bean注册到Spring IoC容器中。 #### 二、组件扫描的配置与使用 1. **指定扫描包路径** 在Spring的...
2. **命名规范**:自定义Starter的Maven模块名通常以`spring-boot-starter-`开头,如`spring-boot-starter-myapp`。 3. **`spring.factories`**:在Starter的`META-INF/spring.factories`文件中添加`org.spring...