美文网首页
Spring 常用注解

Spring 常用注解

作者: 雪飘千里 | 来源:发表于2022-09-16 20:37 被阅读0次

    1、SpringBoot 注解

    @SpringBootApplication

    这个注解是Spring Boot最核心的注解,用在Spring Boot类的主类上,标识这是一个Spring Boot应用,用来开启Spring Boot的各项能力。
    实际上这个注解是@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan三个注解的组合,由于这些注解一般都是一起使用,所以Spring Boot提供了一个统一的注解@SpringBootApplication。

    @SpringBootApplication
    public class Application{
        public static void main(String [] args){
            SpringApplication.run(Application.class,args);
        }
    }
    

    @SpringBootConfiguration : 继承@Configuration注解,主要用于加载配置文件

    @SpringBootConfiguration继承自@Configuration,二者功能也一致,标注当前类是配置类, 并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到spring容器中,并且实例名就是方法名。

    @EnableAutoConfiguration 开启自动配置功能

    EnableAutoConfiguration可以帮助SpringBoot应用将所有符合条件的@Configuration配置都加载到当前SpringBoot创建并使用的IoC容器。借助于Spring框架原有的一个工具类:SpringFactoriesLoader的支持,@EnableAutoConfiguration可以智能的自动配置功效才得以大功告成

    @ComponentScan : 组件扫描和自动装配

    @ComponentScan的功能其实就是自动扫描并加载符合条件的组件或bean定义,最终将这些bean定义加载到容器中。我们可以通过basePackages等属性指定@ComponentScan自动扫描的范围,如果不指定,则默认Spring框架实现从声明@ComponentScan所在类的package进行扫描,默认情况下是不指定的,所以SpringBoot的启动类最好放在root package下。

    2、Spring 声明bean的注解

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

    @Controller、@Service、@Repository是@Component的一种特殊形式,都可以称为@Component,在Spring MVC中使用@Controller来定义controller,@Service用于在服务层中保存业务逻辑的注释类。
    当组件不好归类的时候,我们可以使用这个注解进行标注,比如一些工具类,我们使用@Component比较好

    @Controller:控制层、@Service:业务层、@Repository:数据访问层

    @Service是@Component注解的一个特例,作用在类上
    @Service注解作用域默认为单例,使用注解配置和类路径扫描时,被@Service注解标注的类会被Spring扫描并注册为Bean
    @Service用于标注服务层组件,表示定义一个bean
    @Service使用时没有传参数,Bean名称默认为当前类的类名,首字母小写
    @Service(“serviceBeanId”)或@Service(value=”serviceBeanId”)使用时传参数,使用value作为Bean名字

    @Bean : 产生一个bean的方法

    作用在方法上,明确地指示了一种方法,产生一个bean的方法,并且交给Spring容器管理。支持别名@Bean(“xx-name”)

    @DependsOn:配置Spring IoC容器在初始化一个Bean之前,先初始化其他的Bean对象

    @Scope:用来定义@Component标注的类的作用范围以及@Bean所标记的类的作用范围

    @Scope所限定的作用范围有:singleton、prototype、request、session、globalSession或者其他的自定义范围。
    当一个Spring Bean被声明为prototype(原型模式)时,在每次需要使用到该类的时候,Spring IoC容器都会初始化一个新的改类的实例;
    当@Scope的作用范围设置成Singleton时,被此注解所标注的类只会被Spring IoC容器初始化一次。在默认情况下,Spring IoC容器所初始化的类实例都为singleton。

    • Singleton:单例,一个Spring容器中只有一个bean实例,默认模式

    • Protetype:每次调用新建一个bean

    • Request:web项目中,给每个http request新建一个bean

    • Session:web项目中,给每个http session新建一个bean

    • GlobalSession:给每一个 global http session新建一个Bean实例

    @PostConstruct用于指定初始化方法(用在方法上)

    @PreDestory用于指定销毁方法(用在方法上)

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

    @order,定义了组件的加载顺序

    @order使用注解方式使bean的加载顺序得到控制,
    @order标记定义了组件的加载顺序,值越小拥有越高的优先级,可为负数。值越小,越先被加载。

    3、Spring bean自动装配的注解

    @Autowired:由Spring提供

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

        @Autowired
        @Qualifier("cache-messageListenerAdapter")
        private MessageListenerAdapter messageListenerAdapter;
    

    @Qualifier:指定注入Bean的名称

    @Inject:由JSR-330提供

    @Resource:由JSR-250提供

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

    @Autowired和@Resource两个注解的区别:

    (1)、@Autowired默认按照byType方式进行bean匹配,@Resource默认按照byName方式进行bean匹配
    (2)、@Autowired是Spring的注解,@Resource是J2EE的注解,这个看一下导入注解的时候这两个注解的包名就一清二楚了
    Spring属于第三方的,J2EE是Java自己的东西,因此,建议使用@Resource注解,以减少代码和Spring之间的耦合。

    4、 导入配置文件

    @PropertySource注解

    //引入单个properties文件:
    @PropertySource(value = {“classpath : xxxx/xxx.properties”})
    
    //引入多个properties文件:
    @PropertySource(value = {“classpath : xxxx/xxx.properties”,“classpath : xxxx.properties”})
    
    取值:使用@Value注解取配置文件中的值
    @Value(“${properties中的键}”)
    private String xxx;
    

    @ImportResource:导入xml配置文件

    //引入单个xml配置文件:
    @ImportSource(“classpath : xxx/xxxx.xml”)
    
    //引入多个xml配置文件:
    @ImportResource(locations = {"classpath:spring-restful-service.xml", "classpath:spring-redis-config.xml"})
    

    @Import:导入额外的配置信息

    用来导入配置类或一些需要前置加载的类,其可以通过快速导入的方式实现把实例加入Spring的IOC容器中。
    可以导入带有@Configuration注解的配置类或实现了ImportSelector/ImportBeanDefinitionRegistrar的类。

    @Component
    @Import(ImConfig.class)
    public class ImUtil {
        @Resource
        private ImConfig imConfig;
    }
    
    @Data
    @ConfigurationProperties(prefix = "im")
    public class ImConfig {
        private String clientId;
        private String clientSecret;
        private String domain;
    }
    
    

    5、切面(AOP)相关注解

    Spring支持AspectJ的注解式切面编程

    @Aspect:声明一个切面

    @After:在方法执行之后执行(方法上)

    @Before:在方法执行之前执行(方法上)

    @Around:在方法执行之前与之后执行(方法上)

    @PointCut:声明切点

    @EnableAspectJAutoProxy:开启Spring对AspectJ代理的支持

    6、异步 和 定时任务

    @EnableAsync:配置类中通过此注解开启对异步任务的支持

    @Async:在实际执行的bean方法使用该注解来声明其是一个异步任务(方法上或类上所有的方法都将异步,需要@EnableAsync开启异步任务)

    @EnableScheduling:在配置类上使用,开启定时计划任务的支持

    @Scheduled:来申明这是一个任务,包括cron,fixDelay,fixRate等类型(方法上,需先开启计划任务的支持)

    7、事务注解 @Transactional

    在Spring中,事务有两种实现方式,分别是编程式事务管理和声明式事务管理两种方式

    • 编程式事务管理: 编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。

    • 声明式事务管理: 建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务,通过@Transactional就可以进行事务操作,更快捷而且简单。推荐使用

    8、全局异常处理

    @ControllerAdvice:定义全局异常处理类

    @ExceptionHandler:声明异常处理方法

    @ControllerAdvice
    public class GlobalExceptionHandler {
    
        @ExceptionHandler(Exception.class)
        @ResponseBody
        String handleException(){
            return "Exception Deal!";
        }
    }
    

    9、Enable***注解说明

    @EnableAspectAutoProxy:开启对AspectJ自动代理的支持

    @EnableAsync:开启异步方法的支持

    @EnableScheduling:开启计划任务的支持

    @EnableWebMvc:开启web MVC的配置支持

    @EnableConfigurationProperties:开启对@ConfigurationProperties注解配置Bean的支持

    @EnableJpaRepositories:开启对SpringData JPA Repository的支持

    @EnableTransactionManagement:开启注解式事务的支持

    @EnableCaching:开启注解式的缓存支持

    10、SpringMVC常用注解

    • 1、@EnableWebMvc:在配置类中开启Web MVC的配置支持

    • 2、@Controller 控制层

    • 3、@RequestMapping:用于映射web请求,包括访问路径和参数

    • 4、@ResponseBody:支持将返回值放到response内,而不是一个页面,通常用户返回json数据

    • 5、@RequestBody:允许request的参数在request体中,而不是在直接连接的地址后面

    • 6、@PathVariable:用于接收路径参数,比如@RequestMapping(“/hello/{name}”)声明的路径,将注解放在参数前,即可获取该值,通常作为Restful的接口实现方法。

    • 7、@RestController:该注解为一个组合注解,相当于@Controller和@ResponseBody的组合,注解在类上,意味着,该Controller的所有方法都默认加上了@ResponseBody。

    • 8、@InitBinder:用来设置WebDataBinder,WebDataBinder用来自动绑定前台请求参数到Model中

    相关文章

      网友评论

          本文标题:Spring 常用注解

          本文链接:https://www.haomeiwen.com/subject/afeznrtx.html