@aspect注解_springboot2.2.X手册:36个注解详细解析,一目了然

篇幅较长,建议关注后,收藏,慢慢读。

fdec339b8896870b086adf69c5f296d3.png

@Component

作用及范围:把对象加载到spring容器中,最基础的存在,很多的注解都是继承它的,只有一个属性值,默认值是“”,

例子或源码:

@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Indexedpublic @interface Component {String value() default "";}

@Service

作用及范围:一般用于service层的注解,继承了Component组件,本质上一样,方便做业务范围区分而已。

例子或源码:

@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Componentpublic @interface Service {@AliasFor(annotation = Component.class)String value() default "";}

@Repository

作用及范围:作用于dao层的注解,很多经常用JPA的同学都清楚这个东西,与Service本质上一样,业务领域上区别而已

例子或源码:

@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Componentpublic @interface Repository {@AliasFor(annotation = Component.class)String value() default "";}
d48ffb5513447923da61f631c882a724.png

@Controller

作用及范围:作用在控制器上的注解,与Service一样,业务领域区分

例子或源码:

@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Componentpublic @interface Controller {@AliasFor(annotation = Component.class)String value() default "";}

@Autowired

作用及范围:它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作,其实就是获取容器中的对象

注意事项:

在使用@Autowired时,首先在容器中查询对应类型的bean

如果查询结果刚好为一个,就将该bean装配给@Autowired指定的数据

如果查询的结果不止一个,那么@Autowired会根据名称来查找。

如果查询的结果为空,那么会抛出异常。解决方法时,使用required=false

例子或源码:

@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface Autowired {boolean required() default true;}

@Inject

作用及范围:它是JSR330 (Dependency Injection for Java)中的规范,需要导入javax.inject.Inject;实现注入,根据类型进行自动装配的,如果需要按名称进行装配,则需要配合@Named,可以作用在变量、setter方法、构造函数上。很少用

例子或源码:

@Injectpublic Message(Header header, Content content){    this.headr = header;    this.content = content;}
public class Messager{    @Inject    private Message message;}
64615fd22329e04ab320af3fcb6c09fa.png

@Resource

作用及范围:它是JSR250规范的实现,也是需要导入javax.annotation实现注入,根据名称进行自动装配的,一般会指定一个name属性,可以作用在变量、setter方法上。

例子或源码:

@Target({TYPE, FIELD, METHOD})@Retention(RUNTIME)@Repeatable(Resources.class)public @interface Resource {    String name() default "";      String lookup() default "";    Class> type() default java.lang.Object.class;    enum AuthenticationType {    CONTAINER,    APPLICATION    }    AuthenticationType authenticationType() default AuthenticationType.CONTAINER;    boolean shareable() default true;    String mappedName() default "";    String description() default "";}

@Configuration

作用及范围:从Spring3.0,@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,同样AliasFor最原始的注解Component

例子或源码:

@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Componentpublic @interface Configuration {@AliasFor(annotation = Component.class)String value() default "";boolean proxyBeanMethods() default true;}

@Bean

作用及范围:作用于方法上,产生一个对象,然后这个对象交给Spring管理,在进行初始化的过程中,只会产生并调用一次,如果容器管理一个或者多个bean,这些bean都需要在Configuration注解下进行创建,在一个方法上使用Bean注解就表明这个方法需要交给Spring进行管理。

例子或源码:

@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface Bean {@AliasFor("name")String[] value() default {};@AliasFor("value")String[] name() default {};Autowire autowire() default Autowire.NO;String initMethod() default "";String destroyMethod() default AbstractBeanDefinition.INFER_METHOD;}

@ComponentScan

作用及范围:扫描当前类下面的所有对象,为什么说Component是最基础的东西,就是要给这个注解扫描,非常巧妙的设计,可以扫描多个包。

例子或源码:

@ComponentScan(“com.abc.aaa”)@SpringBootApplicationpublic class SpringbootApplication {
@ComponentScan({"com.abc.bbb","com.abc.aaa"})@SpringBootApplicationpublic class SpringbootApplication {
bdbe862b68d0b5d2566c965eec52bdd5.png

@WishlyConfiguration

作用及范围:这个是ConfigurationComponentScan的组合注解,可以替代这两个注解,目前非常少用。

例子或源码:没用过

@Aspect

作用及范围:切面注解,切面编程经常用到的,可以做日志

例子或源码:

@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)public @interface Aspect {    public String value() default "";}

@After

作用及范围:配置Aspect做切面使用,在方法执行之后执行(方法上)

例子或源码:

@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)public @interface After {    String value();        String argNames() default "";}

@Before

作用及范围:配置Aspect做切面使用,在方法执行之前执行(方法上)

例子或源码:

@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)public @interface Before {    String value();        String argNames() default "";}

@Around

作用及范围:配置Aspect做切面使用,在方法执行之前与之后执行(方法上)

例子或源码:

@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)public @interface Around {    String value();        String argNames() default "";}

@PointCut

作用及范围:配置Aspect做切面使用,声明切点

例子或源码:

@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)public @interface Pointcut {      String value() default "";        String argNames() default "";}
5396226894f3d116a9f9396e6a9971ae.png

@Scope

作用及范围:Singleton (单例,一个Spring容器中只有一个bean实例,默认模式),

Protetype (每次调用新建一个bean),

Request (web项目中,给每个http request新建一个bean),

Session (web项目中,给每个http session新建一个bean),

GlobalSession(给每一个 global http session新建一个Bean实例)

例子或源码:

@Target({ElementType.TYPE, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface Scope {@AliasFor("scopeName")String value() default "";@AliasFor("value")String scopeName() default "";ScopedProxyMode proxyMode() default ScopedProxyMode.DEFAULT;}

@Value

作用及范围:将外部的值动态注入到Bean中,使用的情况有:

  1. 注入普通字符串
  2. 注入操作系统属性
  3. 注入表达式结果
  4. 注入其他Bean属性:注入beanInject对象的属性another
  5. 注入文件资源
  6. 注入URL资源

例子或源码:

   @Value("normal")    private String normal; // 注入普通字符串    @Value("#{systemProperties['os.name']}")    private String systemPropertiesName; // 注入操作系统属性    @Value("#{ T(java.lang.Math).random() * 100.0 }")    private double randomNumber; //注入表达式结果    @Value("#{beanInject.another}")    private String fromAnotherBean; // 注入其他Bean属性:注入beanInject对象的属性another,类具体定义见下面    @Value("classpath:com/hry/spring/configinject/config.txt")    private Resource resourceFile; // 注入文件资源    @Value("http://www.baidu.com")    private Resource testUrl; // 注入URL资源
c1138cafb85ea7fd6b6f98e3d51287a6.png

@PropertySource

作用及范围:加载指定的配置文件

例子或源码:

@PropertySource(value = {"classpath:test.properties"})@Component@ConfigurationProperties(prefix = "test")public class Test {    private Integer id;    private String lastName;}

@Profile

作用及范围:根据不同环境加载bean对象

例子或源码:

@PropertySource("classpath:/user.properties")@Configurationpublic class MainConfigOfProfile implements EmbeddedValueResolverAware{@Profile("test")@Bean("testUser")public User testUser()  {User a =new User();    return a;}@Profile("dev")@Bean("devUser")public User devUser()  {User a =new User();    return a;} }

@Conditional

作用及范围:是Spring4新提供的注解,它的作用是按照一定的条件进行判断,满足条件给容器注册bean

例子或源码:

@Configurationpublic class BeanConfig {     //只有一个类时,大括号可以省略    //如果WindowsCondition的实现方法返回true,则注入这个bean        @Conditional({WindowsCondition.class})    @Bean(name = "bill")    public Window window(){        return new Window();    }     //如果LinuxCondition的实现方法返回true,则注入这个bean    @Conditional({LinuxCondition.class})    @Bean("linux")    public Linex linux(){        return new Linex();    }}
26e0f05242a7dbdd7ddd979bdda807bc.png

@EnableAsync

作用及范围:启动异步,与Async配合使用

例子或源码:

@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Import(AsyncConfigurationSelector.class)public @interface EnableAsync {Class extends Annotation> annotation() default Annotation.class;boolean proxyTargetClass() default false;AdviceMode mode() default AdviceMode.PROXY;int order() default Ordered.LOWEST_PRECEDENCE;}

@Async

作用及范围:异步注解,需配合EnableAsync使用,使用后,方法变成异步方法

例子或源码:

@Componentpublic class TreadTasks {    @Async    public void startMyTreadTask() {        System.out.println("this is my async task");    }}

@EnableScheduling

作用及范围:定时任务注解扫描器,会扫描包体下的所有定时任务

例子或源码:

@SpringBootApplication@EnableScheduling //开启定时任务public class MainApplication {    public static void main(String[] args) {        SpringApplication.run(MainApplication.class, args);    }}
f8bbf8089ff902f5fe1d088bba234933.png

@Scheduled

作用及范围:定时任务控制器

例子或源码:

3736499a533b6c43fedd03fe6273b2e8.png
@Scheduled(cron = "0 0 2 * * ?") 

@EnableJpaRepositories

作用及范围:开启对SpringData JPA Repository的支持

例子或源码:

@EnableJpaRepositories({"com.cshtong.sample.repository", "com.cshtong.tower.repository"})

@EnableTransactionManagement

作用及范围:开启注解式事务的支持

例子或源码:最常见的东西,不做讲解了

@EnableTransactionManagement // 启注解事务管理@SpringBootApplicationpublic class ProfiledemoApplication {     public static void main(String[] args) {        SpringApplication.run(ProfiledemoApplication.class, args);    }
b4ec5676dc09fd1d98eb11ba913c51e5.png

@EnableCaching

作用及范围:开启注解式的缓存支持

例子或源码:

@Configuration@EnableCachingpublic class CachingConfig {    @Bean    public CacheManager cacheManager() {        SimpleCacheManager cacheManager = new SimpleCacheManager();        cacheManager.setCaches(Arrays.asList(new ConcurrentMapCache("sampleCache")));        return cacheManager;    }}

@Cacheable

作用及范围:把信息放到存储中去

例子或源码:

@Cacheable(value = { "sampleCache","sampleCache2" },key="targetClass.getName()+'.'+methodName+'.'+#id")    public String getUser(int id) {        if (id == 1) {            return "1";        } else {            return "2";        }    }

@RequestMapping

作用及范围:注解来将请求URL映射到整个类上,或某个特定的方法上

例子或源码:

@Target({ElementType.TYPE, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documented@Mappingpublic @interface RequestMapping {String name() default "";@AliasFor("path")String[] value() default {};@AliasFor("value")String[] path() default {};RequestMethod[] method() default {};String[] params() default {};String[] headers() default {};String[] consumes() default {};String[] produces() default {};}
008e793f81241bb08bb877ff8e67bfd9.png

@ResponseBody

作用及范围:将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据

例子或源码:

@Target({ElementType.TYPE, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface ResponseBody {}

@RequestBody

作用及范围:用来接收前端传递给后端的json字符串中的数据(请求体中的数据的)

例子或源码:

@Target(ElementType.PARAMETER)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface RequestBody {/** * 默认是必须的 */boolean required() default true;}

@PathVariable

作用及范围:接收请求路径中占位符的值

例子或源码:

@RequestMapping(value=”user/{id}/{name}”)请求路径:http://localhost:8080/user//1/james

@RestController

作用及范围:等同于@Controller + @ResponseBody

例子或源码:

@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Controller@ResponseBodypublic @interface RestController {@AliasFor(annotation = Controller.class)String value() default "";}
9df1a22dadd660548be8febad1be492c.png

@ControllerAdvice

作用及范围:全局异常处理;全局数据绑定;全局数据预处理

例子或源码:

@ControllerAdvicepublic class MyGlobalExceptionHandler {    @ExceptionHandler(Exception.class)    public ModelAndView customException(Exception e) {        ModelAndView mv = new ModelAndView();        mv.addObject("message", e.getMessage());        mv.setViewName("error");        return mv;    }}@ControllerAdvicepublic class MyGlobalExceptionHandler {    @ModelAttribute(name = "md")    public Map mydata() {        HashMap map = new HashMap<>();        map.put("gender", "女");        return map;    }}

@ExceptionHandler

作用及范围:用于处理controller层面的异常

例子或源码:

 @ExceptionHandler({RuntimeException.class})    public ModelAndView fix(Exception ex){        System.out.println("aaaa");        return new ModelAndView("error",new ModelMap("ex",ex.getMessage()));    }

--END--

作者:@溪云阁

如需要源码,转发,关注后私信我。

部分图片或代码来源网络,如侵权请联系删除,谢谢!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值