Spring 常用注解

2022-09-16  本文已影响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。

@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中,事务有两种实现方式,分别是编程式事务管理和声明式事务管理两种方式

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常用注解

上一篇下一篇

猜你喜欢

热点阅读