精华内容
下载资源
问答
  • spring3零配置注解实现Bean定义(包括JSR-250、JSR-330)
  • AutowiredAnnotationBeanPostProcessor - JSR-330 ‘javax.inject.Inject’ annotat spring boot 最近启动项目遇到的问题:控制台一直卡在 AutowiredAnnotationBeanPostProcessor - JSR-330 ‘javax.inject.Inject’...

    AutowiredAnnotationBeanPostProcessor - JSR-330 ‘javax.inject.Inject’ annotat

    spring boot 最近启动项目遇到的问题:控制台一直卡在
    AutowiredAnnotationBeanPostProcessor - JSR-330 ‘javax.inject.Inject’ annotat

    原因 取消项目中打的断点。重启

    展开全文
  • 从Spring 3.0开始,Spring开始支持JSR-330标准的注解(依赖注入)。这些注解和Spring注解扫描的方式是一直的,开发者只需要在classpath中配置相关的jar包即可。 如果开发者使用Maven来管理项目的话,javax....

    从Spring 3.0开始,Spring开始支持JSR-330标准的注解(依赖注入)。这些注解和Spring注解扫描的方式是一直的,开发者只需要在classpath中配置相关的jar包即可。

    如果开发者使用Maven来管理项目的话,javax.injectartifact在Maven仓库中是可用的(http://repo1.maven.org/maven2/javax/inject/javax.inject/1/)。开发者只需要在pom中引用这个依赖即可。

    <dependency>
        <groupId>javax.inject</groupId>
        <artifactId>javax.inject</artifactId>
        <version>1</version>
    </dependency>

     

    通过@Inject和@Named进行依赖注入

    JSR-330中,@javax.inject.Inject和Spring中的@Autowired的职责相同

    import javax.inject.Inject;
    
    public class SimpleMovieLister {
    
        private MovieFinder movieFinder;
    
        @Inject
        public void setMovieFinder(MovieFinder movieFinder) {
            this.movieFinder = movieFinder;
        }
    
        public void listMovies() {
            this.movieFinder.findMovies(...);
            ...
        }
    }

    和@Autowired一致的是,开发者可以使用@Inject在实例变量,方法以及构造参数级别来使用依赖注入。而且,开发者可以将注入声明为Provider,通过Provider.get()来请求那些短作用域或者延迟初始化的Bean。比如如下的例子。

    import javax.inject.Inject;
    import javax.inject.Provider;
    
    public class SimpleMovieLister {
    
        private Provider<MovieFinder> movieFinder;
    
        public void listMovies() {
            this.movieFinder.get().findMovies(...);
            ...
        }
    }

    如果开发者希望来通过名字来限定注入的Bean,可以使用@Named注解

    import javax.inject.Inject;
    import javax.inject.Named;
    
    public class SimpleMovieLister {
    
        private MovieFinder movieFinder;
    
        @Inject
        public void setMovieFinder(@Named("main") MovieFinder movieFinder) {
            this.movieFinder = movieFinder;
        }
    
        // ...
    }

     

    @Named等同于@Component注解

    JSR-330中,@javax.inject.Named和Spring中的@Component的职责类似。

    import javax.inject.Inject;
    import javax.inject.Named;
    
    @Named("movieListener")
    public class SimpleMovieLister {
    
        private MovieFinder movieFinder;
    
        @Inject
        public void setMovieFinder(MovieFinder movieFinder) {
            this.movieFinder = movieFinder;
        }
    
        // ...
    }

    @Component的使用中经常是不需要指定名字的,@Named注解也是如此。

    import javax.inject.Inject;
    import javax.inject.Named;
    
    @Named
    public class SimpleMovieLister {
    
        private MovieFinder movieFinder;
    
        @Inject
        public void setMovieFinder(MovieFinder movieFinder) {
            this.movieFinder = movieFinder;
        }
    
        // ...
    }

    在使用@Named注解的时候,也同样可以使用组件扫描。

    @Configuration
    @ComponentScan(basePackages = "org.example")
    public class AppConfig  {
        ...
    }

    和Spring的@Component组件不同的是,JSR-330的Named注解不可以组合来使用,如果希望自定义组件注解的话,还请使用Spring的组件注解。

     

    JSR-330标准注解的限制

    当使用JSR-330标准的注解时,了解其和Spring注解的不同点也是十分必要的,参考如下表。

    Springjavax.inject.*javax.inject 限制
    @Autowired@Inject@Inject注解没有required属性,但是可以通过Java 8的Optional取代
    @Component@NamedJSR_330标准并没有提供复合的模型,只有一种方式来识别组件
    @Scope(“singleton”)@SingletonJSR-330默认的作用域类似Spring的prototype,然而,为何和Spring的默认保持一致,JSR-330标准中的Bean在Spring中默认也是单例的。如果要使用非单例的作用域,开发者应该使用Spring的@Scope注解。java.inject也提供一个@Scope注解,然而,这个注解仅仅可以用来创建自定义的作用域时才能使用。
    @Qualifier@Qualifier/@Namedjavax.inject.Qualifier仅仅是一个元注解,用来构建自定义限定符的。而String的限定符(比如Spring中的@Qualifier)可以通过javax.inject.Named来实现
    @Value-不等价
    @Required-不等价
    @Lazy-不等价
    ObjectFactoryProviderjavax.inject.Provider是SpringObjectFactory的另一个选择,通过get()方法来代理,Provider可以和Spring的@Autowired组合使用
    展开全文
  • JSR-330标准注释的限制

    2021-03-20 13:07:48
    JSR-330标准注释的限制 使用标准注释时,应该知道一些重要的特性是不可用的,如下表所示: Spring javax.inject.* javax.inject restrictions / comments @Autowired @Inject @Inject没有’required’属性。可以与...

    JSR-330标准注释的限制
    使用标准注释时,应该知道一些重要的特性是不可用的,如下表所示:
    Spring javax.inject.* javax.inject restrictions / comments
    @Autowired @Inject @Inject没有’required’属性。可以与Java 8的可选选项一起使用。
    @Component @Named / @ManagedBean JSR-330没有提供可组合的模型,只提供了一种识别命名组件的方法。
    @Scope(“singleton”) @Singleton JSR-330的默认作用域就像Spring的原型。但是,为了使其与Spring的一般默认值保持一致,在Spring容器中声明的JSR-330 bean默认为单例。为了使用单例之外的作用域,您应该使用Spring的@Scope注释。javax。inject还提供了@Scope注释。不过,这一方法仅用于创建您自己的注释。
    @Qualifier @Qualifier / @Named javax.inject。Qualifier只是用于构建自定义限定符的元注解。具体的字符串限定符(比如Spring的带值的@Qualifier)可以通过javax.inject.Named关联。
    @Value - no equivalent
    @Required - no equivalent
    @Lazy - no equivalent
    ObjectFactory Provider javax.inject。Provider是Spring的ObjectFactory的直接替代方法,只是使用了更短的get()方法名。它还可以与Spring的@Autowired或无注释的构造函数和setter方法结合使用。

    展开全文
  • Java 依赖注入标准 JSR-330 简介

    万次阅读 2016-03-01 16:33:43
    Java 依赖注入标准概念 JSR-330 简介

    Java 依赖注入标准 JSR-330 简介

    概念

    JSR-330Java 的依赖注入标准。定义了如下的术语描述依赖注入:

    • A 类型依赖 B类型(或者说 B 被 A 依赖),则 A类型 称为”依赖(物) dependency
    • 运行时查找依赖的过程,称为”解析 resolving“依赖
    • 如果找不到依赖的实例,称该依赖是”不能满足的 unsatisfied
    • 在”依赖注入 dependency injection”机制中,提供依赖的工具称为”依赖注入器 dependency injector”

    在标准中, 依赖是类型而不是实例/对象; 在程序中(运行时), 需要的是依赖的实例.

    标准对依赖注入的使用进行了定义, 但是对实现和配置未定义。Java EEjavax.inject对应该标准。其中也仅定义了依赖注入的使用(即通过注解),同样也未定义依赖注入的配置方式和实现方式。实际上,依赖配置方式和实现方式由”依赖注入器“定义和实现。注入器的配置方式常见有XML注解DSLJava 代码; 实现方式有反射和代码生成。依赖注入器在构建时,会验证所有依赖是否满足(通过识别注解来得知其依赖),在运行时为类注入其需要的依赖的实例。(因为依赖注入器对依赖的识别过程就是对注解的处理,所以依赖注入器也是注解处理器)。

    javax.injects

    该包提供了如下5个注解(Inject、Qualifier、Named、Scope、Singleton)和1个接口(Provider)。

    @Inject

    标识某个类中,需要由注入器注入的类成员(被标识的成员称为”可注入的”)。

    使用规则

    1. 可用于注解构造器、字段、方法这些类成员(对成员是静态与否、最好是public的)
    2. 每个类只能有一个构造器可以被标记可注入;空构造器可以不用@Inject注解。
    3. 可注入的字段不能为 final 的
    4. 可注入的方法不能为 abstract 的

    注入器的依赖注入顺序

    1. 构造器 > 字段 > 方法
    2. 父类 > 子类
    3. 一个类的两个可注入字段或其他成员无注入顺序

    另外的四个注解对依赖注入进一步进行配置。

    @Qualifier 和 @Named

    其中,@Qualifiery用于创建限定器。限定器是一个自定义的注解,可注解字段或方法的参数,用于限制可注入的依赖的类型。限定器注解必须被 @Qualifier 和 @Retention(RetentionPolicy.RUNTIME) 注解。

    // 定义限定器
    @Qualifier
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Big {
    
    }
    
    // 使用限定器
    @Inject
    public void foo(@ Big Bar bar) {
        // some code
    }

    @Named 就是一个通过 @Qualifier 定义的限定器。

    @Scope 和 @Singleton

    其中,@Scope 用于创建作用域。作用域是一个自定义的注解,可注解构造器,用于要求注入器对注入的实例的创建方式。比如,是每次构造器被调用就创建一个依赖的实例,还是就创建一个依赖的实例然后重用。作用域注解必须被 @Scope 和 @Retention(RetentionPolicy.RUNTIME) 注解。

    @ Singleton 就是一个通过 @Scope 定义的作用域。

    Provider<T>

    Provider 作为另一种提供依赖的定义(有一种是 @Inject 注解),其实例提供 T 类型的实例。与 @Inject 注解相比,其还能:

    • 返回的实例可以是多个
    • 返回的实例可以是延迟返回的
    • 返回的实例来自指定作用域内(不明觉厉)

    参考

    1. Java 依赖注入标准(JSR-330)简介
    2. Inject Javadoc
    展开全文
  • IoC and DI JSR-299 JSR-330

    千次阅读 2016-05-24 15:47:57
    前言 JSR 299: Contexts and Dependency...JSR 330: Dependency Injection for Java 从名称来看可知 JSR 299 主要作用于 JavaTM EE(在JavaSE环境下功能会打折扣),JSR 330 则作用于任何 Java 环境 理解与认知
  • JSR-330 ‘javax.inject.Inject’ annotation found and supported for autowiring 近期碰到一个bug 项目启动卡住,直接运行正常,debug不行,一般是有设置的断点未取消。 参考博客JSR-330 'javax.inject.Inject' ...
  • JSR-330 ‘javax.inject.Inject’ annotation found and supported for autowiring 近期碰到一个bug 项目启动卡住啦 可能是有一个断点卡住啦项目
  • Java 依赖注入标准(JSR-330)简介 转载请保留作者信息: 作者:88250 ,Vanessa 时间:2009 年 11 月 19 日  Java 依赖注入标准(JSR-330,Dependency Injection for Java)1.0 规范已于今年 10 月份发布...
  • SpringBoot项目启动卡住了,一直报JSR-330 'javax.inject.Inject' annotation found and supported for autowiring,
  • 从Spring 3.0开始,Spring提供对JSR-330(javax.inject)标准注解(依赖注入)的支持。
  • 从Spring 3.0开始,Spring支持标准的JSR 330:Java依赖注入 。 在Spring 3应用程序中,您可以使用标准 @Inject代替Spring的@Autowired来注入一个bean。 @Named代替Spring的@Component声明一个bean。 那些JSR...
  • 从Spring 3.0开始,Spring开始支持JSR-330标准的注解(依赖注入)。这些注解和Spring注解扫描的方式是一直的,开发者只需要在classpath中配置相关的jar包即可。 如果开发者使用Maven来管理项目的话,javax....
  • JSR-330 ‘javax.inject.Inject’ annotation found and supported for autowiring 近期碰到一个bug 项目启动卡住啦 可能是有一个断点卡住啦项目
  • 依赖注入(控制反转的一种形式),它是Java开发主流中一个重要的编程范式(思维方式)。...Java DI的官方标准是JSR-330,本文我们还会介绍JSR-330的参考实现Guice 3,一个轻量级 的DI框架。 IoC and DI 使用Io
  • JSR-330其实是一种注入的标准了,详细参考http://www.jcp.org/en/jsr/detail?id=330   在spring 3.1中,可以使用@Inject,@Named 这两个注解去实现注入,其中  @Inject等于@Autowired ,@Named等于@component。...
  •  Java 依赖注入标准(JSR-330,Dependency Injection for Java)1.0 规范已于今年 10 月份发布。该规范主要是面向依赖注入使用者,而对注入器实现、配置并未作详细要求。目前 Spring、Guice 已经开始兼容该规范,...
  • spring 3.1中对JSR-330的支持

    千次阅读 2013-07-01 17:59:13
    JSR-330其实是一种注入的标准了,详细参考http://www.jcp.org/en/jsr/detail?id=330  在spring 3.1中,可以使用@Inject,@Named 这两个注解去实现注入,其中 @Inject等于@Autowired ,@Named等于@component。结合...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,608
精华内容 2,243
关键字:

JSR-330