0
点赞
收藏
分享

微信扫一扫

Spring常用注解

得一道人 2022-03-26 阅读 117

Spring常用注解

Spring常用注解

一、配置类组件

1.@Configuration

把一个类作为一个容器,它的某个头上如果注册了@Bean,就会作为这个Spring容器中的Bean。

@Configuration
public class MyConfig{
}

2.@ComponentScan

在配置类上添加@ComponentScan注解,该注解会默认扫描该类所在包下的所有配置类(添加过spring注解的类、@Controller、@Service、@Repository、@Component),相当于之前的context:component-scan.

方式一:
@ComponentScan(value = "com.xinyu.major.chongci.spring01.componscan"
        , includeFilters = {@ComponentScan.Filter(type = FilterType.CUSTOM, value = {MyTypeFilter.class})}
        , useDefaultFilters = false
)
public class MyConfig {

}

public class MyTypeFilter implements TypeFilter {
    /**
     * @Author: xinyu F
     * @Date: 2022/3/19 21:43
     * @Describe: metadataReader 获取当前正在操作的类的信息
     * metadataReaderFactory 获取上下文中所有的信息
     */
    @Override
    public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
        //获取扫描到的注解信息
        AnnotationMetadata annotationMetadata = metadataReader.getAnnotationMetadata();
        //获取扫描到的类的信息
        ClassMetadata classMetadata = metadataReader.getClassMetadata();
        //获取当前类的所有资源
        Resource resource = metadataReader.getResource();

        //获取类名
        String className = classMetadata.getClassName();

        System.out.println("=======================" + className + "=======================");
        if (className.contains("Person")) {
            return true;
        }

        return false;
    }
}

方式二:
@ComponentScan("com.xinyu.major.chongci.spring01.componscan")
public class MyConfig {

}

3.@Scope

用于指定作用域 作用在类和方法上
value值:
prototype:原型、多例
singleton:单例(默认)
request:主要应用于web模块,同一次请求只创建一个实例
session:主要应用于web模块,同一个session只创建一个实例

@Scope("request")
public void getName(){

}


@Scope("request")
public class PersonA {
    
}

4.@Lazy

延时加载,被调用的时候才会加载,只针对单例bean起作用(默认是非延时加载)

@Lazy
public void getName(){

}

5.@Conditional

Spring4开始提供,它的作用是按照一定的条件进行判断,满足条件给容器注册Bean

@Conditional(WinCondition.class)
@Bean
public void loadName() {
    System.out.println("win加载");
}

@Conditional(LinuxCondition.class)
@Bean
public void loadName2() {
    System.out.println("Linux加载");
}

public class WinCondition implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        ConfigurableListableBeanFactory beanFactory = context.getBeanFactory();
        Environment environment = context.getEnvironment();
        String property = environment.getProperty("os.name");
        System.out.println(property);
        if (property.contains("Windows")) {
            return true;
        }

        return false;
    }
}
public class LinuxCondition implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        ConfigurableListableBeanFactory beanFactory = context.getBeanFactory();
        Environment environment = context.getEnvironment();
        String property = environment.getProperty("os.name");
        System.out.println(property);
        if (property.contains("Linux")) {
            return true;
        }

        return false;
    }
}

6.@Import

导入外部资源

@Import(value = {PersonA.class, MyImportSelector.class, MyImportBeanDefinitionRegistrar.class})
public class MyConfig {
    
}

public class MyImportSelector implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
        return new String[]{"com.xinyu.major.chongci.spring01.test.Member",
                "com.xinyu.major.chongci.spring01.test.Shansa"};
    }
}

public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
        BeanDefinition beanDefinition = new RootBeanDefinition(User.class);
        registry.registerBeanDefinition("user", beanDefinition);
    }
}

二、赋值(自动装配)类组件

1.@Component

泛指组件,当组件不好归类时可以用这个注解进行标注

2.@Service

用于标注业务层组件

3.@Controller

用于标注控制层组件

4.@Repository

用于标注数据访问层组件,Dao

5.@Value

普通数据类型赋值

6.@Autowired

默认按类型匹配,如果我们想匹配名称可以结合@Qualifier注解一起使用

7.@PropertySource

读取配置文件赋值

@PropertySource(value= {"application.yml"})
public class PropertySourceMain {
    
}

8.@Qualifier

如存在多个实例配合使用,取别名

@Qualifier("aaa")
@Bean
public void getBean(){
    
}

@Autowired
@Qualifier("bbb")
private String name;

9.@Primary

自动装配出现多个Bean候选者时,被注解为@Primary的Bean为首选者,否则将抛出异常。

10.@Resource

默认按名称装配,当找不到与名称匹配的bean才会按类型装配。

三、织入组件

1.ApplicationContextAware

可以通过这个上下文环境对象得到Spring容器中的Bean

2.BeanDefinitionRegistryPostProcessor

BeanDefinitionRegistryPostProcessor实现了BeanFactoryPostProcessor接口,是Spring框架的BeanDefinitionRegistry的后处理器,用来注册额外的BeanDefinition

四、切面组件

1.@EnableTransactionManagement

添加对事务管理的支持

2.@Transactional

配置声明式事务信息

举报

相关推荐

0 条评论