Spring常用注解

文章目录

  • 一、Bean交给Spring管理
    • 1、@Component
    • 2、@Bean
    • 3、@Controller
    • 4、@Service
    • 5、@Repository
    • 6、@Configuration
    • 7、@ComponentScan
  • 二、作用域
    • 1、@Lazy(false)
    • @Scope
  • 三、依赖注入
    • 1、@Autowired
    • 2、@Resource
    • 3、@Qualifier
  • 四、读取配置文件值
    • 1、@Value


一、Bean交给Spring管理

1、@Component

  • 通用注解,等效于基于XML创建Bean的标签
  • 在类上添加,将这个类识别为Bean,放入IOC容器中,交给Spring管理
  • 属性
    //定义bean-id,无值默认为类首字母小写
    String value();
    

2、@Bean

  • 在方法上添加,方法会返回一个对象,放入IOC容器中,交给Spring管理
  • 默认方法名=注入的对象名,也可以指定名称@Bean(name="jedisPool")
  • 和@Component异同?
    • 两个都是注册bean到Spring容器中
    • 当想要将第三方库中的组件装配到你的应用中,在这种情况下,是没有办法在它的类上添加@Component注解的,此时可以使用@Bean,如:RedisTemplate、JedisPool

3、@Controller

  • 添加在控制器类上
  • 里面包含@Component

4、@Service

  • 添加在业务层实现类上
  • 里面包含@Component

5、@Repository

  • 添加在持久化层实现类上
  • 里面包含@Component

6、@Configuration

  • 配置类注解,会把这个类作为配置文件读取
  • 里面包含@Component

7、@ComponentScan

  • 在类上添加,组件扫描注解,该注解就是扫描类上含有@Comment注解的类,将它放入Spring容器
  • 扫描包的范围不仅仅扫描本项目,也会扫描项目中的依赖,如value=“com.kimi”,会扫描本项目中的com.kimi包及其子包、所有依赖中的com.kimi包及其子包
  • 等效于
  • 属性
    //设置扫描包路径,不写会扫描该类所在的包及其子包,=basePackages
    String[] value() default {};
    
    //设置扫描包路径,=value
    String[] basePackages() default {};
    

二、作用域

1、@Lazy(false)

  • 类上添加,设置饿汉、懒汉
  • 属性
    //true - 懒汉式,默认
    boolean value() default true;
    

@Scope

  • 在类上添加,设置单例、非单例
  • @Scope("prototype")@Scope("singleton") 单例,默认

三、依赖注入

1、@Autowired

  • byType装配,匹配到的类型 >1 会异常
  • 属性
    //匹配类型是否必须存在
    boolean required() default true;
    

2、@Resource

  • 属于java(J2EE),并不属于Spring
  • 若指定name属性,则按照名称(by-name)装配,未找到则抛异常
  • 若指定type属性,则按照类型(by-type)装配,未找到、找到多个则抛异常
  • 未指定name、type属性,按照名称(by-name)装配;如果未找到,则按照类型(by-type)装配

3、@Qualifier

  • 一般配合@Autowired使用
  • @Autowired+@Qualifier = @Resource的by-name
  • 比如一个接口有两个实现类时,使用@Autowired注入找到2个 会异常,使用@Qualifier指明要注入的实现类的名称
@Resource(name="user")
private User user;

@Autowired
@Qualifier("user")
private User user;

四、读取配置文件值

1、@Value

  • 将配置文件中的值注入属性,作为属性的初始值
  • 不支持松散绑定
my:
    host: http://localhost
    port: 8080
@Value("${my.url}")
private String url;

@Value("${my.port}")
private Integer port;

你可能感兴趣的:(Spring,spring,java,后端)