Spring常用的注解你都了解吗?

Spring常用的注解:

@ComponentScan:告诉Spring 哪个packages 的用注解标识的类 会被spring自动扫描并且装入bean容器。

例如,如果你有个类用@Controller注解标识了,那么,如果不加上@ComponentScan,自动扫描该controller,那么该Controller就不会被spring扫描到,更不会装入spring容器中,因此你配置的这个Controller也没有意义。

@Configuration:当需要声明这个类是配置类的时候(如配置拦截器),需要加这个注解,一句话概括就是 @Configuration 中所有带 @Bean 注解的方法都会被动态代理,因此调用该方法返回的都是同一个实例。从定义来看, @Configuration 注解本质上还是 @Component,因此 <context:component-scan/> 或者 @ComponentScan 都能处理@Configuration 注解的类。

@Component(和@Service@Repository)用于自动检测和使用类路径扫描自动配置bean。注释类和bean之间存在隐式的一对一映射(即每个类一个bean)。

@Scope("prototype")
使用注解@Scope("prototype")声明时候
* Spring按照多个实例管理Bean对象, 每次调用
* getBean方法都会创建一个新的Bean实例.

@componentScan(basePackages="...")开启组件扫描功能,spring启动后会自动扫描(。。。)和他的子类包

@Component通用组件

@Controller控制器,在控制器类上使用的注解

@Service服务,在业务层组件上使用这个注解

@Repository仓库,在数据访问层使用的注解

@Autowired使用:1,自动配置:先按照类型匹配,如果匹配到多个相同的组件,在按照BeanID匹配

2.(1)可以标注在属性上,属性可以是是由属性,Spring5不推荐标注在属性上,由于标注在属性上,编写代码

非常方便,使用仍然被大量使用,(2)可以标注在setXxx方法上,推荐使用(3)可以标注在构造方法上,

推荐使用,Spring5强烈推荐使用这个方法。

@Resource:在导入spring中把这个去掉就不能使用该注解了

<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>javax.annotation-api</artifactId>
    <version>1.3.2</version>
</dependency>

1.是Java提供注解,用于注入Bean对象,如果不做区别,其功能和@Autowired基本一致。

2.(1)在注入是时先按照属性名和BeanID一致的规则查找唯一的Bean对象,如果ID匹配成功,就进行注入

(2)如果ID不一样,在按照类型兼容的规则匹配唯一的Bean对象,如果匹配到唯一类型的对象,就注入成功

(3)如果匹配到多个相同的类型的Bean对象,就抛出异常

修改方法为:@Resource(name=“saw")

@PropertySource注解读取配置文件,文件必须放到resource文件夹,参数是配置文件名

如:@PropertySource(”classpath:jdbc.properties“)

package cn.tedu.day02;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

import javax.sql.DataSource;

@Configuration
@ComponentScan(basePackages = "cn.tedu.day02")
//Spring 提供了读取 properties 文件功能
//@PropertySource 注解读取配置文件, 文件必须
//放到 resource 文件夹, 参数是配置文件名
@PropertySource("classpath:jdbc.properties")
public class Config {
    /*
     * @Value("${db.driver}") 从配置文件中读取值
     */
    @Bean
    public DataSource dataSource(
            @Value("${db.driver}")    String driver,
            @Value("${db.url}")       String url,
            @Value("${db.username}")  String username,
            @Value("${db.password}")  String password,
            @Value("${db.maxActive}") Integer maxActive){
        System.out.println(driver);
        /*
         * 利用Spring IOC功能, 管理数据库连接池对象
         * DruidDataSource 实现了接口 DataSource
         * 也就是DruidDataSource是DataSource的子类型
         * 所有数据库连接池对象都实现了 DataSource接口
         * 一般情况下, 配置数据库连接池时候, 类型都是 DataSource接口
         */
        DruidDataSource dataSource= new DruidDataSource();
        // 配置数据库连接参数
        dataSource.setDriverClassName(driver);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        dataSource.setMaxActive(maxActive);
        return dataSource;
    }
}

@PostConstruct:在对象被创建时运行的代码

@PreDestroy:在对象被销毁时运行的代码
@Controller

标识一个该类是Spring MVC controller处理器,用来创建处理http请求的对象.

@RestController

Spring4之后加入的注解,原来在@Controller中返回json需要@ResponseBody来配合,如果直接用@RestController替代@Controller就不需要再配置@ResponseBody,默认返回json格式。

@Service

用于标注业务层组件,说白了就是加入你有一个用注解的方式把这个类注入到spring配置中

@Autowired

用来装配bean,都可以写在字段上,或者方法上。

默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,例如:@Autowired(required=false)

@RequestMapping

类定义处: 提供初步的请求映射信息,相对于 WEB 应用的根目录。

方法处: 提供进一步的细分映射信息,相对于类定义处的 URL

@RequestParam

用于将请求参数区数据映射到功能处理方法的参数上

@Resource

@Resource的作用相当于@Autowired

只不过@Autowired按byType自动注入,

而@Resource默认按 byName自动注入罢了。

@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略

@Repository

用于标注数据访问组件,即DAO组件  一般情况用@Mapper

@Component

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

@Scope

用来配置 spring bean 的作用域,它标识 bean 的作用域。

默认值是单例

1、singleton:单例模式,全局有且仅有一个实例

2、prototype:原型模式,每次获取Bean的时候会有一个新的实例

3、request:request表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效

4、session:session作用域表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效

5、global session:只在portal应用中有用,给每一个 global http session 新建一个Bean实例

@Qualifier

当你创建多个具有相同类型的 bean 时,并且想要用一个属性只为它们其中的一个进行装配,在这种情况下,你可以使用 @Qualifier 注释和 @Autowired 注释通过指定哪一个真正的 bean 将会被装配来消除混乱。

@Configuration注解

该类等价 与XML中配置beans,相当于Ioc容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean,与xml中配置的bean意思一样。

@GetMapping和@PostMapping

 @GetMapping(value = “page”)等价于@RequestMapping(value = “page”, method = RequestMethod.GET)

 @PostMapping(value = “page”)等价于@RequestMapping(value = “page”, method = RequestMethod.POST)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值