Spring注解整理 <Spring Framework 5.1.5>
1、Spring Aspects注解
1.1 @EnableSpringConfigured
- 与 @Configurable等配合使用;
- 告诉spring容器被标记的bean不是被其管理的类。
- 具体参考
@Configuration
@Import(........
@EnableSpringConfigured
public abstract class SpringWebApplicationConfig extends WebMvcConfigurerAdapter {
@Autowired
Environment environment;
@Value(.......
@Bean
public ResourceBundleThemeSource themeSource()
{
ResourceBundleThemeSource resourceBundleThemeSource = new ResourceBundleThemeSource();
resourceBundleThemeSource.setBasenamePrefix("theme-");
return resourceBundleThemeSource;
}
}
2、Spring Beans注解
2.1 @Autowired
- 用于Spring Bean的自动装配,在spring容器启动时,会自动获取对应的Bean;
- 默认是按照类型进行装配,若想按照名称进行装配可以配合@Qualifier使用,如下例子:
@Autowired()
@Qualifier("baseDao")
private BaseDao baseDao;
- 如果添加了该注解,默认状态下,Bean不能为null,若存在Bean为null的情况,可以配置其参数"required",代码如下:
@Autowired(required = false)
private BaseDao baseDao;
2.2 @Configurable
- 用于标记该类型不是被spring容器所管理(该Bean不是在spring容器启动时就被创建);
- 被标记后,在其内部可以注入其他的被spring容器管理的Bean;
- 当我们new被标记类型的时候,注入在该类型中的Bean也会被包含在其中;
- 具体参考;
- 参数value (String类型):用作配置模板的bean定义的名称,默认值为"",空字符串;
- 参数autowire(Autowire枚举):依赖项是否要自动注入,默认 Autowire.NO(不自动装配),其他可选项Autowire.BY_NAME(通过名称注入)和Autowire.BY_TYPE(通过类型注入);
- 参数dependencyCheck(boolean类型):是否对配置的对象执行依赖项检查,默认为false:
- 参数preConstruction(boolean类型):依赖项是否在对象构造之前被注入,默认为false。
@Configurable(value = "service",autowire = Autowire.BY_NAME,
dependencyCheck = true,preConstruction = true)
@EnableSpringConfigured
public class DocService {
@Autowired
private MaterialDocRepository docRepository;
}
2.3 @Qualifier
- 在自动装配时,可以将此注释用于字段或参数,作为候选bean的限定符;
- 属性value(String类型):限定的Bean名称,默认为""。
@Service(dService)
public class DocService extends BaseService {
@Autowired
@Qualifier(value = "doc")//限定的Bean名称
private MaterialDocRepository docRepository;
}
@Repository(value = "doc")//默认的名称为类名首字母小写
public interface MaterialDocRepository extends JpaRepository<MaterialDoc,Long> {
}
@Autowired(required = false)//可能不存在该类型实例
public void setUserDao(@Qualifier("dService") DocService docService) {
this.docService = docService;
}
- 用于注释其他定制注释,被注释的定制注释又可以用作限定符;
@Target({ElementType.TYPE,ElementType.FIELD,ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface Oracle {
}
public class TestBean {
private DataSource mysqlDataSource;
private DataSource oracleDataSource;
@Autowired
public void initDataSource(@Oracle DataSource oracleDataSource){
this.oracleDataSource = oracleDataSource;
}
...
}
2.4 @Lookup
待续 …