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各种源码项目下载