- @Component/Service/Controller:管理bean
- @Scope:bean范圍,可以指定單例,多例妒挎,session厢洞,request仇让,也可以指定動(dòng)態(tài)代理模式。
@Component
@Scope(value = DefaultListableBeanFactory.SCOPE_PROTOTYPE, proxyMode = ScopedProxyMode.TARGET_CLASS)
public class ScopeProxyBean {
public void test(){
System.out.println("aaaa");
}
}
- @Conditional:定義類實(shí)現(xiàn)Conditional接口躺翻,bean被spring管理?xiàng)l件
public class MyCondition implements Condition {
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
Environment env = context.getEnvironment();
String system = env.getProperty("os.name");
System.out.println("系統(tǒng)環(huán)境為 ==="+system);
// 系統(tǒng)環(huán)境在Windows才加載該bean到容器中
if(system.contains("Windows")){
return false;
}
return true;
}
}
@Component
@Conditional(MyCondition.class)
public class TestCondition {
}
- @AliasFor
- @PropertySources與PropertySource
@Configuration
@ComponentScan(basePackages = {"com.example.demo.bean"})
//@Conditional(MyCondition.class)
@PropertySource("classpath:application.properties")
public class MainConfig {
@Bean(autowire = Autowire.BY_NAME)
public AwareBean awareBean(){
return new AwareBean();
}
@Component
class TestMainConfig{
}
}
@Component
//@Conditional(MyCondition.class)
public class TestCondition {
@Value("${server.port}")
private String port;
public String getPort() {
return port;
}
public void setPort(String port) {
this.port = port;
}
}
- @Import/ImportSelector/DeferredImportSelector與ImportAware
ImportAware:獲取注解上的值丧叽,作用參考EnableAsync注解
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(ProxyConfig.class)
public @interface ImportTest {
String importTest() default "";
}
@Component
public class ProxyConfig implements ImportAware {
AnnotationAttributes annotationAttributes;
@Override
public void setImportMetadata(AnnotationMetadata importMetadata) {
annotationAttributes = AnnotationAttributes.fromMap(importMetadata.getAnnotationAttributes(ImportTest.class.getName()));
System.out.println("=====" + annotationAttributes.getString("importTest"));
}
}
Import與ImportSelector/DeferredImportSelector,可以導(dǎo)入bean公你,實(shí)現(xiàn)DeferredImportSelector有延遲效果踊淳。
public class ImportSelectorTest implements ImportSelector {
@Override
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
System.out.println("ImportSelectorTest");
return new String[]{"com.example.demo.bean.importAware.test1"};
}
}
public class DeferredImportSelectorTest implements DeferredImportSelector {
@Override
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
System.out.println("DeferredImportSelectorTest");
return new String[]{"com.example.demo.bean.importAware.test2"};
}
}
// 啟動(dòng)類添加@Import({ImportSelectorTest.class, DeferredImportSelectorTest.class})
@DependsOn
@Component
@DependsOn({"dependB"})
public class DependA {
@Autowired
private DependB dependB;
}