发帖  主题  评论  推荐  标签 用户 查搜   用户 密码 自动 注册  
 
面向对象 设计模式 领域驱动设计 企业架构 框架 开发教程 微服务 CQRS 扩展性 并发编程 事件溯源 分布式 SOA
Spring专题

Spring Java配置要点

  Spring的核心配置是 @Configuration类,这是我们放置所有Spring上下文属性的地方。通常的元注解如下:
@Component 普通组件类型
@Repository 持久层
@Service 服务层
@Component 表现层

组件的扫描

在对我们的类进行元注解以后,我们现在需要将它们加入到Spring上下文,这是使用 @Configuration class by @ComponentScan

@Configuration
@ComponentScan("my.package.containing.beans")
public class SpringConfig {
}

使用字符串文字代表的包名 - 很容易犯错误是很难找到。这是必须注意的,好在可以使用basePackageClasses 参数来替代,如下:

@Configuration
@ComponentScan(basePackageClasses = BeansPackageMarker.class,
includeFilters = @ComponentScan.Filter(ConventionSucks.class))
public class SpringConfig {
}

这里@ComponentScan 拓展了使用我们自己定制的元注解@ConventionSucks

@ComponentScan.Filter是非常泛型的,允许使用各种类型策略参数:

ANNOTATION 以给定的元注解标注
ASSIGNABLE_TYPE 分配给给定的类型
ASPECTJ AspectJ 类型
REGEX 使用 Pattern 
CUSTOM 实现 TypeFilter定制的过滤器

 

Wiring beans

现在我们已经配置Spring如何能够识别我们的bean, 下面是如何实现依赖注入,分两种情况:

1. 由我们创建的bean

2.外部的bean

第一种情况使用@Autowired , 能够在构造器 字段 方法等使用。

@Component
public class UserBeanB {
private final UserBeanA userBeanA;
@Autowired
public UserBeanB(UserBeanA userBeanA) {
this.userBeanA = userBeanA;
}
}

当然我们也可以使用@Inject 替代@Autowired

对于外部bean,我们无法控制的类,比如在外部的框架或库包内:

@Configuration
public class SpringConfig {
@Bean
public ExternalObjectA externalObjectA() {
return new ExternalObjectA();
}
@Bean
public ExternalObjectB externalObjectB1() {
return new ExternalObjectB(externalObjectA());
}
@Bean
public ExternalObjectB externalObjectB2() {
return new ExternalObjectB(externalObjectA());
}
}

Spring各种源码项目下载

解道移动版 | 关注解道 | 联系解道 | 关于解道 | 广告联系 | 网站地图 | 设为首页

沪ICP证12033263 如有意见请与我们联系 Powered by JdonFramework
返回顶部