Spring注解整理

Spring注解整理 <Spring Framework 5.1.5>

  • 1、Spring Aspects注解
    • 1.1 @EnableSpringConfigured
  • 2、Spring Beans注解
    • 2.1 @Autowired
    • 2.2 @Configurable
    • 2.3 @Qualifier
    • 2.4 @Lookup


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

待续 …

你可能感兴趣的:(java,Spring,Boot,Spring,Cloud,Spring,Anotation)